Accepting request 235603 from home:mgalbraith_external2:branches:hardware
- Explicitly state that the previous commit.. "Make cset handle cgroup/cpuset mount types" ..added patch cset-make-it-handle-cgroup-mounts.patch - Make cset handle cgroup/cpuset mount types (SUSE bnc#625079, SUSE bnc#834223) OBS-URL: https://build.opensuse.org/request/show/235603 OBS-URL: https://build.opensuse.org/package/show/hardware/cpuset?expand=0&rev=22
This commit is contained in:
parent
9483cd4ed8
commit
038a3b1665
@ -1,3 +1,16 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 28 02:40:03 UTC 2014 - mgalbraith@suse.com
|
||||||
|
|
||||||
|
- Explicitly state that the previous commit..
|
||||||
|
|
||||||
|
"Make cset handle cgroup/cpuset mount types"
|
||||||
|
|
||||||
|
..added patch cset-make-it-handle-cgroup-mounts.patch
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 27 07:38:24 UTC 2014 - mgalbraith@suse.com
|
||||||
|
|
||||||
|
- Make cset handle cgroup/cpuset mount types (SUSE bnc#625079, SUSE bnc#834223)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Sep 17 23:56:58 UTC 2011 - jengelh@medozas.de
|
Sat Sep 17 23:56:58 UTC 2011 - jengelh@medozas.de
|
||||||
|
|
||||||
|
11
cpuset.spec
11
cpuset.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package cpuset
|
# spec file for package cpuset
|
||||||
#
|
#
|
||||||
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
# Copyright (c) 2008-2011 Novell, Inc. Waltham, MA, USA
|
# Copyright (c) 2008-2011 Novell, Inc. Waltham, MA, USA
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
@ -17,16 +17,16 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Name: cpuset
|
Name: cpuset
|
||||||
Version: 1.5.6
|
Version: 1.5.6
|
||||||
Release: 1
|
Release: 0
|
||||||
License: GPLv2
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
Url: http://code.google.com/p/cpuset
|
Url: http://code.google.com/p/cpuset
|
||||||
Group: System/Management
|
|
||||||
Summary: Allows manipulation of cpusets on system and provides higher level functions
|
Summary: Allows manipulation of cpusets on system and provides higher level functions
|
||||||
|
License: GPL-2.0
|
||||||
|
Group: System/Management
|
||||||
Source: %{name}-%{version}.tar.gz
|
Source: %{name}-%{version}.tar.gz
|
||||||
|
Patch0: cset-make-it-handle-cgroup-mounts.patch
|
||||||
BuildRequires: python-devel
|
BuildRequires: python-devel
|
||||||
%if 0%{?suse_version} > 0
|
%if 0%{?suse_version} > 0
|
||||||
%py_requires
|
%py_requires
|
||||||
@ -42,6 +42,7 @@ shielding setup.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup
|
%setup
|
||||||
|
%patch0 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
CFLAGS="%{optflags}" \
|
CFLAGS="%{optflags}" \
|
||||||
|
161
cset-make-it-handle-cgroup-mounts.patch
Normal file
161
cset-make-it-handle-cgroup-mounts.patch
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
Subject: cset, make it handle cgroup mounts
|
||||||
|
From: Mike Galbraith <mgalbraith@suse.de>
|
||||||
|
Date: Wed Sep 4 08:09:38 CEST 2013
|
||||||
|
References: bnc#625079, bnc#834223
|
||||||
|
|
||||||
|
When cpuset has been mounted as a cgroup controller, files are prefixes
|
||||||
|
with "cpuset.", leading to expected files not existing. Change cset's
|
||||||
|
filename expectations depending on mount type.
|
||||||
|
|
||||||
|
Signed-off-by: Mike Galbraith <mgalbraith@suse.de>
|
||||||
|
---
|
||||||
|
cpuset/cset.py | 46 +++++++++++++++++++++++++++++++++++-----------
|
||||||
|
1 file changed, 35 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
--- a/cpuset/cset.py
|
||||||
|
+++ b/cpuset/cset.py
|
||||||
|
@@ -36,6 +36,11 @@ RootSet = None
|
||||||
|
# a relative path from this basepath.
|
||||||
|
sets = {}
|
||||||
|
basepath = ''
|
||||||
|
+ cpus_path = '/cpus'
|
||||||
|
+ mems_path = '/mems'
|
||||||
|
+ cpu_exclusive_path = '/cpu_exclusive'
|
||||||
|
+ mem_exclusive_path = '/mem_exclusive'
|
||||||
|
+ tasks_path = '/tasks'
|
||||||
|
|
||||||
|
def __init__(self, path=None):
|
||||||
|
log.debug("initializing CpuSet")
|
||||||
|
@@ -56,6 +61,14 @@ RootSet = None
|
||||||
|
del CpuSet.sets
|
||||||
|
CpuSet.sets = {}
|
||||||
|
CpuSet.sets[self.path] = self
|
||||||
|
+
|
||||||
|
+ # if mounted as a cgroup controller, switch file name format
|
||||||
|
+ if not os.access(path + CpuSet.cpus_path, os.F_OK):
|
||||||
|
+ CpuSet.cpus_path = '/cpuset.cpus'
|
||||||
|
+ CpuSet.mems_path = '/cpuset.mems'
|
||||||
|
+ CpuSet.cpu_exclusive_path = '/cpuset.cpu_exclusive'
|
||||||
|
+ CpuSet.mem_exclusive_path = '/cpuset.mem_exclusive'
|
||||||
|
+
|
||||||
|
# bottom-up search otherwise links will not exist
|
||||||
|
log.debug("starting bottom-up discovery walk...")
|
||||||
|
for dir, dirs, files in os.walk(path, topdown=False):
|
||||||
|
@@ -104,7 +117,7 @@ RootSet = None
|
||||||
|
log.debug("the cpuset %s already exists, skipping", path)
|
||||||
|
self = CpuSet.sets[path] # questionable....
|
||||||
|
return
|
||||||
|
- cpus = CpuSet.basepath + path + "/cpus"
|
||||||
|
+ cpus = CpuSet.basepath + path + CpuSet.cpus_path
|
||||||
|
if not os.access(cpus, os.F_OK):
|
||||||
|
# not a cpuset directory
|
||||||
|
str = '%s is not a cpuset directory' % (CpuSet.basepath + path)
|
||||||
|
@@ -118,6 +131,8 @@ RootSet = None
|
||||||
|
log.debug("locating cpuset filesystem...")
|
||||||
|
cpuset = re.compile(r"none (/.+) cpuset .+")
|
||||||
|
cgroup = re.compile(r"none (/.+) cgroup .+")
|
||||||
|
+ cpuset1 = re.compile(r"cpuset (/.+) cpuset .+")
|
||||||
|
+ cgroup1 = re.compile(r"cgroup (/.+) cgroup .+")
|
||||||
|
path = None
|
||||||
|
f = file("/proc/mounts")
|
||||||
|
for line in f:
|
||||||
|
@@ -125,12 +140,21 @@ RootSet = None
|
||||||
|
if res:
|
||||||
|
path = res.group(1)
|
||||||
|
break
|
||||||
|
+ res = cpuset1.search(line)
|
||||||
|
+ if res:
|
||||||
|
+ path = res.group(1)
|
||||||
|
+ break
|
||||||
|
else:
|
||||||
|
if cgroup.search(line):
|
||||||
|
groups = line.split()
|
||||||
|
if re.search("cpuset", groups[3]):
|
||||||
|
path = groups[1]
|
||||||
|
break
|
||||||
|
+ if cgroup1.search(line):
|
||||||
|
+ groups = line.split()
|
||||||
|
+ if re.search("cpuset", groups[3]):
|
||||||
|
+ path = groups[1]
|
||||||
|
+ break
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
if not path:
|
||||||
|
@@ -158,36 +182,36 @@ RootSet = None
|
||||||
|
raise AttributeError, "deletion of properties not allowed"
|
||||||
|
|
||||||
|
def getcpus(self):
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/cpus")
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.cpus_path)
|
||||||
|
return f.readline()[:-1]
|
||||||
|
def setcpus(self, newval):
|
||||||
|
cpuspec_check(newval)
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/cpus",'w')
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.cpus_path,'w')
|
||||||
|
f.write(str(newval))
|
||||||
|
f.close()
|
||||||
|
log.debug("-> prop_set %s.cpus = %s", self.path, newval)
|
||||||
|
cpus = property(fget=getcpus, fset=setcpus, fdel=delprop, doc="CPU specifier")
|
||||||
|
|
||||||
|
def getmems(self):
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/mems")
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.mems_path)
|
||||||
|
return f.readline()[:-1]
|
||||||
|
def setmems(self, newval):
|
||||||
|
# FIXME: check format for correctness
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/mems",'w')
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.mems_path,'w')
|
||||||
|
f.write(str(newval))
|
||||||
|
f.close()
|
||||||
|
log.debug("-> prop_set %s.mems = %s", self.path, newval)
|
||||||
|
mems = property(getmems, setmems, delprop, "Mem node specifier")
|
||||||
|
|
||||||
|
def getcpuxlsv(self):
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/cpu_exclusive")
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.cpu_exclusive_path)
|
||||||
|
if f.readline()[:-1] == '1':
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
def setcpuxlsv(self, newval):
|
||||||
|
log.debug("-> prop_set %s.cpu_exclusive = %s", self.path, newval)
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/cpu_exclusive",'w')
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.cpu_exclusive_path,'w')
|
||||||
|
if newval:
|
||||||
|
f.write('1')
|
||||||
|
else:
|
||||||
|
@@ -197,14 +221,14 @@ RootSet = None
|
||||||
|
"CPU exclusive flag")
|
||||||
|
|
||||||
|
def getmemxlsv(self):
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/mem_exclusive")
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.mem_exclusive_path)
|
||||||
|
if f.readline()[:-1] == '1':
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
def setmemxlsv(self, newval):
|
||||||
|
log.debug("-> prop_set %s.mem_exclusive = %s", self.path, newval)
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/mem_exclusive",'w')
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.mem_exclusive_path,'w')
|
||||||
|
if newval:
|
||||||
|
f.write('1')
|
||||||
|
else:
|
||||||
|
@@ -214,7 +238,7 @@ RootSet = None
|
||||||
|
"Memory exclusive flag")
|
||||||
|
|
||||||
|
def gettasks(self):
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/tasks")
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.tasks_path)
|
||||||
|
lst = []
|
||||||
|
for task in f: lst.append(task[:-1])
|
||||||
|
return lst
|
||||||
|
@@ -229,7 +253,7 @@ RootSet = None
|
||||||
|
prog = False
|
||||||
|
for task in tasklist:
|
||||||
|
try:
|
||||||
|
- f = file(CpuSet.basepath+self.path+"/tasks",'w')
|
||||||
|
+ f = file(CpuSet.basepath+self.path+CpuSet.tasks_path,'w')
|
||||||
|
f.write(task)
|
||||||
|
f.close()
|
||||||
|
except Exception, err:
|
Loading…
Reference in New Issue
Block a user