Revision 3fe69747dab906cd6a8523230276a9820d6a514f authored by Peter Zijlstra on 14 March 2008, 19:55:51 UTC, committed by Ingo Molnar on 15 March 2008, 02:02:49 UTC
Current min_vruntime tracking is incorrect and will cause serious
problems when we don't run the leftmost task for some reason.

min_vruntime does two things; 1) it's used to determine a forward
direction when the u64 vruntime wraps, 2) it's used to track the
leftmost vruntime to position newly enqueued tasks from.

The current logic advances min_vruntime whenever the current task's
vruntime advance. Because the current task may pass the leftmost task
still waiting we're failing the second goal. This causes new tasks to be
placed too far ahead and thus penalizes their runtime.

Fix this by making min_vruntime the min_vruntime of the waiting tasks by
tracking it in enqueue/dequeue, and compare against current's vruntime
to obtain the absolute minimum when placing new tasks.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
1 parent 0e1f348
History
File Mode Size
9p
adfs
affs
afs
autofs
autofs4
befs
bfs
cifs
coda
configfs
cramfs
debugfs
devpts
dlm
ecryptfs
efs
exportfs
ext2
ext3
ext4
fat
freevxfs
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hppfs
hugetlbfs
isofs
jbd
jbd2
jffs2
jfs
lockd
minix
msdos
ncpfs
nfs
nfs_common
nfsd
nls
ntfs
ocfs2
openpromfs
partitions
proc
qnx4
ramfs
reiserfs
romfs
smbfs
sysfs
sysv
udf
ufs
vfat
xfs
Kconfig -rw-r--r-- 76.1 KB
Kconfig.binfmt -rw-r--r-- 5.4 KB
Makefile -rw-r--r-- 3.8 KB
aio.c -rw-r--r-- 45.3 KB
anon_inodes.c -rw-r--r-- 5.2 KB
attr.c -rw-r--r-- 4.7 KB
bad_inode.c -rw-r--r-- 8.1 KB
binfmt_aout.c -rw-r--r-- 15.0 KB
binfmt_elf.c -rw-r--r-- 53.9 KB
binfmt_elf_fdpic.c -rw-r--r-- 47.4 KB
binfmt_em86.c -rw-r--r-- 2.8 KB
binfmt_flat.c -rw-r--r-- 26.7 KB
binfmt_misc.c -rw-r--r-- 15.5 KB
binfmt_script.c -rw-r--r-- 2.7 KB
binfmt_som.c -rw-r--r-- 7.8 KB
bio.c -rw-r--r-- 28.2 KB
block_dev.c -rw-r--r-- 30.3 KB
buffer.c -rw-r--r-- 86.5 KB
char_dev.c -rw-r--r-- 13.2 KB
compat.c -rw-r--r-- 53.0 KB
compat_binfmt_elf.c -rw-r--r-- 3.4 KB
compat_ioctl.c -rw-r--r-- 84.3 KB
dcache.c -rw-r--r-- 55.2 KB
dcookies.c -rw-r--r-- 6.3 KB
direct-io.c -rw-r--r-- 34.2 KB
dnotify.c -rw-r--r-- 4.3 KB
dquot.c -rw-r--r-- 55.9 KB
drop_caches.c -rw-r--r-- 1.4 KB
eventfd.c -rw-r--r-- 5.1 KB
eventpoll.c -rw-r--r-- 36.6 KB
exec.c -rw-r--r-- 40.8 KB
fcntl.c -rw-r--r-- 14.3 KB
fifo.c -rw-r--r-- 3.1 KB
file.c -rw-r--r-- 6.3 KB
file_table.c -rw-r--r-- 8.5 KB
filesystems.c -rw-r--r-- 5.5 KB
fs-writeback.c -rw-r--r-- 22.3 KB
generic_acl.c -rw-r--r-- 4.2 KB
inode.c -rw-r--r-- 37.8 KB
inotify.c -rw-r--r-- 20.2 KB
inotify_user.c -rw-r--r-- 18.3 KB
internal.h -rw-r--r-- 934 bytes
ioctl.c -rw-r--r-- 4.5 KB
ioprio.c -rw-r--r-- 5.0 KB
libfs.c -rw-r--r-- 19.5 KB
locks.c -rw-r--r-- 57.0 KB
mbcache.c -rw-r--r-- 18.3 KB
mpage.c -rw-r--r-- 19.9 KB
namei.c -rw-r--r-- 69.4 KB
namespace.c -rw-r--r-- 48.6 KB
nfsctl.c -rw-r--r-- 2.4 KB
no-block.c -rw-r--r-- 663 bytes
open.c -rw-r--r-- 26.1 KB
pipe.c -rw-r--r-- 24.4 KB
pnode.c -rw-r--r-- 7.7 KB
pnode.h -rw-r--r-- 1.0 KB
posix_acl.c -rw-r--r-- 8.5 KB
quota.c -rw-r--r-- 12.2 KB
quota_v1.c -rw-r--r-- 5.7 KB
quota_v2.c -rw-r--r-- 20.1 KB
read_write.c -rw-r--r-- 17.6 KB
read_write.h -rw-r--r-- 542 bytes
readdir.c -rw-r--r-- 6.8 KB
select.c -rw-r--r-- 20.8 KB
seq_file.c -rw-r--r-- 10.8 KB
signalfd.c -rw-r--r-- 6.6 KB
splice.c -rw-r--r-- 39.8 KB
stack.c -rw-r--r-- 1.1 KB
stat.c -rw-r--r-- 10.6 KB
super.c -rw-r--r-- 22.1 KB
sync.c -rw-r--r-- 7.0 KB
timerfd.c -rw-r--r-- 6.7 KB
utimes.c -rw-r--r-- 5.1 KB
xattr.c -rw-r--r-- 14.4 KB
xattr_acl.c -rw-r--r-- 2.3 KB

back to top