- Make our transfer decisions based on load and not transferable load. A

cpu could have been bogged down with non-transferable load and still not
   migrated a new thread to an idle cpu.  This required some benchmarking and
   tuning to get right as the comment above it suggests.
This commit is contained in:
Jeff Roberson 2003-12-20 22:35:20 +00:00
parent e7a976f415
commit 249e0bea8f

View File

@ -751,13 +751,7 @@ kseq_transfer(struct kseq *kseq, struct kse *ke, int class)
* some CPUs may idle. Too low and there will be excess migration
* and context swiches.
*/
/*
* XXX This ksg_transferable might work better if we were checking
* against a global group load. As it is now, this prevents us from
* transfering a thread from a group that is potentially bogged down
* with non transferable load.
*/
if (ksg->ksg_transferable > ksg->ksg_cpus && kseq_idle) {
if (ksg->ksg_load > (ksg->ksg_cpus * 2) && kseq_idle) {
/*
* Multiple cpus could find this bit simultaneously
* but the race shouldn't be terrible.