From: Francesco RUNDO <francesco.rundo@st.com>
To: ltp-list@lists.sourceforge.net
Subject: [LTP] kernel/controllers/ testcase and CGROUPS support
Date: Wed, 03 Jun 2009 14:49:12 +0200 [thread overview]
Message-ID: <4A267148.8000700@st.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 3059 bytes --]
Hi All,
I'd like to submit a request to change the method to check if CGROUPS
support is enabled and available or not.
I'm referring to the kernel/controllers/xxx testcase. I'm using the
LTP-full-20090430 cross-compiled for SH based arch with a kernel 2.6.23
The used/released method placed inside kernel/controllers/Makefile,
tries to understand if the cgroups (and others related...) support has
been enabled in the current kernel, performing a check in the root
filesystem under "/proc". It makes something like that:
CHECK_CGROUP := $(shell test -f /proc/cgroups && echo 'cgroup')
Now, in the context of LTP built for i386, the above check works fine.
But what happen if LTP is cross-built ?
Unfortunately, the "/proc" entry checked by the above Makefile rule, is
the ones placed in the host and not the "/proc" of the target root
filesysetm (in my case SH based target). This is wrong!
Moreover, "/proc" is an entry which makes sense at runtime while it is
useless at built time so the above check is "always" not applicable in
case of LTP is built for other arch different from i386.
In order to cover the scenario in which LTP is cross-built, I've patched
the Makefile , replacing the above rule with the following ones:
ifdef $(CROSS_COMPILE)
CHECK_CGROUP := $(shell test -f
$(TARGET_DIR)/usr/include/linux/cgroupstats.h && echo 'cgroup')
else
CHECK_CGROUP := $(shell test -f /proc/cgroups && echo 'cgroup')
CHECK_CPUCTL := $(shell grep -w cpu /proc/cgroups 2>/dev/null|cut -f1)
CHECK_MEMCTL := $(shell grep -w memory /proc/cgroups 2>/dev/null|cut -f1)
CHECK_BLOCKIOCTL := $(shell grep -w blockio /proc/cgroups
2>/dev/null|cut -f1)
CHECK_FREEZER := $(shell grep -w freezer /proc/cgroups 2>/dev/null| cut
-f1)
CHECK_CPUSETCTL = $(shell grep -w cpuset /proc/cgroups 2>/dev/null|cut -f1)
endif
ifdef $(CROSS_COMPILE)
ifeq ($(CHECK_CGROUP),cgroup)
SUBDIRS += cgroup
SUBDIRS += cpuctl
SUBDIRS += memctl
SUBDIRS += io-throttle
SUBDIRS += freezer
SUBDIRS += cpuset
else
$(info "Kernel is not compiled with control cgroup support")
endif
else
ifeq ($(CHECK_CGROUP),cgroup)
SUBDIRS += cgroup
else
..............................................(the same rules placed
in the original released Makefile).
The above checked header file "cgroupstats.h" is placed in the target
rootfs. If the cgroups support is available (and enabled...likely ;-)
the above header is placed in the target rootfs.
In that way, in case of cross-compilation (the env CROSS_COMPILE was
defined) the check will be done in the header file instead of /proc.
The env TARGET_DIR works like a "--prefix" fixing the path of the
cross-target rootfs.
Of course, If you have another checks/methods which can be done to
understand -at build time- if cgroups support is available and/or
enabled -for target platform-, please feel free to post a comment to LTP.
Anyway, I'll attach the patch I've applied in our system.
Advices and feedbacks are welcome!
Regards
Francesco Rundo
[-- Attachment #2: ltp-full-20090430-fix-cgroups-testcase.patch --]
[-- Type: text/plain, Size: 1539 bytes --]
This patch allows the cross-build of kernel/controllers (cgroups tests) testcase changing the policy to check the cgroups capability at build-time.
Signed-off-by: Francesco Rundo <francesco.rundo@st.com>
--- ltp-full-20090430-cross/testcases/kernel/controllers/Makefile.orig 2009-05-26 15:37:35.140000000 +0200
+++ ltp-full-20090430-cross/testcases/kernel/controllers/Makefile 2009-05-28 13:36:36.669998000 +0200
@@ -1,10 +1,26 @@
+ifdef $(CROSS_COMPILE)
+CHECK_CGROUP := $(shell test -f $(TARGET_DIR)/usr/include/linux/cgroupstats.h && echo 'cgroup')
+else
CHECK_CGROUP := $(shell test -f /proc/cgroups && echo 'cgroup')
CHECK_CPUCTL := $(shell grep -w cpu /proc/cgroups 2>/dev/null|cut -f1)
CHECK_MEMCTL := $(shell grep -w memory /proc/cgroups 2>/dev/null|cut -f1)
CHECK_BLOCKIOCTL := $(shell grep -w blockio /proc/cgroups 2>/dev/null|cut -f1)
CHECK_FREEZER := $(shell grep -w freezer /proc/cgroups 2>/dev/null| cut -f1)
CHECK_CPUSETCTL = $(shell grep -w cpuset /proc/cgroups 2>/dev/null|cut -f1)
+endif
+ifdef $(CROSS_COMPILE)
+ifeq ($(CHECK_CGROUP),cgroup)
+SUBDIRS += cgroup
+SUBDIRS += cpuctl
+SUBDIRS += memctl
+SUBDIRS += io-throttle
+SUBDIRS += freezer
+SUBDIRS += cpuset
+else
+$(info "Kernel is not compiled with control cgroup support")
+endif
+else
ifeq ($(CHECK_CGROUP),cgroup)
SUBDIRS += cgroup
else
@@ -36,6 +52,7 @@
else
$(info "Kernel is not compiled with cpuset resource controller support")
endif
+endif
# If at least one of the controllers is available then build libcontrollers.
ifneq ($(SUBDIRS),)
[-- Attachment #3: Type: text/plain, Size: 408 bytes --]
------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
[-- Attachment #4: Type: text/plain, Size: 155 bytes --]
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next reply other threads:[~2009-06-03 12:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-03 12:49 Francesco RUNDO [this message]
2009-06-04 9:27 ` [LTP] kernel/controllers/ testcase and CGROUPS support Subrata Modak
2009-06-04 11:29 ` Subrata Modak
2009-06-11 7:59 ` Francesco RUNDO
2009-06-15 19:16 ` Subrata Modak
2009-06-15 19:30 ` Francesco RUNDO
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A267148.8000700@st.com \
--to=francesco.rundo@st.com \
--cc=ltp-list@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox