mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-06-03 11:21:52 +02:00
[core] add cgroups checks
This commit is contained in:
parent
a2f559f48a
commit
788bd7738b
2 changed files with 116 additions and 1 deletions
101
meshroom/core/cgroup.py
Executable file
101
meshroom/core/cgroup.py
Executable file
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env python
|
||||
# coding:utf-8
|
||||
|
||||
import os
|
||||
|
||||
#Try to retrieve limits of memory for the current process' cgroup
|
||||
def getCgroupMemorySize():
|
||||
|
||||
#first of all, get pid of process
|
||||
pid = os.getpid()
|
||||
|
||||
#Get cgroup associated with pid
|
||||
filename = f"/proc/{pid}/cgroup"
|
||||
|
||||
cgroup = None
|
||||
try:
|
||||
with open(filename, "r") as f :
|
||||
|
||||
#cgroup file is a ':' separated table
|
||||
#lookup a line where the second field is "memory"
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
tokens = line.rstrip("\r\n").split(":")
|
||||
if len(tokens) < 3:
|
||||
continue
|
||||
if tokens[1] == "memory":
|
||||
cgroup = tokens[2]
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
if cgroup is None:
|
||||
return -1
|
||||
|
||||
size = -1
|
||||
filename = f"/sys/fs/cgroup/memory/{cgroup}"
|
||||
try:
|
||||
with open(filename, "r") as f :
|
||||
value = f.read().rstrip("\r\n")
|
||||
if value.isnumeric():
|
||||
size = int(value)
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
return size
|
||||
|
||||
def parseNumericList(str):
|
||||
|
||||
nList = []
|
||||
for item in str.split(','):
|
||||
if '-' in item:
|
||||
start, end = item.split('-')
|
||||
start = int(start)
|
||||
end = int(end)
|
||||
nList.extend(range(start, end + 1))
|
||||
else:
|
||||
value = int(item)
|
||||
nList.append(value)
|
||||
|
||||
return nList
|
||||
|
||||
#Try to retrieve limits of cores for the current process' cgroup
|
||||
def getCgroupCpuCount():
|
||||
|
||||
#first of all, get pid of process
|
||||
pid = os.getpid()
|
||||
|
||||
#Get cgroup associated with pid
|
||||
filename = f"/proc/{pid}/cgroup"
|
||||
|
||||
cgroup = None
|
||||
try:
|
||||
with open(filename, "r") as f :
|
||||
|
||||
#cgroup file is a ':' separated table
|
||||
#lookup a line where the second field is "memory"
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
tokens = line.rstrip("\r\n").split(":")
|
||||
if len(tokens) < 3:
|
||||
continue
|
||||
if tokens[1] == "cpuset":
|
||||
cgroup = tokens[2]
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
if cgroup is None:
|
||||
return -1
|
||||
|
||||
size = -1
|
||||
filename = f"/sys/fs/cgroup/cpuset/{cgroup}/cpuset.cpus"
|
||||
try:
|
||||
with open(filename, "r") as f :
|
||||
value = f.read().rstrip("\r\n")
|
||||
nlist = parseNumericList(value)
|
||||
size = len(nlist)
|
||||
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
return size
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue