คำสั่งที่ใช้ในการตรวจสอบ Performance บน Linux ตอนที่ 3:Disk I/O Utilization

Most Recent

Seo Services
บทความนี้จะอธิบายถึงการตรวจสอบประสิทธิภาพการทำงานของ 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

ตัวอย่างเช่น ต้องการแสดงผลของ Disk I/O utilization ทุกๆ 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) ต่อวินาที

              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 เพื่อให้หน่วยเป็นวินาทีเหมือนกัน)

รายละเอียดของผลลัพธ์ค่าอื่น สามารถดูเพิ่มเติมได้จากคำสั่ง 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



การวิเคราะห์


  • ตรวจสอบค่า 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 คำสั่งที่ใช้ในการตรวจสอบ Performance บน Linux ตอนที่ 3:Disk I/O Utilization Reviewed by Wisoot Amatariyakul on 7:54 PM Rating: 5

No comments:

Powered by Blogger.