Cách tạo các tệp trong TMPFS có nhiều khả năng trao đổi


7

Tôi đang sử dụng tmpfs cho /tmpthư mục của tôi . Làm cách nào tôi có thể khiến máy tính quyết định trao đổi các tệp bên trong /tmptrước khi hoán đổi bất cứ thứ gì đang được các ứng dụng sử dụng?

Về cơ bản, các tệp bên trong /tmpphải có độ trao đổi cao hơn so với bộ nhớ được sử dụng bởi các tiến trình.

Có vẻ như câu trả lời này https://unix.stackexchange.com/a/90337/56970 có rất nhiều ý nghĩa, nhưng bạn không thể thay đổi swappiness cho một thư mục. Tôi biết về các nhóm mặc dù, nhưng tôi không thấy bất kỳ cách nào để biến tmp thành một nhóm?


kể từ kernel 3.5 -vm.swappiness=0
mikeerv

Tôi đã nhận được câu trả lời từ đây: unix.stackexchange.com/a/90337/56970 vm.swappiness có ý nghĩa, nhưng dường như bạn không thể giới hạn nó trong một thư mục.
CMCDragonkai

@mikeerv Nhưng tôi vẫn muốn các ứng dụng có thể trao đổi.
CMCDragonkai

Bản vá này thay đổi hành vi với swappiness == 0. Nếu chúng ta đặt swappiness == 0, hạt nhân sẽ không trao đổi hoàn toàn (để lấy lại toàn cầu cho đến khi số lượng trang miễn phí và trang bị trả lại trong một khu vực đã bị giảm xuống một cái gì đó rất nhỏ (nr_free + nr_filounceed <high ​​watermark)).
mikeerv

Câu hỏi của bạn có rất ít liên quan đến thư mục /tmpnhưng còn nhiều điều phải làm với cái nào được hoán đổi trước - bộ nhớ quá trình hay pagecache? Bởi vì tmpfsđược gắn bộ đệm trang. nhìn vào bình luận này ở trang được liên kết ở trên
mikeerv

Câu trả lời:


6

Nếu mọi việc suôn sẻ, hạt nhân của bạn sẽ tự quyết định "làm điều đúng". Nó sử dụng rất nhiều phương pháp phỏng đoán lạ mắt để quyết định nên đổi cái gì và giữ cái gì khi có áp lực bộ nhớ. Những heuristic đó đã được xây dựng cẩn thận bởi những người thực sự thông minh có nhiều kinh nghiệm trong quản lý bộ nhớ và đã đủ tốt để họ khá khó để cải thiện.

Nhân sử dụng kết hợp những thứ như thế này để quyết định những gì cần trao đổi:

  • Làm thế nào gần đây bộ nhớ đã được sử dụng.
  • Liệu bộ nhớ đã được sửa đổi kể từ khi nó được ánh xạ. Vì vậy, ví dụ thư viện dùng chung sẽ bị đẩy ra trước bộ nhớ heap vì bộ nhớ heap bị bẩn và cần phải ghi để trao đổi, trong khi đó thư viện được ánh xạ chia sẻ có thể được tải lại từ tệp gốc trên đĩa trong trường hợp cần lại , vì vậy không cần phải viết những trang đó để trao đổi. Ở đây bạn nên nhận ra rằng tmpfsbộ nhớ luôn bẩn (trừ khi đó là một trang mới chứa đầy số không) bởi vì nó không được hỗ trợ bởi bất cứ điều gì.
  • Gợi ý từ mprotect().
  • Có khả năng nhiều hơn nữa.

Câu trả lời ngắn: không, bạn không thể ghi đè trực tiếp các quyết định của kernel về cách quản lý bộ nhớ.


Đoán tôi sẽ phải viết lên một thử nghiệm để xem tmpfs bị tráo đổi như thế nào.
CMCDragonkai

2

cgroup là để kiểm soát các ứng dụng, không phải hệ thống tập tin. Những gì bạn muốn sẽ là một tùy chọn sysctl hoặc mount vì nó cho toàn bộ hệ thống tập tin. Thật không may, có vẻ như một trong hai tính năng này đã được tạo cho vấn đề này. Đó có lẽ là do vấn đề độc đáo như thế này.

Để giải quyết vấn đề này, bạn có thể thử viết một cronjob như:

*/5 * * * * find /tmp -type f -exec cat {} \; >/dev/null 2>&1

Điều này sẽ buộc kernel đọc tất cả các tập tin, điều này buộc các trang bị hoán đổi trở lại vào bộ nhớ.

Điều đó nói rằng, các tệp thường được truy cập bởi ứng dụng khối lượng công việc của bạn về cơ bản sẽ giống như chúng ta đang làm trong cronjob (và chỉ cho các tệp cụ thể mà nó thực sự được sử dụng thay vì toàn bộ mount). Tôi không thể thấy nhiều lợi thế để làm điều này.

Mục tiêu thực sự ở đây là gì?

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.