linux timer linux-kernel interrupt latency

linux - ¿Cómo puedo obtener kernel sin tick para trabajar? nohz_full, rcu_nocbs, isolcpus ¿qué más?



timer linux-kernel (1)

Ok, descubrí que necesito construir mi propio kernel para activar la configuración.

Acabo de instalar Ubuntu 13.10 con un kernel 3.11 nuevo. Y en 3.10, tiene la característica de tickless donde puedo ejecutar un proceso sin ser interrumpido por el temporizador local, no tanto como antes. Seguí este enlace http://www.breakage.org/2013/11/nohz_fullgodmode/

Planeé ejecutar mi aplicación en la CPU 3, así que configuré lo siguiente en mi grub:

isolcpus=3 nohz_full=3 rcu_nocbs=3

Después de reiniciar, parece que la interrupción del temporizador local en la CPU 3 es de hecho mucho menor que otras CPU.

Yo también corrí:

# for i in `pgrep rcu` ; do taskset -pc 0 $i ; done

Pero cuando empiezo a ejecutar mi aplicación, el recuento de la interrupción del temporizador local saltó. Mi aplicación no hace más que un ciclo infinito.

int main() { while (true) { } }

Entonces, ¿qué me estoy perdiendo? ¿Por qué la interrupción del tiempo vuelve cuando ejecuto algo? Pensé que nohz_full significa que cuando solo hay un proceso en ejecución, dejará de interrumpir.

Lo siguiente es el resultado de / proc / sched_debug cuando no estoy ejecutando la aplicación y aparentemente no hay otro proceso en esa CPU. Entonces, ¿qué me estoy perdiendo?

cpu#3, 2492.071 MHz .nr_running : 0 .load : 0 .nr_switches : 45818 .nr_load_updates : 11165 .nr_uninterruptible : -1 .next_balance : 4295.674289 .curr->pid : 0 .clock : 3127610.519188 .cpu_load[0] : 0 .cpu_load[1] : 0 .cpu_load[2] : 0 .cpu_load[3] : 0 .cpu_load[4] : 0 .yld_count : 0 .sched_count : 47377 .sched_goidle : 3956 .avg_idle : 1000000 .ttwu_count : 29329 .ttwu_local : 26078 cfs_rq[3]:/ .exec_clock : 15750.800052 .MIN_vruntime : 0.000001 .min_vruntime : 15699.782432 .max_vruntime : 0.000001 .spread : 0.000000 .spread0 : -247950.011716 .nr_spread_over : 0 .nr_running : 0 .load : 0 .runnable_load_avg : 0 .blocked_load_avg : 0 .tg_load_contrib : 0 .tg_runnable_contrib : 0 .tg_load_avg : 602 .tg->runnable_avg : 592 .avg->runnable_avg_sum : 0 .avg->runnable_avg_period : 47077 rt_rq[3]:/ .rt_nr_running : 0 .rt_throttled : 0 .rt_time : 0.000000 .rt_runtime : 950.000000 runnable tasks: task PID tree-key switches prio exec-runtime sum- exec sum-sleep ---------------------------------------------------------------------------------------- ------------------