ezylinux
ลินุกซ์ง่ายนิดเดียว

22
Aug

I/O Scheduler สำหรับ Hard disk หรือพวก block device จะมีอยู่ด้วยกัน 4 แบบกัน คือ anticipatory, noop, deadline และ CFQ และส่วนมาก default ของ I/O Scheduler ที่ถูกเลือก คือ CFQ

สำหรับวิธีการเปลี่ยนค่า I/O Scheduler สามารถทำได้ดังนี้

echo SCHEDNAME > /sys/block/DEV/queue/scheduler

ซึ่ง SCHEDNAME คือชื่อของ scheduling algorithm (anticipatory, noop, deadline และ CFQ)  และ DEV คือ ชื่อของ device เช่น sda, sdb, sdc เป็นต้น

ตัวอย่างการเปลี่ยน I/O Scheduler โดยสมมติว่าจะต้องการเปลี่ยนที่ device sda จาก cfq เป็น anticipatory
continue

Tags: I/O Disk Scheduler, I/O scheduler, Scheduler
Category : HDD Management | System | Blog
3
May

ใน Linux เราสามารถเพิ่ม หรือลดระดับความรวดเร็วใน การเข้าถึง I/O ได้ในระดับ process โดยใช้คำสั่ง ionice ซึ่งเป็นคำสั่งที่สามารถเรียกดูและแก้ไขค่า I/O scheduling class และ priority ในระดับ process ได้

รูปแบบคำสั่ง

#ionice [-c] [-n] [-p] [COMMAND [ARG...]]

โดยที่

       -c คือการกำหนด scheduling class โดยที่ 1 คือ real time, 2 คือ best-effort และ 3 คือ idle.
       -n คือการกำหนด scheduling class data เป็นการ defines class data ซึ่งสามารถใช้ได้กับ -c1 และ -c2 เท่านั้น
          หรือก็คือ real time และ best-effort โดยเรียงจาก 0-7 (0 จะมาค่า priority มากที่สุด)
       -p คือค่า process id นั้นเอง แต่ถ้าไม่มีการกำหนดพารามิเตอร์ -c และ -n โปรแกรม ionice จะแสดง
          รายละเอียดของค่าต่างๆ ใน process id นั้นแทน

ตัวอย่างการใช้โปรแกรม ionice

กำหนด process ที่ PID 89 ให้เป็น idle io process.
# ionice -c3 -p89

กำหนดให้ bash ทำงานแบบ best-effort และ highest priority.
# ionice -c2 -n0 bash

ดูแค่พารามิเตอร์ของ scheduling class และ priority ของ PID 89
# ionice -p89

Tags: I/O scheduler, I/O tuning
Category : Linux Tuning | System | Blog
19
Jul

ในการใช้งาน VOD servers นั้นถ้าเราใช้ cfg scheduler นั้นเวลาที่มี connection ที่เข้ามามีจำนวนมากจะทำให้เกิดเวลาในการทำงานของ I/O ของ disk เพิ่มขึ้น ซึ่งจะทำให้เวลาที่ผู้ใช้งานดู video ไม่เกิดความราบรื่นต่อการรับชม ดังนั้นเราควรที่จะใช้ “deadline” I/O scheduler เพื่อ optimize I/O ให้สามารถรองรับการทำงานแบบ maximizing I/O throughput ได้

การตั้งค่าเราสามารถทำได้ตอน boot เครื่องโดยใช้ “elevator” ซึ่งเป็น kernel parameter ตัวหนึ่ง โดยให้เราไปแก้ไขไฟล์ grub.conf ดังตัวอย่างข้างล่าง

title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/vg0/lv0 elevator=deadline
initrd /initrd-2.6.18-8.el5.img

ใน Red Hat Enterprise Linux 5 เราสามารถที่จะเปลี่ยน I/O scheduler แบบ on the fly ได้ดังตัวอย่างข้างล่างนี้

# cat /sys/block/sdb/queue/scheduler
noop anticipatory deadline [cfq]
# echo 'deadline' > /sys/block/sdb/queue/scheduler
# cat /sys/block/sdb/queue/scheduler
noop anticipatory [deadline] cfq

เรายังสามารถที่จะ tune deadline scheduler ได้เพิ่มเติมอีก โดยที่ไฟล์ที่เกี่ยวข้องกับการ tune deadline scheduler นี้แสดงอยู่ด้านล่างครับ

/sys/block/DEVNAME/queue/iosched/read_expire
/sys/block/DEVNAME/queue/iosched/write_expire
/sys/block/DEVNAME/queue/iosched/fifo_batch
/sys/block/DEVNAME/queue/iosched/write_starved
/sys/block/DEVNAME/queue/iosched/front_merges

DEVNAME คือ ชื่อของ block device อย่างเช่น sda, sdb, hda เป็นต้น

ข้อมูลเพิ่มเติมเกี่ยวกับ deadline I/O scheduler สามารถดูได้ที่ : /usr/share/doc/kernel-[version]/Documentation/block/deadline-iosched.txt.

Tags: I/O scheduler, Red Hat Enterprise Linux, Video on Demand, Video on Demand server, VOD
Category : Linux Tuning | Blog