Luca Abeni
269ad8015a
sched/deadline: Avoid double-accounting in case of missed deadlines
...
The dl_runtime_exceeded() function is supposed to ckeck if
a SCHED_DEADLINE task must be throttled, by checking if its
current runtime is <= 0. However, it also checks if the
scheduling deadline has been missed (the current time is
larger than the current scheduling deadline), further
decreasing the runtime if this happens.
This "double accounting" is wrong:
- In case of partitioned scheduling (or single CPU), this
happens if task_tick_dl() has been called later than expected
(due to small HZ values). In this case, the current runtime is
also negative, and replenish_dl_entity() can take care of the
deadline miss by recharging the current runtime to a value smaller
than dl_runtime
- In case of global scheduling on multiple CPUs, scheduling
deadlines can be missed even if the task did not consume more
runtime than expected, hence penalizing the task is wrong
This patch fix this problem by throttling a SCHED_DEADLINE task
only when its runtime becomes negative, and not modifying the runtime
Signed-off-by: Luca Abeni <luca.abeni@unitn.it>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Juri Lelli <juri.lelli@gmail.com>
Cc: <stable@vger.kernel.org>
Cc: Dario Faggioli <raistlin@linux.it>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/1418813432-20797-3-git-send-email-luca.abeni@unitn.it
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2015-01-09 11:18:57 +01:00
..
bpf
bpf: verifier: add checks for BPF_ABS | BPF_IND instructions
2014-12-05 21:47:32 -08:00
configs
debug
kdb: replace strnicmp with strncasecmp
2014-10-14 02:18:25 +02:00
events
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-19 13:15:24 -08:00
gcov
gcov: enable GCOV_PROFILE_ALL from ARCH Kconfigs
2014-12-13 12:42:51 -08:00
irq
genirq: Prevent proc race against freeing of irq descriptors
2014-12-13 13:33:07 +01:00
locking
locking/mutex: Don't assume TASK_RUNNING
2014-10-28 10:55:08 +01:00
power
PM: Eliminate CONFIG_PM_RUNTIME
2014-12-19 22:55:06 +01:00
printk
This code is a fork from the trace-3.19 pull as it needed the trace_seq
2014-12-13 14:04:41 -08:00
rcu
Merge branches 'torture.2014.11.03a', 'cpu.2014.11.03a', 'doc.2014.11.13a', 'fixes.2014.11.13a', 'signal.2014.10.29a' and 'rt.2014.10.29a' into HEAD
2014-11-13 10:39:04 -08:00
sched
sched/deadline: Avoid double-accounting in case of missed deadlines
2015-01-09 11:18:57 +01:00
time
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-19 13:29:20 -08:00
trace
More ACPI and power management updates for 3.19-rc1
2014-12-18 20:28:33 -08:00
.gitignore
acct.c
acct: eliminate compile warning
2014-10-09 22:26:04 -04:00
async.c
kernel/async.c: switch to pr_foo()
2014-10-09 22:26:04 -04:00
audit.c
Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/audit
2014-12-13 13:41:28 -08:00
audit.h
audit: reduce scope of audit_log_fcaps
2014-09-23 16:37:51 -04:00
audit_tree.c
fsnotify: unify inode and mount marks handling
2014-12-13 12:42:53 -08:00
audit_watch.c
audit: invalid op= values for rules
2014-09-23 16:37:53 -04:00
auditfilter.c
Merge git://git.infradead.org/users/eparis/audit
2014-10-19 16:25:56 -07:00
auditsc.c
new helper: audit_file()
2014-11-19 13:01:26 -05:00
backtracetest.c
bounds.c
capability.c
cgroup.c
cgroup: implement cgroup_get_e_css()
2014-11-18 02:49:52 -05:00
cgroup_freezer.c
compat.c
compat: nanosleep: Clarify error handling
2014-09-06 12:58:18 +02:00
configs.c
context_tracking.c
sched: stop the unbound recursion in preempt_schedule_context()
2014-10-28 10:46:05 +01:00
cpu.c
cpu: Avoid puts_pending overflow
2014-11-03 19:21:01 -08:00
cpu_pm.c
cpuset.c
Merge branch 'for-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
2014-12-11 18:57:19 -08:00
crash_dump.c
crash_dump: Make is_kdump_kernel() accessible from modules
2014-08-25 15:42:19 -07:00
cred.c
delayacct.c
dma.c
elfcore.c
exec_domain.c
exit.c
TTY/Serial driver patches for 3.19-rc1
2014-12-14 15:23:32 -08:00
extable.c
ftrace/x86/extable: Add is_ftrace_trampoline() function
2014-11-19 15:25:26 -05:00
fork.c
mm: use new helper functions around the i_mmap_mutex
2014-12-13 12:42:45 -08:00
freezer.c
freezer: remove obsolete comments in __thaw_task()
2014-10-21 23:44:20 +02:00
futex.c
futex: Fix a race condition between REQUEUE_PI and task death
2014-10-26 16:16:18 +01:00
futex_compat.c
groups.c
userns: Don't allow setgroups until a gid mapping has been setablished
2014-12-09 16:58:40 -06:00
hung_task.c
irq_work.c
percpu: Convert remaining __get_cpu_var uses in 3.18-rcX
2014-10-29 11:18:18 -04:00
jump_label.c
kallsyms.c
kernel/kallsyms.c: use __seq_open_private()
2014-10-14 02:18:16 +02:00
kcmp.c
kcmp: fix standard comparison bug
2014-09-10 15:42:12 -07:00
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kexec.c
kexec: remove unnecessary KERN_ERR from kexec.c
2014-12-13 12:42:51 -08:00
kmod.c
usermodehelper: kill the kmod_thread_locker logic
2014-12-10 17:41:17 -08:00
kprobes.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
2014-12-11 17:30:55 -08:00
ksysfs.c
kthread.c
kernel/kthread.c: partial revert of 81c98869fa ("kthread: ensure locality of task_struct allocations")
2014-10-09 22:25:51 -04:00
latencytop.c
Makefile
kernel: res_counter: remove the unused API
2014-12-10 17:41:04 -08:00
module-internal.h
module.c
The exciting thing here is the getting rid of stop_machine on module
2014-12-18 20:55:41 -08:00
module_signing.c
notifier.c
nsproxy.c
bury struct proc_ns in fs/proc
2014-12-04 14:34:54 -05:00
padata.c
panic.c
kernel: add panic_on_warn
2014-12-10 17:41:10 -08:00
params.c
param: do not set store func without write perm
2014-12-18 12:38:51 +10:30
pid.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2014-12-16 15:53:03 -08:00
pid_namespace.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2014-12-16 15:53:03 -08:00
profile.c
ptrace.c
exit: ptrace: shift "reap dead" code from exit_ptrace() to forget_original_parent()
2014-12-10 17:41:10 -08:00
range.c
reboot.c
kernel: add support for kernel restart handler call chain
2014-09-26 00:00:06 -07:00
relay.c
resource.c
x86: optimize resource lookups for ioremap
2014-10-14 02:18:22 +02:00
seccomp.c
Merge branch 'x86-seccomp-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-10-14 02:27:06 +02:00
signal.c
Merge branch 'x86-mpx-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2014-12-10 09:34:43 -08:00
smp.c
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
smpboot.c
sched, smp: Correctly deal with nested sleeps
2014-10-28 10:56:24 +01:00
smpboot.h
softirq.c
rcu: Remove "cpu" argument to rcu_note_context_switch()
2014-11-03 19:20:34 -08:00
stacktrace.c
stacktrace: introduce snprint_stack_trace for buffer output
2014-12-13 12:42:48 -08:00
stop_machine.c
sys.c
x86, mpx: On-demand kernel allocation of bounds tables
2014-11-18 00:58:53 +01:00
sys_ni.c
syscalls: implement execveat() system call
2014-12-13 12:42:51 -08:00
sysctl.c
As the merge window is still open, and this code was not as complex
2014-12-16 12:53:59 -08:00
sysctl_binary.c
kernel: add panic_on_warn
2014-12-10 17:41:10 -08:00
system_certificates.S
system_keyring.c
task_work.c
taskstats.c
kill f_dentry uses
2014-11-19 13:01:25 -05:00
test_kprobes.c
torture.c
torture: Address race in module cleanup
2014-09-16 13:41:06 -07:00
tracepoint.c
tsacct.c
uid16.c
groups: Consolidate the setgroups permission checks
2014-12-05 17:19:27 -06:00
up.c
user-return-notifier.c
scheduler: Replace __get_cpu_var with this_cpu_ptr
2014-08-26 13:45:45 -04:00
user.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
2014-12-17 12:31:40 -08:00
user_namespace.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
2014-12-17 12:31:40 -08:00
utsname.c
copy address of proc_ns_ops into ns_common
2014-12-04 14:34:47 -05:00
utsname_sysctl.c
watchdog.c
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
workqueue.c
workqueue: allow rescuer thread to do more work.
2014-12-08 12:39:16 -05:00
workqueue_internal.h