J'ai cherché sur Google et j'ai trouvé que la plupart des gens préconisaient l'utilisation de kmalloc
, car vous êtes assuré d'obtenir des blocs physiques contigus de mémoire. Cependant, il semble également que cela kmalloc
puisse échouer si un bloc physique contigu que vous souhaitez ne peut pas être trouvé.
Quels sont les avantages d'avoir un bloc de mémoire contigu? Plus précisément, pourquoi aurais-je besoin d'avoir un bloc de mémoire physique contigu dans un appel système ? Y a-t-il une raison pour laquelle je ne peux pas simplement utiliser vmalloc
?
Enfin, si je devais allouer de la mémoire lors du traitement d'un appel système, dois-je préciser GFP_ATOMIC
? Un appel système est-il exécuté dans un contexte atomique?
GFP_ATOMIC
L'allocation est hautement prioritaire et ne se met pas en veille. C'est le drapeau à utiliser dans les gestionnaires d'interruption, les moitiés inférieures et d'autres situations où vous ne pouvez pas dormir.
GFP_KERNEL
Il s'agit d'une allocation normale et pourrait bloquer. Il s'agit de l'indicateur à utiliser dans le code de contexte de processus lorsqu'il est prêt à dormir.
vmalloc
est plus rapide avec Kernel 5.2 (Q2 2019)