gpt4 book ai didi

Linux 文件描述符表和 vmalloc

转载 作者:太空狗 更新时间:2023-10-29 12:18:03 28 4
gpt4 key购买 nike

我看到 Linux 内核使用 vmallocfdtable 分配内存,当它大于某个阈值时。我想知道这种情况何时发生,并有一些更明确的信息。

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_fdmemalloc_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需要多少文件?

最佳答案

所以 PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER 是 32768

这叫做:

  data = alloc_fdmem(nr * sizeof(struct file *));

即它用于存储结构文件指针。

如果你的指针是 4 字节,它发生在你有 32768/4 = 8192 个打开文件时,如果你的指针是 8 字节,它发生在 4096 个打开文件时。

关于Linux 文件描述符表和 vmalloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690493/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com