Bộ nhớ còn lại của vm.overcommit_ratio đi đâu?


10

Nếu tôi vô hiệu hóa bộ nhớ thừa bằng cách cài đặt vm.overcommit_memorythành 2, theo mặc định, hệ thống sẽ cho phép phân bổ bộ nhớ theo kích thước trao đổi + 50% bộ nhớ vật lý, như được giải thích ở đây .

Tôi có thể thay đổi tỷ lệ bằng cách sửa đổi vm.overcommit_ratiotham số. Giả sử tôi đặt nó thành 80%, vì vậy 80% bộ nhớ vật lý có thể được sử dụng.

Câu hỏi của tôi là:

  • Hệ thống sẽ làm gì với 20% còn lại?
  • Tại sao thông số này được yêu cầu ở vị trí đầu tiên?
  • Tại sao tôi không nên luôn luôn đặt nó thành 100%?

Câu trả lời:


6

Hệ thống sẽ làm gì với 20% còn lại?

Nhân sẽ sử dụng bộ nhớ vật lý còn lại cho các mục đích riêng của nó (cấu trúc bên trong, bảng, bộ đệm, bộ đệm, bất cứ thứ gì). Cài đặt overcommitment bộ nhớ xử lý các đặt chỗ bộ nhớ ảo ứng dụng người dùng, kernel không sử dụng bộ nhớ ảo mà là bộ nhớ vật lý.

Tại sao thông số này được yêu cầu ở vị trí đầu tiên?

Các overcommit_ratiotham số là một sự lựa chọn thực hiện thiết kế để ngăn chặn các ứng dụng dự trữ bộ nhớ ảo nhiều hơn những gì hợp lý sẽ có sẵn cho họ trong tương lai, tức là khi họ thực sự truy cập vào bộ nhớ (hoặc ít nhất là cố gắng để).

Việc đặt overcommit_ratiothành 50% đã được các nhà phát triển nhân Linux coi là giá trị mặc định hợp lý. Nó giả định rằng kernel sẽ không bao giờ cần sử dụng hơn 50% RAM vật lý. Số dặm của bạn có thể thay đổi, lý do tại sao nó là một điều chỉnh.

Tại sao tôi không nên luôn luôn đặt nó thành 100%?

Đặt nó thành 100% (hoặc bất kỳ giá trị "quá cao" nào) sẽ không vô hiệu hóa quá mức đáng tin cậy vì bạn không thể cho rằng hạt nhân sẽ sử dụng 0% (hoặc quá ít) RAM.

Nó sẽ không ngăn các ứng dụng bị sập vì kernel có thể chiếm ưu thế dù sao tất cả bộ nhớ vật lý mà nó yêu cầu.


Nếu hạt nhân có thể chiếm hết bộ nhớ mà nó cần, dù sao thì việc phơi bày tham số này (hoặc thậm chí tạo ra nó) là gì?
Dan Tumaykin

Có tài liệu chính thức nào mà các thông số đó được giải thích chi tiết không? Bên cạnh kernel.org/doc/Documentation/vm/overcommit-accounting - mọi tham chiếu đến bộ nhớ kernel đều bị thiếu ở đó.
Dan Tumaykin

1
Tôi chưa tìm thấy tài liệu nào giải thích với đủ chi tiết những gì được tính chính xác khi đề cập đến "tổng cam kết không gian địa chỉ". Thực tế là tài liệu bạn cung cấp liên kết đến trạng thái "trong hầu hết các tình huống, điều này có nghĩa là một quy trình sẽ không bị giết ..." tuy nhiên đủ để xác nhận một số bộ nhớ có thể được sử dụng ở nơi khác và người tiêu dùng rõ ràng cho bộ nhớ này là hạt nhân.
jlliagre

2

Đặt tỷ lệ thành 100% sẽ không dành bất kỳ khoảng trống nào cho các trang được hỗ trợ tệp hoặc phân bổ trong kernel như mã kernel, bộ đệm mạng, v.v.

Các cấu trúc trong nhân sẽ được phân bổ bất kể, gây ra tình trạng thừa. Chúng thường bị giới hạn riêng lẻ (ví dụ: có cài đặt cho bộ đệm mạng). Tôi không nghĩ có giới hạn tổng thể là 50%, mặc dù giới hạn tổng thể là thứ được sử dụng cho mục đích lưu trữ container.

Các trang được hỗ trợ tệp là nơi bạn thường chạy mã không gian người dùng từ đó, vì vậy bạn cũng cần không gian cho điều đó.

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.