Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 530034 - sys-apps/openrc - /lib64/rc/sh/rc-cgroup.sh: line 67: echo: write error: No space left on device
Summary: sys-apps/openrc - /lib64/rc/sh/rc-cgroup.sh: line 67: echo: write error: No s...
Status: UNCONFIRMED
Alias: None
Product: Gentoo Hosted Projects
Classification: Unclassified
Component: OpenRC (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: OpenRC Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-21 11:32 UTC by Marcin Mirosław
Modified: 2016-02-11 15:49 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Marcin Mirosław 2014-11-21 11:32:56 UTC
I've prepared init script which starts cpuburn to easy check if cpuset works as I wish.
$ cat /etc/conf.d/cpuburn2
rc_cgroup_mems="0"
rc_cgroup_cpuset="1"

# service cpuburn2 start
/lib64/rc/sh/rc-cgroup.sh: linia 67: echo: błąd zapisu: Brak miejsca na urządzeniu
 * Starting cpuburn2 ...         [ ok ]

Ok, lets rerun with "--debug":
# /etc/init.d/cpuburn2 start --debug
+ yesno ''
+ '[' -z '' ']'
+ return 1

[ ... ]

+ local controller=cpuset h=/
+ cgroup=/sys/fs/cgroup/cpuset/openrc_cpuburn2
+ '[' -d /sys/fs/cgroup/cpuset/openrc_cpuburn2 ']'
+ set -- 1
+ local name val
+ '[' -n 1 -a cpuset '!=' cpuacct ']'
+ case "$1" in
+ val=' 1'
+ shift
+ '[' -n '' -a cpuset '!=' cpuacct ']'
+ '[' -n '' -a -f /sys/fs/cgroup/cpuset/openrc_cpuburn2/ -a -n ' 1' ']'
+ '[' -f /sys/fs/cgroup/cpuset/openrc_cpuburn2/tasks ']'
+ veinfo 'cpuburn2: adding to /sys/fs/cgroup/cpuset/openrc_cpuburn2/tasks'
+ echo 0
/lib64/rc/sh/rc-cgroup.sh: line 67: echo: write error: No space left on device
+ return 0

So we can see init script firstly tries to put pid to "tasks" and it fails. After using web search engine I found solution:
### because it's non numa hardware:
# echo 0 > /sys/fs/cgroup/cpuset/openrc_cpuburn2/cpuset.mems
### to put on all cpus:
# echo 0-3 > /sys/fs/cgroup/cpuset/openrc_cpuburn2/cpuset.cpus

and now let's try to start service:
# service cpuburn2 start
 * Starting cpuburn2 ...         [ ok ]

Now there is no problem, good. But:
# cat /sys/fs/cgroup/cpuset/openrc_cpuburn2/cpuset.cpus
0-3
this isn't value I wanted to set using conf.d/cpuburn2 file. Looking on output from "--debug" I can't see that init script writes desired values to cpuset.cpus file. Did I configured it wrongly? Also it looks that setting cgroup.mems is obligatory but it looks openrc doesn't support it using "rc_cgroup_mems".





Reproducible: Always




# emerge --info
!!! Repository 'x-portage' is missing masters attribute in '/usr/local/portage/metadata/layout.conf'
!!! Set 'masters = gentoo' in this file for future compatibility
Portage 2.2.14 (python 2.7.8-final-0, default/linux/amd64/13.0/desktop/kde, gcc-4.8.3, glibc-2.20, 3.17.2-gentoo x86_64)
=================================================================
System uname: Linux-3.17.2-gentoo-x86_64-Intel-R-_Core-TM-2_Quad_CPU_Q6600_@_2.40GHz-with-gentoo-2.2
KiB Mem:     4555268 total,    566508 free
KiB Swap:    6291452 total,   5587460 free
Timestamp of tree: Fri, 21 Nov 2014 06:30:01 +0000
ld GNU gold (GNU Binutils 2.24) 1.11
ccache version 3.2 [enabled]
app-shells/bash:          4.3_p30-r1
dev-java/java-config:     2.2.0
dev-lang/perl:            5.20.1-r2
dev-lang/python:          2.7.8, 3.3.5-r1, 3.4.2
dev-util/ccache:          3.2
dev-util/cmake:           3.0.2
dev-util/pkgconfig:       0.28-r2
sys-apps/baselayout:      2.2
sys-apps/openrc:          0.13.5
sys-apps/sandbox:         2.6-r1
sys-devel/autoconf:       2.13, 2.69
sys-devel/automake:       1.14.1
sys-devel/binutils:       2.24-r3
sys-devel/gcc:            4.7.4, 4.8.3
sys-devel/gcc-config:     1.8
sys-devel/libtool:        2.4.3-r2
sys-devel/make:           4.1-r1
sys-kernel/linux-headers: 3.17-r1 (virtual/os-headers)
sys-libs/glibc:           2.20
Repositories: gentoo
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=native -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -march=native -pipe"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs ccache cgroup collision-protect compressdebug config-protect-if-modified distlocks ebuild-locks fakeroot fixlafiles news parallel-fetch parallel-install preserve-libs protect-owned sandbox sfperms strict unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://distfiles.gentoo.org"
LDFLAGS="-Wl,-O1 -Wl,--as-needed -z relro -Wl,--sort-common -O2 -march=native -pipe -fpeel-loops -frename-registers -frecord-gcc-switches -fno-unwind-tables -fno-asynchronous-unwind-tables           -fpredictive-commoning -fweb -ftree-vectorize -floop-interchange -fivopts -ftree-loop-distribution           -floop-block -floop-strip-mine -fira-loop-pressure -floop-interchange -ftree-loop-linear -Wdisabled-optimization   -fuse-linker-plugin"
MAKEOPTS="-j4 -l5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_EXTRA_OPTS="-O"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY=""
SYNC="rsync://192.168.138.254/gentoo-portage"
USE="X a52 aac acl acpi aio alsa amd64 apm async bash-completion bittorrent branding bzip2 cairo caps cdda cdr chroot cli consolekit crypt cups cxx dbus declarative dmx dri dvd dvdr emboss encode exif fam firefox ftp gif glamor glibc-omitfp gpm graphite gstreamer iconv idn iproute2 ipv6 ithreads jpeg kde kipi laptop lcms libnotify lightning logrotate mad mmap mmx mmxext mng modules mp3 mp4 mpeg multilib ncurses network-cron nls nptl nsplugin nspluginwrapper objc ogg opengl openmp openssl optimization optimized-qmake pam pango pch pcre pdf phonon plasma png policykit ppds python3 qt3support qt4 readline samba sdl semantic-desktop session sharedmem smp spell sse sse2 sse3 ssl ssse3 startup-notification svg threads threadsafe tiff tools truetype udev udisks unicode unwind upower urandom usb vim vim-pager vim-syntax vorbis wxwidgets x264 xattr xcb xcomposite xinerama xml xscreensaver xv xvid zip zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cgid dav dbd deflate dir env expires ext_filter filter headers include info log_config logio mime mime_magic negotiation rewrite setenvif speling status unique_id usertrack vhost_alias" APACHE2_MPMS="worker" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" DRACUT_MODULES="caps lvm mdraid" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="pl en es es_ES" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-4 php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" USERLAND="GNU" VIDEO_CARDS="nvidia" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, USE_PYTHON
Comment 1 Alexander Vershilov (RETIRED) gentoo-dev 2014-11-22 22:26:11 UTC
Hello, Mirosław. Thanks for your report!

At first I want to say that there is no bug involved here, but your question shows that documentation should be improved and maybe we will have to introduce more checks.

Your configuration file (/etc/conf.d/cpuburn) should have following options:

rc_cgroup_cpuset="
cpuset.mems 0
cpuset.cpus 1
"

Then everything will work, i.e. cpuburn will use eating first cpu only.

The correct syntax is:

rc_cgroup_<name-of-the-hierarchy>="
<name-of-the-file-1> <value>
<name-of-the-file-2> <value>
"

where name of the file generally is <name-of-the-hierarchy>.<option-name>.

So I see 2 issues here:

1. openrc do not perform additional checks and throws out meaningless 'No space left on device'. The reason is simple as you have used cpuset hier process should me moved in his place in the hierarchy, but it was not configured before (i.e. cpuset.mems was not set to zero). I'm not sure that there is an easy way forward at just wrap a error message with some information that will show that there is a problem with cgroup configuration

2. documentation problem, here is quote from self documenting /etc/rc.conf file

# The format is to specify the names of the settings followed by their
# values. Each variable can hold multiple settings.
# For example, you would use this to set the cpu.shares setting in the
# cpu controller to 512 for your service.
# rc_cgroup_cpu="
# cpu.shares 512
# "

do you see a ways how it can be written better? maybe you prefer additional source on the wiki?
Comment 2 Marcin Mirosław 2014-11-24 16:34:31 UTC
Thank you Александр for detailed explanation. Now I can use cgroup without problem, at least pinning to cpu works:) If you put to rc.conf what you wrote to me:

