[Bug 223914] [PATCH] Fix bug in which the long term ULE load balancer is executed only once
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Mon Nov 27 17:51:02 UTC 2017
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223914
Bug ID: 223914
Summary: [PATCH] Fix bug in which the long term ULE load
balancer is executed only once
Product: Base System
Version: CURRENT
Hardware: Any
OS: Any
Status: New
Keywords: patch
Severity: Affects Many People
Priority: ---
Component: kern
Assignee: freebsd-bugs at FreeBSD.org
Reporter: justinien.bouron at epfl.ch
Keywords: patch
Created attachment 188323
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=188323&action=edit
Patch for the ULE load balancer solving the issue of this bug report.
The load balancer of ULE has a bug which cause it to be executed only once at
startup, and it will *never* be executed again.
The reason is simple, when the sched_balance function is called for the first
time, the smp is not yet setup, and the function returns.
However the balance_tick variable is not resetted before the return and thus
will remains 0 for ever.
Because the condition in sched_clock to trigger the load balancer is :
" balance_ticks && --balance_ticks == 0 ", once balance_ticks is 0, this
condition will never be met, and thus the load balancer will never be executed
again.
To convince yourself you can even put a panic right before the call to
sched_balance_group in sched_balance, it will never panic ...
The fix is rather simple, just move the line resetting the balance_ticks value
*before* the if branch "if (smp_started == 0 || rebalance == 0)". That way we
are sure that the load balancer is re-scheduled.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list