當我看到Linux內核使用vmalloc
爲fdtable
分配內存時,它大於某個閾值。我想知道這是什麼時候發生的,並且有更清楚的信息。Linux文件描述符表和vmalloc
static void *alloc_fdmem(size_t size)
{
/*
* Very large allocations can stress page reclaim, so fall back to
* vmalloc() if the allocation size will be considered "large" by the VM.
*/
if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {
void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN);
if (data != NULL)
return data;
}
return vmalloc(size);
}
alloc_fdmem
從alloc_fdtable
稱爲最後的功能是從expand_fdtable
叫我寫了這個代碼打印的尺寸。
#include <stdio.h>
#define PAGE_ALLOC_COSTLY_ORDER 3
#define PAGE_SIZE 4096
int main(){
printf("\t%d\n", PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER);
}
輸出
./printo
32768
那麼,有多少個文件後纔會內核切換到使用vmalloc
分配fdtable
?
你從哪裏看到這個? – wallyk
linux-3.11.1/fs/file.c – c4f4t0r