Nota sobre la diferencia entre los dos métodos de asignación - kmalloc y kmem_cache o vmalloc:
kmalloc: Mejor usado para las asignaciones rápidos que son más pequeños que una página (PAGE_SIZE, 0x1000 en la mayoría de las arquitecturas). No implica la asignación de memoria, por lo que obtiene la memoria directamente de la asignación de memoria física 1: 1 del kernel. Obtienes memoria física contingente. Tenga en cuenta que si desea asignar más de una página (es decir, orden> 0), corre el riesgo de toparse con problemas de fragmentación externos, es decir, la llamada podría fallar incluso si hay suficiente espacio libre. Orden más alto: mayores posibilidades de fallas de asignación, y el tiempo de actividad también es un factor aquí.
Si desea lograr la máxima eficiencia de asignación, usar su propio kmem_cache para cada tipo de estructura es el camino a seguir (los otros beneficios de esta estrategia son poder monitorear el estado de sus asignaciones desde/proc y capturar memoria gotea más fácilmente).
vmalloc: Asignaciones de más de una página. Se obtiene memoria mapeada en el kernel. Detrás de escena, es similar a lo que obtiene el espacio de usuario: el kernel asigna un grupo de páginas y las mapea en un espacio de direcciones virtuales. Esta asignación es más lenta que la de kmalloc, y los accesos a la memoria pueden incurrir en un poco más de sobrecarga.
en otras palabras, como todos sabemos #include no existe en kernel ¿qué incluir debería tener? –
yoavstr