zirias@
Developer
This is a question about scheduling. Scenario: I have a single machine doing everything I need at home, this includes several (bhyve) virtual machines, one of them acting as my router/firewall (with PCI passthrough of the physical NICs), and also several VNET jails, one of them is my build host for the base system and poudriere for ports.
The "builder" should ideally only do something when a CPU core would be idle otherwise. So far I started that jail with
My assumption now is that even idle prio tasks do get a minimum share of time slices, probably to prevent starving. Is this correct? If so, is there some knob (e.g. sysctl) I can use to configure something like a threshold to further limit the amount of CPU time an idle priority task can "steal"?
The "builder" should ideally only do something when a CPU core would be idle otherwise. So far I started that jail with
idprio
, which is automatically inherited by all child processes. Poudriere fires up [ncpu] build tasks (8 in my case), and this solution worked very well -- it never affected the responsiveness of other things the same hardware is doing. Sometimes, this leads to a situation where a huge port builds using a single task, and all other ports in the queue depend on this one -- so I started allowing parallel building for some ports that typically suffer from that problem. Of course, this can lead to poudriere using 15 or even 23 tasks at the same time, and suddenly I noticed my router was affected by this. To restore normal network performance, I had to put my router vm on rtprio
. This doesn't feel like a good solution, especially as other vms (like the Windows server I need for remote work) are affected as well.My assumption now is that even idle prio tasks do get a minimum share of time slices, probably to prevent starving. Is this correct? If so, is there some knob (e.g. sysctl) I can use to configure something like a threshold to further limit the amount of CPU time an idle priority task can "steal"?