ฉันจะกำหนดกำหนดเวลาเป็น I / O scheduler สำหรับอุปกรณ์ USB Flash โดยใช้กฎ udev ได้อย่างไร [ซ้ำ]


0

ซ้ำกันได้:
กฎ Udev ไม่ทำงาน

ฉันได้ตั้งค่า CFQ เป็นตัวกำหนดตารางเวลา I / O เริ่มต้น ฉันมักจะได้รับประสิทธิภาพที่ไม่ดีเมื่อฉันเขียนข้อมูลลงในอุปกรณ์แฟลช สิ่งนี้จะได้รับการแก้ไขหากฉันใช้กำหนดเวลาเป็นตัวกำหนดตารางเวลา I / O สำหรับอุปกรณ์ USB Flash ฉันไม่สามารถเปลี่ยนเครื่องมือกำหนดตารางเวลาด้วยตนเองได้ใช่ไหม ฉันคิดว่าการเขียนกฎ udev เป็นความคิดที่ดี

ใครช่วยเขียนกฎให้ฉันหน่อยได้ไหม? ฉันต้องการ:

  1. เมื่อฉันเสียบอุปกรณ์ USB ให้ตรวจสอบประเภทของอุปกรณ์
  2. หากเป็นฮาร์ดดิสก์ USB แบบพกพาไม่ต้องทำอะไรเลย (ฉันคิดว่าถ้าอุปกรณ์มีพาร์ติชั่นมากกว่าหนึ่งพาร์ติชั่นจะเป็นฮาร์ดดิสก์แบบพกพาเสมอ
  3. หากเป็นอุปกรณ์ USB Flash ให้ตั้งเวลาตามที่กำหนดไว้

คุณอ่านคู่มือ udev แล้วหรือยัง คุณลอง udev monitor แล้วหรือยัง? คุณได้ลองสร้างกฎหรือไม่? ปัญหาการปฏิบัติจริงที่เกิดขึ้นจริงที่คุณประสบคืออะไร เราไม่เห็นฮาร์ดแวร์ของคุณดังนั้นอย่าเขียนกฎ
Tom Wijsman

ที่จริงแล้วฉันอ่านบทความเกี่ยวกับ USB & amp; udev แต่พวกเขาแค่พยายามตรวจหาอุปกรณ์ใหม่ของ / dev / sdx ไม่ว่าจะเป็นอุปกรณ์ USB หรืออย่างอื่น
比尔盖子

ตกลง. ฉันอ่าน f ** king เป็นจำนวนมาก และฉันรู้วิธีการเขียนกฎตอนนี้ แต่ udev ดูเหมือนจะไม่เห็นกฎของฉัน (กฎใด ๆ ) มันไม่ทำงานเลย โปรดดูคำถาม superuser.com/questions/481748/udev-rule-is-not-working .
比尔盖子

ถ้าคุณจะใช้ udevadm monitr เหมือนคู่มือบอกคุณคุณจะไม่ใส่ ?? เป็นกฎของคุณ
Tom Wijsman

คำตอบ:


1

ก่อนอื่นให้ใส่เชลล์สคริปต์ scheduler4usb เข้าไป $PATH (เช่น: /usr/bin ):

#!/bin/bash
# Usage: ./script device scheduler

# If your are using util-linux 2.22, you must change this line to:
# fdisk /dev/$1 -l 2>&1 >/dev/null | grep -q "doesn't contain a valid partition table"
#
fdisk /dev/$1 -l 2>&1 >/dev/null | grep -q "This doesn't look like a partition table"

# If this device has a partition table.
if (($?==0)); then 
    echo $2 > /sys/block/$1/queue/scheduler
fi

exit

อย่าลืม chmod +x scheduler4usb ถึงสคริปต์ของคุณ!

จากนั้นเขียนกฎลงใน /etc/udev/rules.d/91-change-schduler.rules:

SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="sd?", RUN+="/usr/local/bin/scheduler4usb %k deadline"

1
แทน RUN+="some_script" คุณสามารถปรับเปลี่ยนแอตทริบิวต์ sysfs ได้โดยตรง: ..., ATTR{queue/scheduler}="deadline"
hurikhan77
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.