Przeszukałem go i zauważyłem, że większość ludzi opowiada się za używaniem kmalloc
, ponieważ masz gwarancję, że otrzymasz ciągłe fizyczne bloki pamięci. Jednak wydaje się również, że kmalloc
może się nie powieść, jeśli nie można znaleźć ciągłego fizycznego bloku, którego chcesz.
Jakie są zalety posiadania ciągłego bloku pamięci? W szczególności, dlaczego miałbym mieć ciągły fizyczny blok pamięci w wywołaniu systemowym ? Czy jest jakiś powód, dla którego nie mogłem po prostu użyć vmalloc
?
Wreszcie, jeśli miałbym przydzielić pamięć podczas obsługi wywołania systemowego, czy powinienem określić GFP_ATOMIC
? Czy wywołanie systemowe jest wykonywane w kontekście atomowym?
GFP_ATOMIC
Alokacja ma wysoki priorytet i nie zasypia. Jest to flaga używana w obsłudze przerwań, dolnych połówkach i innych sytuacjach, w których nie możesz spać.
GFP_KERNEL
Jest to normalna alokacja i może blokować. To jest flaga używana w kodzie kontekstu procesu, gdy można bezpiecznie spać.
vmalloc
jest szybsze z Kernel 5.2 (Q2 2019)