จะแบนการขัดจังหวะฮาร์ดแวร์ด้วย IRQBALANCE_BANNED_CPUS บน Ubuntu ได้อย่างไร


9

ฉันต้องการแบนการขัดจังหวะจาก CPU บางตัว ฉันได้ยินเกี่ยวกับตัวเลือก IRQBALANCE_BANNED_CPUS ฉันเห็นว่า irqbalance กำลังทำงานในพื้นหลังของเครื่อง ฉันจะไปแก้ไขที่ใดและฉันจะกำหนดค่าตัวเลือกนั้นได้อย่างไร ตัวอย่างเช่นฉันต้องการยกเว้น cpus 2,3,4,5 จากการขัดจังหวะ ตัวอธิบายอาร์กิวเมนต์คือ:

ให้หน้ากากของซีพียูที่ irqbalance ควรละเว้นและไม่เคยกำหนดให้ขัดจังหวะ

หน้ากากหมายถึงอะไร? และฉันจะกำหนดค่า irqbalance ด้วยตัวเลือกนั้นได้ที่ไหน

EDIT1:จะรู้ได้อย่างไรว่าการกำหนดค่าของฉันมีผลบังคับใช้ในคำอื่น ๆ ที่ซีพียูของฉันได้รับไม่ขัดจังหวะ? ฉันกำลังตรวจสอบ / proc / ขัดจังหวะ แต่มีบางหมายเลขเพิ่มขึ้น

แก้ไข 2:ตอนนี้ฉันบูตเครื่องด้วย IRQBALANCE_BANNED_CPUS = 3e ดังนั้น CPU 0 เท่านั้นจึงไม่ถูกห้ามจากการขัดจังหวะ ดังนั้นฉันควรคาดหวังว่าจะเห็น cpo0 ได้รับการขัดจังหวะจำนวนมากและซีพียูอื่นไม่ได้รับการขัดจังหวะใช่มั้ย นี่คือ / proc ของฉัน / ขัดจังหวะ บรรทัดที่เป็นตัวหนากำลังเปลี่ยนแปลงสำหรับ cpus ทั้งหมด บรรทัดที่ 22, 24, 35 และ LOC กำลังเปลี่ยนแปลง

            CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       
   0:         26          0          0          0          0          0   IO-APIC-edge      timer
   1:          2          0          0          0          0          0   IO-APIC-edge      i8042
   6:          3          0          0          0          0          0   IO-APIC-edge      floppy
   8:          1          0          0          0          0          0   IO-APIC-edge      rtc0
   9:          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
  12:          4          0          0          0          0          0   IO-APIC-edge      i8042
  14:      13556          0          0          0          0          0   IO-APIC-edge      ata_piix
  15:          0          0          0          0          0          0   IO-APIC-edge      ata_piix
  18:          0          0          0          0          0          0   IO-APIC-fasteoi   ata_piix
  19:          2          0          0          0          0          0   IO-APIC-fasteoi   ohci1394
  20:          3          0          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb6
  21:        197        635         39          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4, uhci_hcd:usb7, HDA Intel
  22:        344       3506          0        702          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
  24:        162         48          0          0          0          0   IO-APIC-fasteoi   nvidia
  35:        174          0         47          0          0          0   IO-APIC-fasteoi   nvidia
  53:       3517          0          0          0          0          0   PCI-MSI-edge      eth0
 NMI:          0          0          0          0          0          0   Non-maskable interrupts
 LOC:      11007       8840       6480       5652       4272       3046   Local timer interrupts
 SPU:          0          0          0          0          0          0   Spurious interrupts
 PMI:          0          0          0          0          0          0   Performance monitoring interrupts
 PND:          0          0          0          0          0          0   Performance pending work
 RES:        292        169        217        125        122        126   Rescheduling interrupts
 CAL:         86        280        254        292        293        291   Function call interrupts
 TLB:       1147       1031       1348        616        177        322   TLB shootdowns
 TRM:          0          0          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0          0          0   Threshold APIC interrupts
 MCE:          0          0          0          0          0          0   Machine check exceptions
 MCP:          2          2          2          2          2          2   Machine check polls
 ERR:          5
 MIS:          0

edit3:ดูเหมือนว่าIRQBALANCE_BANNED_CPUS ตัวเลือกจะถูกละเว้นสมบูรณ์ในอูบุนตู ฉันลองรีบูตเครื่องด้วย 1, 3e และหยุดการทำงานชั่วคราว เมื่อฉันปิดการใช้งาน irqbalance โดยการตั้งค่า ENABLED = 0 ที่ฉันได้รับสะอาด / proc / ขัดจังหวะเพียงแค่ cpu0 และไม่มีซีพียูอื่น ๆ

คำตอบ:


7

