Tôi đã tìm kiếm xung quanh và nhận thấy hầu hết mọi người ủng hộ việc sử dụng kmalloc
, vì bạn được đảm bảo nhận được các khối bộ nhớ vật lý liền kề. Tuy nhiên, nó cũng có vẻ như kmalloc
có thể thất bại nếu không tìm thấy khối vật lý liền kề mà bạn muốn.
Lợi thế của việc có một khối bộ nhớ liền kề là gì? Cụ thể, tại sao tôi cần có một khối bộ nhớ vật lý liền kề trong một lệnh gọi hệ thống ? Có lý do gì tôi không thể sử dụng vmalloc
?
Cuối cùng, nếu tôi cấp phát bộ nhớ trong quá trình xử lý lệnh gọi hệ thống, tôi có nên chỉ định GFP_ATOMIC
không? Một lệnh gọi hệ thống có được thực thi trong ngữ cảnh nguyên tử không?
GFP_ATOMIC
Việc phân bổ là ưu tiên cao và không ngủ. Đây là lá cờ để sử dụng trong trình xử lý ngắt, nửa dưới và các tình huống khác mà bạn không thể ngủ.
GFP_KERNEL
Đây là một phân bổ bình thường và có thể bị chặn. Đây là cờ để sử dụng trong mã ngữ cảnh quy trình khi nó an toàn ở chế độ ngủ.
vmalloc
nhanh hơn với Kernel 5.2 (Quý 2 năm 2019)