unload que modules linux-kernel kernel kernel-module

linux-kernel - que - kernel modules in linux



Diferencia b/w kthread y colas de trabajo (2)

Estoy poco confundido workqueues b / w y kthread cuando se crean de la siguiente manera-

Crea kthread para cada CPU en línea y únete a 1 CPU única

for_each_online_cpu(cpu) { kthread = kthread_create(func, ...); kthread_bind(kthread, cpu); } //Each kthread will process work in serialized manner

Cree una secuencia de trabajo OBLIGATORIA para cada CPU en línea con @max_active como 1

for_each_online_cpu() { wq = alloc_workqueue(name, WQ_MEM_RECLAIM, 1) } // queue_work_on(cpu, work) will ensure the works queued on a particular CPU are processed in a serialized manner.

Por favor, avíseme si mi comprensión es correcta y cuáles son las ventajas de kthread sobre las pistas de trabajo y viceversa.

Gracias por adelantado.


"Trabajo" es una acción que debe completarse en un tiempo razonable. Aunque puede dormir, no debería hacerlo durante mucho tiempo, porque los elementos de trabajo múltiples comparten el mismo hilo de trabajo.

Un hilo es tuyo para ejecutar durante el tiempo que quieras. No tiene que regresar a alguna persona que llama para hacer otro trabajo, por lo que puede ponerlo en un bucle (y eso generalmente se hace). El ciclo puede contener pausas arbitrarias.

Las colas de trabajo se utilizan en situaciones en las que la persona que llama no puede realizar la acción deseada, por ejemplo porque es una rutina de servicio de interrupción y el trabajo es demasiado largo para una interrupción o no es adecuado para una interrupción (porque requiere un proceso contexto).


Lo primero es que Workqueue es también un kthread. Ahora, si solo está utilizando la cola predeterminada, declarará la función de trabajo y schedule_work() , que a su vez agregará su función de trabajo a la cola de trabajo predeterminada para ese procesador. Esta workqueue predeterminada no es más que un kthread que se creó en el tiempo de arranque.

Ahora, acerca de la ventaja y la desventaja, workqueue se usa en un escenario muy específico: cuando desea retrasar su trabajo por algún tiempo posterior. Como @Kaz mencionó, una de las situaciones podría ser cuando estás en el controlador de interrupciones y quiere salir lo más pronto posible. Entonces, con la cola de trabajo puede programar su trabajo por un tiempo posterior, mientras que kthread normal no puede retrasarse.