คุณตั้ง IRQBALANCE_BANNED_CPUS ใน/ etc / default / irqbalance ฉันพบนี้โดยการค้นหาใน/etc/init.d/irqbalance แต่ค่าที่ถูกต้องสำหรับการตั้งค่านั้นคืออะไร? จากหน้าคนของ Red Hat:

นี่คือรูปแบบฐานสิบหกที่ไม่มีส่วนนำหน้า '0x' ในระบบที่มีตัวประมวลผลจำนวนมากแต่ละกลุ่มของเลขฐานสิบหกแปดหลักจะถูกแยกด้วย ba a comma ',' เช่น export IRQBALANCE_BANNED_CPUS=fc0จะป้องกัน irqbalance จากการกำหนด irqs ให้กับซีพียู 7-12 (cpu6-cpu11) หรือ export IRQBALANCE_BANNED_CPUS=ff000000,00000001จะป้องกัน irqbalance จากการกำหนด irqs ให้กับ 1 (cpu0) และ 57th-64th cpus (cpu56-cpu63)

แนวคิดของหน้ากากจะมีการอธิบายในวิกิพีเดีย อ่านแล้วกลับมา ลองแยกตัวอย่างแรกของ Red Hat หมายเลขที่เขียนเป็น fc0 ในเลขฐานสิบหกจะถูกเขียนเป็น 111111000000 ในไบนารี การสแกนจากขวาไปซ้าย (เช่นจากบิตที่มีนัยสำคัญน้อยที่สุดไปยังบิตที่สำคัญที่สุด ) มีศูนย์ทั้งหมดหกศูนย์ นี่หมายความว่าซีพียูที่ 1-5 (cpu0-cpu5) สามารถถูกอินเตอร์รัปต์ได้ จากนั้นมีหกคน ซึ่งหมายความว่าซีพียูที่ 7-12 (cpu6-cpu11) จะไม่ถูกขัดจังหวะ

ดูเหมือนว่าคุณต้องการอนุญาตให้ cpu0 และ cpu1 รับการขัดจังหวะ แต่ป้องกัน cpu2, cpu3, ​​cpu4 และ cpu5 จากการถูกขัดจังหวะที่ได้รับมอบหมาย นั่นหมายความว่าคุณต้องมีสองศูนย์และสี่คนหรือ 1,111100 นี่คือ 3C ในเลขฐานสิบหก ดังนั้นคุณจะสร้าง/ etc / default / irqbalanceกับเนื้อหา

ENABLED="1"
ONESHOT="0"
IRQBALANCE_BANNED_CPUS="3f"

หากต้องการดูสิ่งที่เกิดขึ้นให้ลอง

$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance 
$ sudo irqbalance --debug

ขอบคุณสำหรับคำอธิบาย ความสับสนที่นี่คือ: ถึง BAN CPU 0 บนเครื่อง 6-cpu ฉันใช้: 000001 (1) หรือ 111110 (3e) มันเป็นครั้งแรกใช่มั้ย
TraderJoeChicago

โปรดตรวจสอบการแก้ไขของฉันในคำถามเดิม ฉันจำเป็นต้องรู้วิธีการอ่าน / proc / ขัดจังหวะเพื่อให้แน่ใจว่าการกำหนดค่าของฉันทำงานและซีพียูของฉันถูกแบนจากการขัดจังหวะ ขอบคุณ!
TraderJoeChicago

ดูหมายเลขแก้ไขของฉันที่ 3: IRQBALANCE_BANNED_CPUS กำลังถูกนำเข้าบน Ubuntu ยกเว้นว่าเรากำลังทำหน้ากาก แต่ฉันลอง 1 และ 3e โดยไม่ประสบความสำเร็จ :(
TraderJoeChicago

ดูการแก้ไขข้อบกพร่องของฉัน
sciurus

2
NOPE ฉันสามารถยืนยันได้ว่ามันไม่ทำงานบน Ubuntu 10.04.1 ตัวเลือกการกำหนดค่านี้ IRQBALANCE_BANNED_CPUS = "1" จะถูกละเว้น
TraderJoeChicago


0

คุณต้องใช้ 3c ตามข้างต้นเพื่อให้มันใช้งานได้ รุ่นที่ใหม่กว่าทำสิ่งนี้โดยอัตโนมัติ (อย่างน้อย v 1.9 บนเดเบียน / sid)


0

การเพิ่มคำแนะนำข้างต้นเกี่ยวกับการแก้ไขปัญหา irqbalance - คำสั่งที่มีประโยชน์สำหรับการดูความสัมพันธ์ที่ขัดจังหวะอันเป็นผลมาจากการรันของ irqbalance:

find /proc/irq/ -name smp_affinity | xargs cat | less
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.