บทความนี้จะอธิบายถึงการตรวจสอบประสิทธิภาพการทำงานของ Disk I/O บน Linux สำหรับคำสั่งที่จะนำมาใช้ในการตรวจสอบได้แก่ vmstat, iostat, sar
vmstat
รูปแบบคำสั่ง
vmstat interval [count]
bi: จำนวน block ที่รับจาก block device (หน่วยเป็น blocks/วินาที)
bo: จำนวน block ที่ส่งไปยัง block device (หน่วยเป็น blocks/วินาที)
ตัวอย่างเช่น ต้องการแสดงผลของ Disk I/O utilization ทุกๆ 2 วินาที จำนวน 5 ครั้ง
# vmstat 2 5
สำหรับ kernel version ตั้งแต่ 2.5.70 ขึ้นไป จะมี option -d , --disk ที่ใช้แสดงรายงานสถิติการใช้งาน disk
iostat
เป็นคำสั่งที่แสดงรายงานการใช้งาน CPU และ I/O สำหรับ device และ partition
รูปแบบคำสั่ง
iostat interval [count]
iostat -xtzc interval [count]
-c แสดงรายงานเกี่ยวกับ CPU Utilization
-t แสดงเวลาสำหรับการแสดงรายงานแต่ละชุด
-x แสดงรายงานสถิติการทำงานเพิ่มเติม option นี้จะใช้ได้กับ kernel ตั้งแต่ version 2.5 ขึ้นไป
-z ไม่แสดงสถิติการทำงานสำหรับ device ที่ไม่มี activity ใดๆ ในช่วงเวลานั้น
ผลลัพธ์ที่แสดง
ในส่วนของ CPU:
รายละเอียดของผลลัพธ์ค่าอื่น สามารถดูเพิ่มเติมได้จากคำสั่ง man iostat
ตัวอย่างผลลัพธ์จากคำสั่ง iostat แสดงรายงานการใช้งาน CPU และ I/O สำหรับ device และ partition ทุกๆ 2 วินาที จำนวน 3 ครั้ง
# iostat 2 3
ตัวอย่างผลลัพธ์จากคำสั่ง iostat แสดงรายงานการใช้งาน CPU และ I/O สำหรับ device และ partition ทุกๆ 3 วินาที โดยแสดงรายละเอียดเพิ่มเติมในส่วน average size, average time สำหรับ I/O ที่รอ device ทำงาน, % utilization
vmstat
รูปแบบคำสั่ง
vmstat interval [count]
bi: จำนวน block ที่รับจาก block device (หน่วยเป็น blocks/วินาที)
bo: จำนวน block ที่ส่งไปยัง block device (หน่วยเป็น blocks/วินาที)
ตัวอย่างเช่น ต้องการแสดงผลของ Disk I/O utilization ทุกๆ 2 วินาที จำนวน 5 ครั้ง
# vmstat 2 5
สำหรับ kernel version ตั้งแต่ 2.5.70 ขึ้นไป จะมี option -d , --disk ที่ใช้แสดงรายงานสถิติการใช้งาน disk
ตัวอย่างเช่น ต้องการแสดงผลของ Disk I/O utilization ทุกๆ 3 วินาที จำนวน 5 ครั้ง
# vmstat -d 3 5
# vmstat -d 3 5
iostat
เป็นคำสั่งที่แสดงรายงานการใช้งาน CPU และ I/O สำหรับ device และ partition
รูปแบบคำสั่ง
iostat interval [count]
iostat -xtzc interval [count]
-c แสดงรายงานเกี่ยวกับ CPU Utilization
-t แสดงเวลาสำหรับการแสดงรายงานแต่ละชุด
-x แสดงรายงานสถิติการทำงานเพิ่มเติม option นี้จะใช้ได้กับ kernel ตั้งแต่ version 2.5 ขึ้นไป
-z ไม่แสดงสถิติการทำงานสำหรับ device ที่ไม่มี activity ใดๆ ในช่วงเวลานั้น
ผลลัพธ์ที่แสดง
ในส่วนของ CPU:
%user แสดง % CPU utilization ที่เกิดขึ้นขณะทำงานในระดับ user (application)
%nice แสดง % CPU utilization ที่เกิดขึ้นขณะทำงานในระดับ user กับการใช้ nice priority
%system แสดง % CPU utilization ที่เกิดขึ้นขณะทำงานในระดับ system (kernel)
%iowait แสดง % ของเวลาที่ CPU ใช้ระหว่างที่ระบบรอ disk I/O พร้อมที่จะทำงาน
%steal แสดง % ของเวลาที่ใช้ในการรอของ virtual CPU หรือ CPU ขณะที่ hypervisor ให้บริการ virtual CPU ตัวอื่นอยู่
%idle แสดง % ของเวลาที่ CPU ไม่ถูกใช้งาน
ในส่วนของ Device หรือ partition:
tps ระบุจำนวนของการ transfer ข้อมูลไปยัง device ต่อวินาที
Blk_read/s (kB_read/s, MB_read/s)
ระบุจำนวน block ของข้อมูลที่อ่านจาก device (kilobytes, megabytes) ต่อวินาที
ระบุจำนวน block ของข้อมูลที่อ่านจาก device (kilobytes, megabytes) ต่อวินาที
Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s)
ระบุจำนวน block ของข้อมูลที่เขียนไปที่ device (kilobytes, megabytes) ต่อวินาที
Blk_read (kB_read, MB_read)
จำนวน block ทั้งหมดที่อ่านจาก device (kilobytes, megabytes) ต่อวินาที
Blk_wrtn (kB_wrtn, MB_wrtn)
จำนวน block ทั้งหมดที่เขียนไปที่ device (kilobytes, megabytes) ต่อวินาที
r/s จำนวนของคำขอเพื่ออ่านที่สำเร็จสำหรับ device ต่อวินาที
w/s จำนวนของคำขอเพื่อเขียนที่สำเร็จสำหรับ device ต่อวินาที
avgrq-sz ขนาดเฉลี่ยของการขอไปยัง device (sectors)
avgqu-sz ค่า queue length เฉลี่ยของการขอไปยัง device
await เวลาเฉลี่ย(วินาที) สำหรับการร้องขอ I/O ที่ถูกใช้กับ device เพื่อให้บริการตั้งแต่ต้นจนจบ (รวมถึงช่วงเวลาที่อยู่ในคิวและเวลาที่ให้บริการตามคำขอ)
r_await เวลาเฉลี่ย(วินาที) สำหรับการร้องขอ I/O สำหรับการอ่านที่ถูกใช้กับ device เพื่อให้บริการ
w_await เวลาเฉลี่ย(วินาที) สำหรับการร้องขอ I/O สำหรับการเขียนที่ถูกใช้กับ device เพื่อให้บริการ
svctm เวลาเฉลี่ยของการให้บริการ (service time) (หน่วยเป็น milliseconds) สำหรับการร้องขอ I/O ที่ถูกใช้กับ device
%util % ของเวลาที่เสียไประหว่างที่คำร้องขอ I/O ที่ถูกใช้กับ device (bandwidth utilization) device จะเกิดปัญหาการใช้งานเมื่อค่านี้เข้าใกล้ 100%
%util ของ linux = (r/s + w/s) * svctm /10 (เนื่องจาก svctm มีหน่วยเป็น millisecond จึงต้องหาร 10 เพื่อให้หน่วยเป็นวินาทีเหมือนกัน)
%util ของ linux = (r/s + w/s) * svctm /10 (เนื่องจาก svctm มีหน่วยเป็น millisecond จึงต้องหาร 10 เพื่อให้หน่วยเป็นวินาทีเหมือนกัน)
รายละเอียดของผลลัพธ์ค่าอื่น สามารถดูเพิ่มเติมได้จากคำสั่ง man iostat
ตัวอย่างผลลัพธ์จากคำสั่ง iostat แสดงรายงานการใช้งาน CPU และ I/O สำหรับ device และ partition ทุกๆ 2 วินาที จำนวน 3 ครั้ง
# iostat 2 3
ตัวอย่างผลลัพธ์จากคำสั่ง iostat แสดงรายงานการใช้งาน CPU และ I/O สำหรับ device และ partition ทุกๆ 3 วินาที โดยแสดงรายละเอียดเพิ่มเติมในส่วน average size, average time สำหรับ I/O ที่รอ device ทำงาน, % utilization
sar
รูปแบบคำสั่งในการแสดงผล Disk I/O utilization
sar -d interval [count]
ตัวอย่าง เช่น แสดงผล Disk I/O utilization ทุกๆ 3 วินาที จำนวน 2 ครั้ง
# sar -d 3 2
ในกรณีที่ต้องการจะดูข้อมูลย้อนหลัง ไฟล์ที่จัดเก็บจะอยู่ที่ /var/log/sa โดยไฟล์ของวันที่ 1 คือ sa01, ...
ตัวอย่างถ้าเราต้องการจะดู Disk I/O utilization ในวันที่ 23 สามารถดูได้โดยใช้คำสั่งดังนี้
# cd /var/log/sa
# sar -d -f sa23 | more
การทดสอบ disk throughput ด้วยคำสั่ง dd
การวิเคราะห์
ถ้า disk แสดงค่า read/write สูง และ percentage utilization (%util) ของ disk เข้าใกล้ 100 percent และ ค่าเฉลี่ย service time (svctm) สูงกว่า 30 milliseconds และมี waiting time (await) เกิดขึ้น จึงมีความจำเป็นที่จะต้องดำเนินการแก้ไขปัญหาดังต่อไปนี้:
หวังว่าคงจะมีประโยชน์ ไม่มากก็น้อย
วิสูจน์
12/9/2562
รูปแบบคำสั่งในการแสดงผล Disk I/O utilization
sar -d interval [count]
ตัวอย่าง เช่น แสดงผล Disk I/O utilization ทุกๆ 3 วินาที จำนวน 2 ครั้ง
# sar -d 3 2
ในกรณีที่ต้องการจะดูข้อมูลย้อนหลัง ไฟล์ที่จัดเก็บจะอยู่ที่ /var/log/sa โดยไฟล์ของวันที่ 1 คือ sa01, ...
ตัวอย่างถ้าเราต้องการจะดู Disk I/O utilization ในวันที่ 23 สามารถดูได้โดยใช้คำสั่งดังนี้
# cd /var/log/sa
# sar -d -f sa23 | more
การทดสอบ disk throughput ด้วยคำสั่ง dd
การวิเคราะห์
- ตรวจสอบค่า Read/Write ต่อวินาที (r/s, w/s)
- ตรวจสอบค่า Percentage busy (%util)
- ตรวจสอบค่า I/O wait (await) ถ้าค่า I/O wait สูง แสดงว่าเกิด I/O bottleneck
- ตรวจสอบค่า Service time (milliseconds) สำหรับ I/O request ไปยัง device
- ถ้าค่า average queue length (avgqu-sz) สูง แสดงว่าเกิด disk I/O bottleneck
ถ้า disk แสดงค่า read/write สูง และ percentage utilization (%util) ของ disk เข้าใกล้ 100 percent และ ค่าเฉลี่ย service time (svctm) สูงกว่า 30 milliseconds และมี waiting time (await) เกิดขึ้น จึงมีความจำเป็นที่จะต้องดำเนินการแก้ไขปัญหาดังต่อไปนี้:
- ปรับ tune application เพื่อที่จะใช้ disk ให้มีประสิทธิภาพมากขึ้น
- ดำเนินการเพิ่ม disk และ config เป็นแบบ Striping เพื่อกระจาย load ไปยัง disk ต่างๆ (LVM เป็นต้น)
- เพิ่ม memory เพื่อให้มี buffer ใหญ่ขึ้น
- ย้าย file system ไปยัง disk หรือ controller ที่เร็วกว่า หรือเปลี่ยนไปยังอุปกรณ์ disk หรือ controller ที่เร็วกว่า
- ใช้ hardware RAID controller
หวังว่าคงจะมีประโยชน์ ไม่มากก็น้อย
วิสูจน์
12/9/2562
คำสั่งที่ใช้ในการตรวจสอบ Performance บน Linux ตอนที่ 3:Disk I/O Utilization
Reviewed by Wisoot Amatariyakul
on
7:54 PM
Rating:
No comments: