个人理解:
内存分配时有fallback order,当指定从某个zone中分配而此时该zone中又没有空闲内存时,内核会自动fallback到下一级的zone中分配,默认的order为:
The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
slab分配中不允许使用__GFP_DMA32|__GFP_HIGHMEM标记,只是代表不能显式的指定从DMA32和HIGHMEM中分配slab,但并不代表就不能使用DMA32了,大概看下,slab中多使用GFP_KERNEL和GFP_ATOMIC标记,这样的话,其实会按上述的fallback order来分配,即NORMAL=>DMA32=>DMA,当NORMAL中不能分配时,应该会从DMA32中分配。
@chishanmingshen 作者: chishanmingshen 时间: 2014-06-12 12:55 回复 5# humjb_1983
有道理,谢谢!
x86_64 normal zone 也是direct map?作者: humjb_1983 时间: 2014-06-12 13:51