Linux từ lâu đã gặp sự cố với các chương trình khiến tất cả bộ nhớ cache "bẩn" của hệ thống bị lỗi. Những gì đang xảy ra là quá trình sao chép được điền vào bộ nhớ cache ghi với các dữ liệu tập tin nó được sao chép và nó đang làm nó rất nhanh chóng. Vì vậy, khi Firefox đi kèm và cần phải viết nó trước tiên phải chờ đợi cho không gian đệm bẩn hoặc một hàng đợi đĩa có sẵn viết khe. Trong khi chờ đợi nó đang cạnh tranh với quá trình sao chép và chuỗi pdflush của hạt nhân, mà di chuyển dữ liệu từ bộ đệm bẩn vào hàng đợi ghi đĩa.
Firefox vẫn còn một vấn đề khác trong trường hợp này. Nó sử dụng SQLite để lưu trữ dấu trang, lịch sử của nó và những thứ khác. SQLite là một cơ sở dữ liệu tuân thủ ACID và nó sử dụng một hệ thống giao dịch với đĩa ghi được chuyển sang đĩa. Vì vậy, không chỉ phải chờ đợi vùng đệm, nó phải đợi cho hàng đợi đĩa, có đầy đủ các tệp được sao chép, để xóa trước khi nó có thể thừa nhận một ghi thành công.
Đã có lô tinh chỉnh được thực hiện cho hệ thống xếp hàng và đệm đĩa Linux. Có những thay đổi trong hầu hết các bản phát hành hạt nhân. Hãy thử một trong các bản phát hành mới hơn. Bạn cũng có thể thử tinh chỉnh các giá trị sysctl. Tôi loại như thế này:
vm.dirty_writeback_centisecs = 100
vm.dirty_expire_centisecs = 9000
vm.dirty_background_ratio = 4
vm.dirty_ratio = 80
Bạn cũng có thể thử tinh chỉnh số lượng vị trí trong hàng đợi đĩa. Giá trị này là /sys/block/sda/queue/nr_requests
. Bạn cần thay thế sda
bằng bất kỳ ổ đĩa nào của bạn thực sự là. Nhiều khe hơn có nghĩa là nhiều cơ hội hơn để hợp nhất các yêu cầu IO và bộ lập lịch CFQ IO có thể thực hiện một công việc tốt hơn với các ưu tiên. Ít khe hơn thường có nghĩa là chờ đợi ngắn hơn để được ghi vào đĩa cho IO đồng bộ như giao dịch của SQLite. Ít khe hơn cũng có nghĩa là chờ đợi ngắn hơn để có được đọc IO vào hàng đợi đĩa nếu một quá trình ghi nặng hoàn toàn nhồi hàng đợi bằng cách ghi IO.
Nguồn
2008-12-25 00:38:55
Tôi sẽ thử điều đó. Nhưng đó không phải chính xác những gì tôi muốn. Tôi muốn tất cả các hoạt động đĩa nền tự động ion hóa chính nó hoặc bất cứ điều gì. Tôi muốn hệ thống đủ thông minh để nói "này, có một con người đang cố gắng làm việc đó. Đừng có chọc giận nữa." – user126593
Tôi không chắc liệu có bất kỳ cách nào để định cấu hình lớp ưu tiên ở cấp độ toàn cầu hay không. Tuy nhiên bạn có thể cấu hình bộ lập lịch IO được sử dụng cho mỗi thiết bị khối (echo termline>/sys/block//queue/scheduler). Đọc http://donami.com/118 để biết thêm chi tiết. –
codelogic
Không có cách nào để hệ thống tự động biết. Bạn đã gõ lệnh cp, cho tất cả những gì hệ thống biết bạn đang lo lắng chờ đợi nó kết thúc. –