กระจายงาน Interrupts ที่ได้รับ ให้ Multi-CPU, Cores

หากคุณประสบปัญหา ssh login เข้าเครื่อง Linux Server แล้วต้องรอหลายวินาที กว่า prompt login จะขึ้น

แต่หลังจาก login เข้าไปในระบบได้ ก็สามารถรันคำสั่งต่างๆ ทำงานได้ ไม่ได้ช้ามากแต่ประการใด

บทความนี้อาจช่วยคุณแก้ไขปัญหาได้

คำสั่งที่ใช้ดูรายงานการทำงานของ CPU คือ mpstat อยู่ในชุดโปรแกรม sysstat

รันคำสั่ง mpstat ตามด้วยออปชั่น “-P ALL” เพื่อดูผลลัพธ์แยกตาม CPU

หมายเหตุ นอกจากคำสั่ง mpstat แล้ว อาจใช้คำสั่ง top ดูโหลดของ CPU ก็ได้

[root@devel ~]# mpstat -P ALL
Linux 2.6.18-194.el5 (devel.example.com)   05/22/2011
04:00:49 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
04:00:49 PM  all   25.13    0.00    0.09    0.14    0.01    0.08    0.00   74.55   2267.62
04:00:49 PM    0    9.39    0.00    0.16    1.04    0.09    0.92    0.00   88.40   2267.62
04:00:49 PM    1   21.11    0.00    0.11    0.17    0.00    0.00    0.00   78.62      0.00
04:00:49 PM    2   27.66    0.00    0.09    0.09    0.00    0.00    0.00   72.15      0.00
04:00:49 PM    3   28.54    0.00    0.09    0.07    0.00    0.00    0.00   71.30      0.00
04:00:49 PM    4   31.10    0.00    0.10    0.07    0.00    0.00    0.00   68.73      0.00
04:00:49 PM    5   29.38    0.00    0.10    0.05    0.00    0.00    0.00   70.47      0.00
04:00:49 PM    6   16.91    0.00    0.08    0.04    0.00    0.00    0.00   82.97      0.00
04:00:49 PM    7   20.46    0.00    0.08    0.04    0.00    0.00    0.00   79.42      0.00

จากคำสั่ง mpstat นี้จะเห็นว่า เฉพาะ CPU0 เท่านั้นที่มีตัวเลข “intr/s”  ไม่เท่ากับ 0

“intr/s” คือจำนวน interrupts (IRQ) ที่ CPU ได้รับ เฉลี่ยต่อ วินาที

การ ssh login เข้าเครื่อง ถือเป็นการ interrupts อย่างหนึ่ง ที่ต้องมี CPU มาทำหน้าที่รับ ก่อนส่งไปประมวลผลต่อไป

การแก้ไข

โปรแกรมที่สามารถช่วยกระจายการรับ interrupts ให้ CPU หลายตัวได้ คือ irqbalance

โดยดีฟอลต์ของการติดตั้ง Linux ส่วนใหญ่แล้ว จะรัน irqbalance ด้วย แต่ถ้าปิดไป แนะนำให้รันขึ้นมาใหม่ และรันทิ้งไว้ตลอดเวลา สำหรับเครื่องที่มี CPU หลายตัว หรือหลาย Core

ตรวจสอบการรัน irqbalance ด้วยคำสั่ง service หรือคำสั่ง ps

[root@devel ~]# service irqbalance status
irqbalance is stopped
[root@devel ~]#
[root@devel ~]# ps -ef | grep irqbalance
[root@devel ~]#

รันเซอร์วิส irqbalance

[root@devel ~]# service irqbalance start
Starting irqbalance:                                       [  OK  ]

ตรวจสอบดูโปรเซสอีกครั้ง

[root@devel ~]# ps -ef | grep irqbalance
root     19003     1  0 16:03 ?        00:00:00 irqbalance

หลังจากรันเซอร์วิส irqbalance ไปซักพักแล้ว ลองรันคำสั่ง mpstat อยู่เรื่อยๆ จะเห็นตัวเลข “intr/s” ของ CPU อื่นๆ เริ่มขึ้นมา แสดงว่า เริ่มมีการกระจาย IRQ ให้ CPU หลายๆ ตัวแล้ว

[root@devel ~]# mpstat -P ALL
Linux 2.6.18-194.el5 (devel.example.com)   05/22/2011
04:05:10 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
04:05:10 PM  all   25.13    0.00    0.09    0.14    0.01    0.08    0.00   74.55   2268.53
04:05:10 PM    0    9.39    0.00    0.16    1.04    0.09    0.92    0.00   88.40   2267.99
04:05:10 PM    1   21.11    0.00    0.11    0.17    0.00    0.00    0.00   78.62      0.00
04:05:10 PM    2   27.66    0.00    0.09    0.09    0.00    0.00    0.00   72.15      0.00
04:05:10 PM    3   28.54    0.00    0.09    0.07    0.00    0.00    0.00   71.30      0.01
04:05:10 PM    4   31.10    0.00    0.10    0.07    0.00    0.00    0.00   68.73      0.01
04:05:10 PM    5   29.37    0.00    0.10    0.05    0.00    0.00    0.00   70.47      0.01
04:05:10 PM    6   16.91    0.00    0.08    0.04    0.00    0.00    0.00   82.97      0.08
04:05:10 PM    7   20.46    0.00    0.08    0.04    0.00    0.00    0.00   79.42      0.09

ลอง ssh login อีกครั้ง น่าจะดีขึ้น

ข้อมูลอ้างอิง

1 thought on “กระจายงาน Interrupts ที่ได้รับ ให้ Multi-CPU, Cores”

  1. ขอบคุณครับ แต่ใน ubuntu ใส่คำสั่ง mpstat -P ALL แล้วมันไม่ขึ้นค่า

    intr/s

    ครับ

Leave a Reply