Busqué en Google y encontré a la mayoría de las personas que abogan por el uso de kmalloc
, ya que está garantizado que obtendrá bloques de memoria físicos contiguos. Sin embargo, también parece que kmalloc
puede fallar si no se puede encontrar un bloque físico contiguo que desea.
¿Cuáles son las ventajas de tener un bloque de memoria contiguo? Específicamente, ¿por qué necesitaría tener un bloque físico de memoria contiguo en una llamada al sistema ? ¿Hay alguna razón por la que no pueda usar vmalloc
?
Finalmente, si tuviera que asignar memoria durante el manejo de una llamada al sistema, ¿debería especificar GFP_ATOMIC
? ¿Se ejecuta una llamada al sistema en un contexto atómico?
GFP_ATOMIC
La asignación es de alta prioridad y no duerme. Esta es la bandera para usar en los manejadores de interrupciones, mitades inferiores y otras situaciones en las que no puede dormir.
GFP_KERNEL
Esta es una asignación normal y podría bloquearse. Esta es la bandera que se debe usar en el código de contexto del proceso cuando es seguro dormir.
vmalloc
es más rápido con Kernel 5.2 (Q2 2019)