Я погуглил и нашел, что большинство людей выступают за использование kmalloc
, поскольку вы гарантированно получите непрерывные физические блоки памяти. Однако также кажется, что он kmalloc
может потерпеть неудачу, если не удается найти непрерывный физический блок, который вам нужен.
Каковы преимущества непрерывного блока памяти? В частности, зачем мне иметь непрерывный физический блок памяти в системном вызове ? Есть ли причина, по которой я не могу просто использовать vmalloc
?
Наконец, если бы я должен был выделить память во время обработки системного вызова, должен ли я указать GFP_ATOMIC
? Системный вызов выполняется в атомарном контексте?
GFP_ATOMIC
Выделение имеет высокий приоритет и не спит. Этот флаг используется в обработчиках прерываний, нижних половинах и других ситуациях, когда вы не можете спать.
GFP_KERNEL
Это нормальное распределение, которое может блокировать. Это флаг, который следует использовать в коде контекста процесса, когда можно безопасно спать.
vmalloc
работает быстрее с Kernel 5.2 (второй квартал 2019 г.)