Giá trị mặc định của / Proc / sys / fs / file-max


9

Tôi biết rằng / Proc / sys / fs / file-max xác định số lượng mô tả tệp mở tối đa và có thể được đặt trong thời gian chạy hoặc trong khi khởi động.

Tuy nhiên: giá trị mặc định của nó là gì? Kiểm tra 10 máy chủ trong công ty của tôi cho tôi 7 giá trị khác nhau, tất cả đều có vẻ ngẫu nhiên.

Tài liệu kernel chỉ tiếp tục đề cập rằng giá trị có thể được thay đổi - nhưng không phải cách tính giá trị mặc định.

Có ai trong số các bạn biết làm thế nào giá trị mặc định được xác định?

Câu trả lời:


13

Các file-maxgiới hạn mà bạn nhìn thấy dưới proc fslà một giá trị trong struct trong "./include/linux/fs.h"các cấu trúc là:

/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
  unsigned long nr_files;   /* read only */
  unsigned long nr_free_files;  /* read only */
  unsigned long max_files;    /* tunable THIS IS OUR VALUE */
};

Bây giờ trong ./fs/file_table.ccác files_stat_structlà bắt đầu sử dụng:

struct files_stat_struct files_stat = {
  .max_files = NR_FILE /* This constant is 8192 */
};

Bây giờ trong tập tin trước "./fs/file_table.c"sẽ có chức năng thực hiện công việc thực sự

void __init files_init(unsigned long mempages)
{
  unsigned long n;

  filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
      SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);

  /*
   * One file with associated inode and dcache is very roughly 1K.
   * Per default don't use more than 10% of our memory for files. 
   */

  n = (mempages * (PAGE_SIZE / 1024)) / 10;
  files_stat.max_files = max_t(unsigned long, n, NR_FILE);
  files_defer_init();
  lg_lock_init(files_lglock);
  percpu_counter_init(&nr_files, 0);
}

Từ những gì tôi có thể thấy trong files_initvà tìm kiếm macro max_t, Nếu 10% bộ nhớ cho các tệp nhiều hơn 8192, các giá trị đó sẽ được sử dụng, Trừ khi 8192.

files_init được sử dụng khi kernel được bắt đầu thực thi và bạn cần xem cờ SLAB_PANIC khi kmem_cache_createđược gọi để tạo bộ đệm bộ đệm chung.

Bây giờ bạn cần nhìn ./kernel/sysctl.c

  {
    .procname = "file-max",
    .data   = &files_stat.max_files,
    .maxlen   = sizeof(files_stat.max_files),
    .mode   = 0644,
    .proc_handler = proc_doulongvec_minmax,
  },

Tối đa tệp là 10% bộ nhớ, Nếu hệ thống của bạn có kích thước bộ nhớ khác, tôi nghĩ đó là bình thường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.