2011-08-12 28 views
6

Tôi đang chạy một số thử nghiệm với các ứng dụng chuyên sâu I/O và đang cố gắng hiểu tác động của việc thay đổi kích thước bộ đệm hạt nhân i/o, các thuật toán thang máy khác nhau, v.v.Làm thế nào để thay đổi kích thước bộ đệm hạt nhân i/o

Làm cách nào để biết kích thước hiện tại của bộ đệm i/o trong hạt nhân? Hạt nhân có sử dụng nhiều bộ đệm khi cần phát sinh không? Làm thế nào tôi có thể thay đổi kích thước của bộ đệm này? Có một tệp cấu hình nào đó lưu trữ thông tin này không?

(Để rõ ràng, tôi không nói về bộ xử lý hoặc bộ đệm đĩa, tôi đang nói về bộ đệm được sử dụng bởi hạt nhân nội bộ mà bộ đệm đọc/ghi trước khi xả chúng ra đĩa theo thời gian).

Xin cảm ơn trước.

Trả lời

9

Hạt nhân không đệm đọc và viết theo cách bạn nghĩ ... Nó duy trì "bộ nhớ cache trang" chứa các trang từ đĩa. Bạn không nhận được để thao tác kích thước của nó (tốt, không trực tiếp, dù sao); hạt nhân sẽ luôn sử dụng tất cả bộ nhớ trống miễn phí cho bộ nhớ cache của trang.

Bạn cần giải thích những gì bạn đang thực sự cố gắng thực hiện. Nếu bạn muốn kiểm soát số lượng dữ liệu mà hạt nhân nạp trước từ đĩa, hãy thử tìm kiếm "linux readahead". (Gợi ý: blockdev --setra XXX)

Nếu bạn muốn kiểm soát thời gian hạt nhân sẽ giữ các trang bẩn trước khi xả chúng vào đĩa, hãy thử tìm "linux dirty_ratio".

Một ứng dụng cụ thể cũng có thể bỏ qua bộ nhớ cache trang hoàn toàn bằng cách sử dụng O_DIRECT, và nó có thể thực hiện một số quyền kiểm soát nó bằng cách sử fsync, sync_file_range, posix_fadvise, và posix_madvise. (O_DIRECTsync_file_range là dành riêng cho Linux; còn lại là POSIX.)

Bạn sẽ có thể đặt câu hỏi hay hơn nếu bạn tự đào tạo về hệ thống con VM Linux, đặc biệt là bộ đệm trang.

3

Tôi nghĩ bạn có nghĩa là hàng đợi đĩa IO. Ví dụ:

$ cat /sys/block/sda/queue/nr_requests 
128 

Cách hàng đợi này được sử dụng tùy thuộc vào bộ lập lịch IO đang được sử dụng.

$ cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 

cfq là sự lựa chọn phổ biến nhất, mặc dù trên các hệ thống với bộ điều khiển đĩa tiên tiến và trong các hệ thống của khách ảo noop cũng là một lựa chọn rất tốt.

Không có tệp cấu hình nào cho thông tin này mà tôi biết. Trên các hệ thống mà tôi cần phải thay đổi các thiết lập hàng đợi trên tôi đặt các thay đổi vào /etc/rc.local mặc dù bạn có thể sử dụng tập lệnh init đầy đủ thay thế và đặt nó vào một RPM hoặc DEB để phân phối khối lượng cho nhiều hệ thống.

+0

Đó không phải chính xác những gì tôi đang tìm kiếm, nhưng điều đó cũng giúp ích. – jitihsk

Các vấn đề liên quan