Blockdev setra liên tục đọc trước cài đặt


14

Tôi đã có một số ổ SSD được gắn trên /dev/sda1/dev/sdb1trên máy chủ SLES 11 SP2 và tôi có thể điều chỉnh cài đặt đọc trước bằng blockdev --setra:

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

Làm cách nào để duy trì cài đặt này khi khởi động? Cụ thể, có một cài đặt tương ứng sysctl.conf, hoặc tôi sẽ phải giải quyết một tập lệnh RC để thực hiện điều này?


2
Tôi không biết liệu có giải pháp 'phù hợp' cho vấn đề này hay không, nhưng các quy tắc udev chắc chắn sẽ phù hợp hơn so với tập lệnh RC.
Patrick

3
Tại sao bạn muốn tăng tốc độ đọc trước trên SSD BTW? Tôi không thể thấy được điểm mà SSD có thời gian tìm kiếm nhỏ.
Stéphane Chazelas

Câu trả lời:


16

Tôi sẽ đề nghị bạn sử dụng udev để đặt tham số cho các ổ SSD. Bằng cách này, bạn có thể định cấu hình bộ lập lịch hàng đợi cụ thể phù hợp hơn với SSD, v.v. Bạn cũng chỉ có thể áp dụng các tham số cho một số thiết bị, dựa trên nhiều thông số.

Bạn có thể có được các thuộc tính cụ thể cần thiết để khớp với các thiết bị của mình (ví dụ: kiểu đĩa và nhà sản xuất) bằng cách thực hiện:

udevadm info -a -p /sys/block/sda

và kiểm tra tất cả các cặp ATTR cho thiết bị khối của bạn.

Một lợi ích khác là khả năng thiết lập các tham số cho các đĩa có thể cắm được (ví dụ: trong các thùng chứa hoặc khay hotswap) và cài đặt sẽ được áp dụng cho tất cả các thiết bị mới, miễn là các thông số của thiết bị khớp với nhau.

Dưới đây là một ví dụ để áp dụng bộ lập lịch cụ thể cho SSD Intel, giá trị đọc mong muốn của bạn (4096 khối = 2048 kb) và cũng áp dụng bộ lập lịch khác cho tất cả các SSD khác:

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

Sau khi lưu tệp, bạn có thể kiểm tra xem quy tắc của mình có khớp với thiết bị hay không và udev sẽ làm gì khi sử dụng udevadm:

udevadm test --action=add /sys/block/sda

Điều này in tất cả các quy tắc mà udev tải, những gì phù hợp, những gì không và những quyết định nào udev sẽ đưa ra khi thiết bị được cắm.

Hi vọng điêu nay co ich.


Thông tin tốt. Tôi sẽ thử một số quy tắc udev tương tự khi tôi có cơ hội và quay lại với bạn. Chúng tôi đang sử dụng OCZ vertex 3, nhưng tôi không nghĩ các quy tắc được đề xuất của bạn là dành riêng cho Intel, ngoại trừ trường mô hình, đúng không?
Banjer

Vâng, không có gì cụ thể đối với SSD intel, tôi đã sử dụng nó làm ví dụ để chỉ lọc theo các thuộc tính. Bạn sẽ cần sử dụng udevadm infođể tìm các thông số cụ thể cho phần cứng của bạn.
zorlem

10

Lưu ý rằng đọc trước có thể được đặt ít nhất qua /sys( /sys/class/block/sda/queue/read_ahead_kb) blockdevhdparm( hdparm -a).

hdparmtrên Debian và các dẫn xuất của nó đi kèm với một hdparm.confthuộc tính chỉ định trên mỗi thiết bị sẽ được đặt khi khởi động và khi cắm nóng (thông qua udevquy tắc).

Vì vậy, bạn có thể có:

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

(tốt hơn để sử dụng ID hơn là sdacó thể thay đổi từ một khởi động sang tiếp theo).


Tôi thấy hdparmtrên SLES 11, nhưng dường như không thể xác định vị trí hdparm.conf. Google dường như cho tôi biết một kịch bản RC là cần thiết cho bất kỳ hdparmcài đặt nào tồn tại, ít nhất là trên SuSE.
Banjer

@Banjer, vâng, có vẻ như đó là một phần mở rộng Debian (được sửa đổi một chút trong Ubuntu): một tập lệnh shell chạy khi khởi động sớm và cắm nóng thiết bị để phân tích tệp đó và gọi hdparmtheo đó. Tôi đã cập nhật câu trả lời.
Stéphane Chazelas

+1 để chỉ định /sysđường dẫn mặc dù udevquy tắc @zorlem khá đẹp cho cấu hình khởi động.
Toto

-1

Không có gì tương ứng sysctl, vì vậy, vâng, /etc/rc.locallà một cách, hoặc giống nhau. Và hãy cẩn thận, - Cá nhân tôi nhận thấy rằng trên Ubuntu, - những thay đổi đó trôi xa hơn ngay cả khi được đặt một lần sau khi khởi động, vì vậy, nó thậm chí có thể có ý nghĩa để sử dụng crontabđể giữ nó.

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.