On Fri, Sep 30, 2011 at 10:28 AM, Paul Hartman
<paul.hartman+gen...@gmail.com> wrote:
> On Fri, Sep 30, 2011 at 11:25 AM, Mark Knecht <markkne...@gmail.com> wrote:
>> Hi,
>>   Is there a portage option that will limit the number of cores used
>> by emerge? For instance, in a chroot on a 12 core machine I want to
>> limit emerge to not using more than 3 cores?
>>
>>   If possible, I'd also like to limit the total disk bandwidth
>> consumption during emerge. For instance, when untarring a big file to
>> do the emerge at times the disk consumption gets to high and the
>> machine becomes laggy. Is there an option that addresses this?
>>
>>   These questions are mostly about being able to update a chroot
>> mid-day without other tasks slowing down too much. I don't care how
>> long the chroot really takes to get a huge emerge done, but rathe just
>> keeping the machine very responsive while it's happening. I already
>> use:
>>
>> MAKEOPTS="-j3"
>> PORTAGE_NICENESS="15"
>>
>> which helps (I think) but it doesn't totally address either of the issues 
>> above.
>
> If your MAKEOPTS is -j3 then it's not going to use more than 3 cores
> at a time but it will touch all 12 cores throughout the process
> because of the normal load balancing. If you want it to use only 3
> specific cores, you would need to set the processor affinity (usually
> done using the "taskset" command from sys-apps/util-linux).
>
> For the disk I/O you can set an ionice in your make.conf like:
> PORTAGE_IONICE_COMMAND="ionice -c 3 -p \${PID}"
>
> Salt to taste. :)
>

Thanks to all who have answered so far. I'll give the ionice command a
try immediately. I'll try to address my view of other comments in a
single post to keep the traffic down.

My experience with -j3 is not that it limits emerge to 3 CPU cores but
rather it limits emerge to running 3 _jobs_. There's a big difference.
1 job can use 12 cores if gcc spawns a lot of stuff in parallel, which
in my experience it does. It's this parallel spawn running up to 12
cores in use which causes the machine to lag. Even when not setting
the -j option at all which results in a single package being emerged
at one time, I often use 6-12 cores in use for short periods of time
as gcc builds that package. This is completely appropriate for the
host machine. When I do updates I want them to get done ASAP. On the
other hand, for a chroot it's too much power.

Concerning which core is used, I don't care.

Concerning the 'bouncing around' aspect of multi-core processors,
that's primarily a CPU function of where it has cached data & code as
well as thermal management on chip. Internal hardware is generally
controlling what CPU gets used for what as far as I know. However even
a single emerge job (1 package being emerged) could move around from
core to core depending on what work is getting done. It's
understandable that a driver might be fundamentally associated with a
specific core's immediate L1 or L2 cache, whereas the emerge job
itself could be using other cores.

Of course, everything above is just my limited understanding of what
the hardware is doing and could be completely wrong.

Thanks,
Mark

Reply via email to