rc_cgroup_<name-of-the-hierarchy>="
<name-of-the-file-1> <value>
<name-of-the-file-2> <value>
"

example:
rc_cgroup_cpuset="
cpuset.mems 0
cpuset.cpus 1
"

I think everything will be much more clear for people which wnat to use this feature.
Als it could be nice to check if `echo pid > tasks` finished without error, if not it would be nice to get message like:
"You didn't configure all cgroup parameters correctly, please check it".
Because using "cgroup.cpus" needs "cgroup.mems" configured earlier it would be great to give advice to user: (pseudocode)
if ! `echo pid > tasks` || "user used cpuset.cpus" then
  echo "you set cgroup.cpus, did you set cpugroup.mems also?"
fi
Comment 3 Alexander Vershilov (RETIRED) gentoo-dev 2014-11-24 16:58:23 UTC
(In reply to Marcin Mirosław from comment #2)
> Thank you Александр for detailed explanation. Now I can use cgroup without
> problem, at least pinning to cpu works:) If you put to rc.conf what you
> wrote to me:
> 
> rc_cgroup_<name-of-the-hierarchy>="
> <name-of-the-file-1> <value>
> <name-of-the-file-2> <value>
> "
> 
> example:
> rc_cgroup_cpuset="
> cpuset.mems 0
> cpuset.cpus 1
> "

