How does the kernel update current process's time statistics? On a uniprocessor, the global timer interrupt handler calls update_process_times() to update current process time statistics. call chain: timer_interrupt() (arch/i386/kernel/time.c) do_timer_interrupt (arch/i386/timer.c) do_timer_interrupt_hook (include/asm-i386/mach-*/do_timer.h) #ifndef CONFIG_SMP update_process_times (kernel/timer.c) scheduler_tick (kernel/sched.c) On a multiprocessor, global timer interrupt is no longer used to update process time statistics. Instead, we use local APIC timer. smp_acpi_timer_interrupt (arch/i386/kernel/apic.c) smp_local_timer_interrupt (arch/i386/kernel/apic.c) #ifdef CONFIG_SMP update_process_times (kernel/timer.c) scheduler_tick (kernel/sched.c)