Hoạt động ghi nặng trên hiệu năng hệ thống SSD nukes


13

Tôi nhận thấy rằng khi tôi làm các ứng dụng viết nặng, toàn bộ hệ thống chậm lại. Để kiểm tra điều này hơn nữa, tôi đã chạy nó để thực hiện một hoạt động (tương đối) CPU thấp, cao:

john -incremental > file_on_SSD

Điều này bơm ra hàng chục ngàn chuỗi mỗi giây vào một tệp trên đĩa hệ thống của tôi.

Khi thực hiện việc này, chuột bị chậm, TTYs không phản hồi, các ứng dụng "mờ dần" và nói chung toàn bộ máy tính trở nên không sử dụng được. Khi cuối cùng tôi có thể Control + C john, hệ thống sẽ hoạt động trở lại đầy đủ sau vài giây.

Đây là một ví dụ cực đoan nhưng tôi gặp vấn đề tương tự với các hoạt động ít viết hơn như sao chép các tệp lớn từ các nguồn nhanh hoặc chuyển mã.

Đĩa hệ điều hành chính của tôi là ổ SSD khá nhanh ( OCZ Agility 60GB ) với EXT4. Nếu tôi ghi johnđầu ra vào đĩa cơ bằng EXT4, tôi sẽ không gặp phải tình trạng chậm như vậy mặc dù tốc độ chậm hơn rất nhiều (SSD thực hiện ~ 42.000 từ mỗi giây, cơ học đạt 8.000 w / s). Thông lượng có thể có liên quan. Đĩa cơ cũng không có gì để làm với hệ thống. Đó chỉ là dữ liệu.

Và tôi đang sử dụng kernel 2.6.35-2 nhưng tôi đã nhận thấy vấn đề này kể từ khi tôi có ổ SSD này khi tôi có thể đang sử dụng .31 hoặc một cái gì đó từ khoảng thời gian đó.

Vậy điều gì gây ra sự chậm lại? Vấn đề EXT4? Vấn đề hạt nhân? Vấn đề về SSD? Tất cả những điều trên? Thứ gì khác?

Nếu bạn nghĩ rằng tôi cần chạy thử nghiệm bổ sung, chỉ cần gửi bình luận cho tôi biết phải làm gì và tôi sẽ thêm kết quả vào câu hỏi.


Có lẽ bạn cũng nên đề cập đến những gì SSD bạn đang sử dụng. Không phải tất cả các ổ SSD đều như nhau.
Cristian Ciupitu

@Cristian: Đã thêm. Đó là một AgZ nhanh nhẹn.
Oli

Câu trả lời:


12

Đây là một vấn đề được biết đến trong một thời gian. Sử dụng một FS điều chỉnh SSD như Btrfs có thể giúp ích, nhưng có thể không.

Cuối cùng, đó là một lỗi trong hệ thống quản lý bộ nhớ / bộ lập lịch IO. Gần đây, đã có một số bản vá nhằm giải quyết vấn đề này. Xem Đã sửa : Vấn đề phản hồi của máy tính để bàn Linux?

Các bản vá này cuối cùng có thể đi vào kernel chính, nhưng bây giờ, bạn có thể sẽ phải biên dịch kernel của riêng bạn nếu bạn muốn khắc phục vấn đề này.


2
Nếu tôi hiểu chính xác, các bản vá cho điều này sẽ đi vào linux 2.6.37 .
JanC

1

Có một vài điều bạn có thể kiểm tra để cố gắng cải thiện hiệu suất SSD trong Linux.

  1. Đặt điểm gắn kết thành 'noatime'. Hoạt động bổ sung cập nhật thời gian truy cập thường bị lãng phí trong hầu hết các trường hợp sử dụng. Đặc biệt trong trường hợp liên tục bơm các dòng đơn vào một tệp, bạn đang buộc nhiều bản cập nhật cho hệ thống tệp cho mỗi lần truy cập.

  2. Kiểm tra thang máy. Thang máy mặc định cho hầu hết các bản phân phối được thiết lập cho các đĩa quay truy cập ngẫu nhiên. SSD không cần logic bổ sung, vì vậy, đặt thang máy lên noop có thể cải thiện hiệu suất bằng cách để phần cứng quản lý ghi.

  3. Ghi lại thông qua bộ nhớ đệm ghi lại. Đây là một chút bí truyền hơn, nhưng bạn có thể kiểm tra phương thức lưu trữ được sử dụng hdparmcho thiết bị. Bộ nhớ đệm ghi lại có thể có tác động tích cực đến hiệu suất SSD so với ghi qua.


Bạn có thể @nzwulfin viết thêm một chút về việc đặt thang máy không?
Grzegorz Wierzowiecki

Có vẻ như hiệu suất SSD là tốt. Đó là tất cả phần còn lại mà chịu đựng.
Thorbjørn Ravn Andersen

0

Bộ nhớ đệm tệp của bạn có thể được điều chỉnh không chính xác cho khối lượng công việc của bạn. Thật không may, nhân Linux đủ ngu ngốc để không tự động xử lý việc này và mặc định là khá tệ nếu bạn có nhiều RAM và các thiết bị chặn đủ chậm. Xem https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dundred_ratio/ để biết chi tiết.

Tôi muốn đề nghị cố gắng thay đổi /etc/sysctl.confmột trong hai

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

để giảm mạnh áp lực RAM gây ra bằng cách ghi bộ nhớ đệm để cho phép kernel xử lý tốt hơn các tác vụ khác. Điều này sẽ giao dịch độ trễ được cải thiện cho thông lượng thấp hơn.

Một khả năng khác là tăng bộ nhớ đệm nhưng nếu quá trình của bạn liên tục ghi dữ liệu mới mọi lúc bạn sẽ gặp độ trễ rất tệ nếu bộ đệm đã đầy. Nếu bạn muốn thử nó, bạn có thể làm một cái gì đó như

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

Lưu ý rằng *_ratiocài đặt đề cập đến tỷ lệ phần trăm của RAM có sẵn. Nếu bạn muốn kiểm soát tốt hơn, hãy sử dụng *_bytescác cài đặt. Cá nhân tôi sử dụng cấu hình sau cho máy trạm của mình:

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

Điều đó giới hạn bộ đệm ghi nền ở mức 50 MB và buộc ghi đồng bộ nếu 200 MB có trong bộ đệm.

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.