Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 1331562 - rt: fix idle_balance iterating over all CPUs if a runnable task shows up partway through
rt: fix idle_balance iterating over all CPUs if a runnable task shows up part...
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: kernel-rt (Show other bugs)
7.3
x86_64 Linux
medium Severity medium
: rc
: ---
Assigned To: Steven Rostedt
Jiri Kastner
:
Depends On:
Blocks: 1274397
  Show dependency treegraph
 
Reported: 2016-04-28 15:40 EDT by Clark Williams
Modified: 2016-11-03 15:48 EDT (History)
6 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2016-11-03 15:48:49 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
break out of idle_balance if an RT task is ready to run (3.76 KB, patch)
2016-04-28 15:49 EDT, Clark Williams
no flags Details | Diff
Enable irqs in idle_balance() routine (1.13 KB, patch)
2016-04-28 15:49 EDT, Clark Williams
no flags Details | Diff
Move call to idle_balance to post-schedule (2.42 KB, patch)
2016-04-28 15:50 EDT, Clark Williams
no flags Details | Diff


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2016:2584 normal SHIPPED_LIVE Important: kernel-rt security, bug fix, and enhancement update 2016-11-03 08:08:49 EDT

  None (edit)
Description Clark Williams 2016-04-28 15:40:23 EDT
The idle_balance() kernel function is responsible for balancing SCHED_OTHER tasks when a core goes idle. This function is called with interrupts disabled, meaning on systems with a large number of cores (>=64) hundreds of microseconds can be spent in the balance function without the opportunity for a high priority task to preempt and run. 

This behavior can be seen when running rteval on a 72-core HP DL580gen9 and observing the lock contention on the run-queue locks when idle_balance() is called. The cyclictest thread on the core that is running idle_balance() cannot run; it's timer fires but the interrupt is held off due to idle_balance() running and the cyclictest thread misses its deadline by hundreds of microseconds.
Comment 1 Rik van Riel 2016-04-28 15:46:57 EDT
There are a few separate issues here:
1) idle_balance is currently called with irqs disabled, Steven Rostedt has a patch to fix that
2) idle_balance continues to iterate over all CPUs even if a runnable task shows up during balancing, I have a patch to fix that

We need both of these fixes together to get the system to behave better.
Comment 2 Clark Williams 2016-04-28 15:49 EDT
Created attachment 1152052 [details]
break out of idle_balance if an RT task is ready to run
Comment 3 Clark Williams 2016-04-28 15:49 EDT
Created attachment 1152053 [details]
Enable irqs in idle_balance() routine
Comment 4 Clark Williams 2016-04-28 15:50 EDT
Created attachment 1152054 [details]
Move call to idle_balance to post-schedule
Comment 5 Clark Williams 2016-04-28 15:51:10 EDT
The above three patches have been applied to a scratch build based on kernel-rt-3.10.0-382.rt56.263.el7 and are under testing now
Comment 7 Jiri Kastner 2016-10-04 06:09:31 EDT
see bug 1209987 comment 20
Comment 9 errata-xmlrpc 2016-11-03 15:48:49 EDT
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHSA-2016-2584.html

Note You need to log in before you can comment on or make changes to this bug.