2

Linux カーネルは、特定のしきい値よりも大きい場合にvmallocメモリを割り当てるために使用していることがわかります。fdtableこれがいつ発生するかを知り、より明確な情報を入手したいと思います。

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ですか?

4

1 に答える 1