Pesquisei no Google e encontrei muitas pessoas defendendo o uso de kmalloc
, já que é garantido que você obterá blocos físicos contíguos de memória. No entanto, também parece que kmalloc
pode falhar se um bloco físico contíguo que você deseja não puder ser encontrado.
Quais são as vantagens de ter um bloco contíguo de memória? Especificamente, por que eu precisaria ter um bloco físico contíguo de memória em uma chamada de sistema ? Existe alguma razão que eu não poderia simplesmente usar vmalloc
?
Finalmente, se eu fosse alocar memória durante o tratamento de uma chamada de sistema, devo especificar GFP_ATOMIC
? Uma chamada de sistema é executada em um contexto atômico?
GFP_ATOMIC
A alocação é de alta prioridade e não é suspensa. Este é o sinalizador a ser usado em manipuladores de interrupção, metades inferiores e outras situações onde você não consegue dormir.
GFP_KERNEL
Esta é uma alocação normal e pode bloquear. Este é o sinalizador a ser usado no código de contexto do processo quando é seguro dormir.
vmalloc
é mais rápido com Kernel 5.2 (Q2 2019)