ฉันขอแนะนำให้คุณใช้ udev เพื่อตั้งค่าพารามิเตอร์สำหรับดิสก์ SSD วิธีนี้คุณสามารถกำหนดค่าตัวจัดกำหนดการคิวเฉพาะที่เหมาะสมกว่าสำหรับ SSD และอื่น ๆ นอกจากนี้คุณยังสามารถใช้พารามิเตอร์กับอุปกรณ์บางตัวได้เท่านั้นโดยขึ้นอยู่กับพารามิเตอร์จำนวนมาก
คุณสามารถรับแอททริบิวต์เฉพาะที่จำเป็นในการจับคู่อุปกรณ์ของคุณ (เช่นรุ่นของดิสก์และผู้ผลิต) โดยดำเนินการ:
udevadm info -a -p /sys/block/sda
และตรวจสอบคู่ ATTR ทั้งหมดสำหรับอุปกรณ์บล็อกของคุณ
ข้อดีอีกอย่างคือความสามารถในการตั้งค่าพารามิเตอร์สำหรับดิสก์ที่เสียบได้ (เช่นในกล่องหุ้มหรือช่องใส่ฮอตสแนป) และการตั้งค่าจะถูกนำไปใช้กับอุปกรณ์ใหม่ทั้งหมดโดยที่พารามิเตอร์ของอุปกรณ์ตรงกัน
นี่คือตัวอย่างที่จะใช้ตัวกำหนดตารางเวลาเฉพาะสำหรับ Intel SSD, ค่าหัวอ่านที่คุณต้องการ (4096 บล็อก = 2048 kb), และใช้ตัวกำหนดตารางเวลาที่แตกต่างกันสำหรับ SSD อื่น ๆ ทั้งหมด:
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"
หลังจากบันทึกไฟล์คุณสามารถทดสอบว่ากฎของคุณจะจับคู่กับอุปกรณ์และสิ่งใดที่ udev จะทำโดยใช้ udevadm:
udevadm test --action=add /sys/block/sda
สิ่งนี้พิมพ์กฎทั้งหมดที่ udev โหลด, สิ่งที่ตรงกัน, สิ่งที่ไม่ได้และสิ่งที่ udev ตัดสินใจจะทำเมื่อเสียบอุปกรณ์
หวังว่านี่จะช่วยได้