changing cpuset of jail from inside of jail - is it feature?
Miroslav Lachman
000.fbsd at quip.cz
Wed Apr 22 10:48:02 UTC 2009
Bjoern A. Zeeb wrote:
> On Wed, 22 Apr 2009, Miroslav Lachman wrote:
>
> Hi,
>
>> I am running system FreeBSD 7.1-STABLE amd64 GENERIC (Wed Feb 11
>> 09:56:08 CET 2009) hosting few jails.
>> The machine has dual core CPU and some jails are set to run only on
>> one core (core 0 in this example):
>>
>> host# cpuset -l 0 -j 25
>>
>> As I tested today, root user inside the jail can change this by the
>> same command as I am doing it from the host system:
>>
>> injail# cpuset -l 0,1 -j 25
>>
>> And from now, jail with JID 25 is running on both cores.
>>
>> Is it expected behavior of cpuset to allow user inside the jail change
>> cpuset of the jail itself or is it a bug?
>>
>> It seems to me as undesirable.
>
>
> it is (undesirable) and it seems to be a bug as even if you do
>
> host# cpuset -l 0 -r -j 25
>
> you can get back to 0,1 from within the jail.
>
> I'll check how/why this is possible.
>
> /bz
>
> PS: moving this to freebsd-jail@
I found this behavior as result of your reply to my e-mail from March
http://lists.freebsd.org/pipermail/freebsd-jail/2009-March/000751.html
You are suggesting jail_<jname>_exec_afterstart to use it for cpuset of
starting jails, but as I look in to /etc/rc.d/jail, it seems this
command is executed inside of the jail:
while [ true ]; do
eval out=\"\${_exec_afterstart${i}:-''}\"
if [ -z "$out" ]; then
break;
fi
jexec "${_jail_id}" ${out}
i=$((i + 1))
done
So I was confused if cpuset behavior i expected or not and if not, I
don't know how to use current rc.d/jail + rc.conf to start jails on
choosen cores or in particular set of cpus/cores.
That was the reason to my suggestion - write patch for rc.d/jail to
support something like:
jail_<jname>_cpuset_list="0,3,5" # start jail on cores 0, 3 and 5
It should be something like:
_cpuset="cpuset -l ${_cpuset_list}"
eval ${_cpuset} ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
\"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1
(I didn't test the example above, so I don't know if it is valid)
or something like:
if [ -n "$_cpuset_list" ]; then
cpuset -l ${_cpuset_list} -j ${_jail_id}
fi
(^ this seems more simpler)
I don't know what is better, or if there is another way to set cpuset of
jails from rc.conf
But the first problem is as I previously posted - cpuset of jail should
not be changed from within jail...
Miroslav Lachman
More information about the freebsd-jail
mailing list