linux/arch/x86_64/kernel
Arjan van de Ven e07e23e1fd [PATCH] non lazy "sleazy" fpu implementation
Right now the kernel on x86-64 has a 100% lazy fpu behavior: after *every*
context switch a trap is taken for the first FPU use to restore the FPU
context lazily.  This is of course great for applications that have very
sporadic or no FPU use (since then you avoid doing the expensive
save/restore all the time).  However for very frequent FPU users...  you
take an extra trap every context switch.

The patch below adds a simple heuristic to this code: After 5 consecutive
context switches of FPU use, the lazy behavior is disabled and the context
gets restored every context switch.  If the app indeed uses the FPU, the
trap is avoided.  (the chance of the 6th time slice using FPU after the
previous 5 having done so are quite high obviously).

After 256 switches, this is reset and lazy behavior is returned (until
there are 5 consecutive ones again).  The reason for this is to give apps
that do longer bursts of FPU use still the lazy behavior back after some
time.

[akpm@osdl.org: place new task_struct field next to jit_keyring to save space]
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
2006-09-26 10:52:36 +02:00
..
acpi Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cpufreq Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
aperture.c [PATCH] A few trivial spelling and grammar fixes 2006-09-26 10:52:28 +02:00
apic.c [PATCH] Don't access the APIC in safe_smp_processor_id when it is not mapped yet 2006-09-26 10:52:34 +02:00
asm-offsets.c [CRYPTO] all: Pass tfm instead of ctx to algorithms 2006-06-26 17:34:39 +10:00
audit.c [PATCH] audit: AUDIT_PERM support 2006-09-11 13:32:30 -04:00
crash.c [PATCH] Remove all ifdefs for local/io apic 2006-09-26 10:52:29 +02:00
crash_dump.c [PATCH] kdump: read previous kernel's memory 2006-01-10 08:01:28 -08:00
e820.c [PATCH] Move e820 map into e820.c 2006-09-26 10:52:33 +02:00
early-quirks.c [PATCH] Move early chipset quirks out to new file 2006-09-26 10:52:30 +02:00
early_printk.c [PATCH] Convert x86-64 to early param 2006-09-26 10:52:32 +02:00
entry.S [PATCH] x86: error_code is not safe for kprobes 2006-09-26 10:52:34 +02:00
functionlist [NET]: make skb_release_data() static 2006-06-29 16:58:30 -07:00
genapic.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
genapic_cluster.c [PATCH] remove int_delivery_dest 2006-09-26 10:52:31 +02:00
genapic_flat.c [PATCH] Replace local_save_flags+local_irq_disable with 2006-09-26 10:52:33 +02:00
head.S [PATCH] Remove obsolete CVS $Id$ from assembler files in arch/x86_64/kernel/* 2006-09-26 10:52:31 +02:00
head64.c [PATCH] Remove need for early lockdep init 2006-09-26 10:52:32 +02:00
i387.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
i8259.c [PATCH] Remove all ifdefs for local/io apic 2006-09-26 10:52:29 +02:00
init_task.c [PATCH] x86_64: Save original IST values for checking stack addresses 2006-08-30 16:05:16 -07:00
io_apic.c [PATCH] Convert x86-64 to early param 2006-09-26 10:52:32 +02:00
ioport.c [PATCH] x86-64 TIF flags for debug regs and io bitmap in ctxsw 2006-09-26 10:52:28 +02:00
irq.c [PATCH] Remove apic mismatch counter 2006-09-26 10:52:29 +02:00
k8.c [PATCH] x86_64: Clean and enhance up K8 northbridge access code 2006-06-26 10:48:15 -07:00
kprobes.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ldt.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
machine_kexec.c [PATCH] Convert x86-64 to early param 2006-09-26 10:52:32 +02:00
Makefile [PATCH] Move early chipset quirks out to new file 2006-09-26 10:52:30 +02:00
mce.c [PATCH] cpu hotplug: use hotplug version of registration in late inits 2006-07-31 13:28:39 -07:00
mce_amd.c [PATCH] cpu hotplug: use hotplug version of registration in late inits 2006-07-31 13:28:39 -07:00
mce_intel.c [PATCH] x86_64: Some housekeeping in local APIC code 2006-01-11 19:05:03 -08:00
module.c [PATCH] x86_64: x86_64 version of the smp alternative patch. 2006-06-26 10:48:14 -07:00
mpparse.c [PATCH] Fix up some non linuxy style in ACPI functions in mpparse.c 2006-09-26 10:52:30 +02:00
nmi.c [PATCH] x86: i386/x86-64 Add nmi watchdog support for new Intel CPUs 2006-09-26 10:52:27 +02:00
pci-calgary.c [PATCH] Calgary IOMMU: eradicate sole remaining 80 chars per line offender 2006-09-26 10:52:33 +02:00
pci-dma.c [PATCH] Convert x86-64 to early param 2006-09-26 10:52:32 +02:00
pci-gart.c [PATCH] remove superflous BUG_ON's in nommu and gart 2006-09-26 10:52:32 +02:00
pci-nommu.c [PATCH] remove superflous BUG_ON's in nommu and gart 2006-09-26 10:52:32 +02:00
pci-swiotlb.c [PATCH] x86_64: Fix swiotlb=force 2006-07-29 20:59:55 -07:00
pmtimer.c [PATCH] make pmtmr_ioport __read_mostly 2006-06-26 09:58:21 -07:00
process.c [PATCH] non lazy "sleazy" fpu implementation 2006-09-26 10:52:36 +02:00
ptrace.c [PATCH] i386/x86-64: rename is_at_popf(), add iret to tests and fix 2006-09-26 10:52:33 +02:00
reboot.c [PATCH] x86_64: Move export symbols to their C functions 2006-06-26 10:48:22 -07:00
relocate_kernel.S [PATCH] kexec: x86_64 kexec implementation 2005-06-25 16:24:50 -07:00
setup.c [PATCH] Move e820 map into e820.c 2006-09-26 10:52:33 +02:00
setup64.c [PATCH] Auto size the per cpu area. 2006-09-26 10:52:35 +02:00
signal.c [PATCH] Add TIF_RESTORE_SIGMASK 2006-09-26 10:52:26 +02:00
smp.c [PATCH] Don't access the APIC in safe_smp_processor_id when it is not mapped yet 2006-09-26 10:52:34 +02:00
smpboot.c [PATCH] Convert x86-64 to early param 2006-09-26 10:52:32 +02:00
stacktrace.c [PATCH] Merge stacktrace and show_trace 2006-09-26 10:52:34 +02:00
suspend.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
suspend_asm.S [PATCH] x86_64: Set up safe page tables during resume 2005-10-10 08:36:46 -07:00
sys_x86_64.c [PATCH] x86_64: Use common sys_time64 2005-11-14 19:55:17 -08:00
syscall.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tce.c [PATCH] Calgary IOMMU: consolidate per bus data structures 2006-09-26 10:52:31 +02:00
time.c [PATCH] X86_64 monotonic_clock goes backwards 2006-09-26 10:52:34 +02:00
trampoline.S [PATCH] Fix gdt table size in trampoline.S 2006-09-26 10:52:32 +02:00
traps.c [PATCH] non lazy "sleazy" fpu implementation 2006-09-26 10:52:36 +02:00
vmlinux.lds.S [PATCH] Add the vgetcpu vsyscall 2006-09-26 10:52:28 +02:00
vsmp.c [PATCH] x86_64: Inclusion of ScaleMP vSMP architecture patches - vsmp_arch 2006-01-11 19:05:01 -08:00
vsyscall.c [PATCH] Add sparse annotation to vsyscall.c 2006-09-26 10:52:33 +02:00
x8664_ksyms.c [PATCH] x86_64: Move export symbols to their C functions 2006-06-26 10:48:22 -07:00