I think it's doable I'll prepare a pull request soon.

> I think everything will be much more clear for people which wnat to use this
> feature.
> Als it could be nice to check if `echo pid > tasks` finished without error,
> if not it would be nice to get message like:
> "You didn't configure all cgroup parameters correctly, please check it".

Reasonable, I'll consult about actual phrase.

> Because using "cgroup.cpus" needs "cgroup.mems" configured earlier it would
> be great to give advice to user: (pseudocode)
> if ! `echo pid > tasks` || "user used cpuset.cpus" then
>   echo "you set cgroup.cpus, did you set cpugroup.mems also?"
> fi

I'm personally not happy with adding checks to the rc scripts as checking everything will blow up a script, and it's not used by the most people, also currently there are many constraints that is not easy to track.
So I think we will end with generic error message that is less cryptic than it was before.
Comment 4 William Hubbs gentoo-dev 2015-10-15 16:27:04 UTC
I have been unable to reproduce this issue with any services on my
system. Also, there was a cgroups fix applied to OpenRC-0.18.3 which
took care of several cgroups-related issues.
Can you test with OpenRC-0.18.3 and re-open this bug if this still occurs?
Comment 5 William Hubbs gentoo-dev 2015-10-15 16:30:00 UTC
Disregard previous, I'll look at this again.