Làm cách nào để cấm các ngắt phần cứng với IRQBALANCE_BANNED_CPUS trên Ubuntu?


9

Tôi muốn cấm ngắt từ một số CPU nhất định. Tôi đã nghe nói về tùy chọn IRQBALANCE_BANNED_CPUS. Tôi thấy sự mất cân bằng đang chạy trong nền của máy tính của tôi. Tôi phải chỉnh sửa ở đâu và làm cách nào để định cấu hình tùy chọn đó? Ví dụ, tôi muốn loại trừ cpus 2,3,4,5 khỏi các ngắt. Mô tả đối số là:

Cung cấp một mặt nạ cpus mà sự mất cân bằng nên bỏ qua và không bao giờ gán ngắt cho

Nó có nghĩa là gì bởi một mặt nạ? Và tôi định cấu hình mất cân bằng với tùy chọn đó ở đâu?

EDIT1: Làm thế nào để biết rằng cấu hình của tôi có hiệu lực, nói cách khác là cpu của tôi không bị gián đoạn? Tôi đang kiểm tra / Proc / ngắt nhưng một số con số đang tăng lên ở đó.

EDIT2: Bây giờ tôi đã khởi động máy của mình với IRQBALANCE_BANNED_CPUS = 3e để chỉ CPU 0 KHÔNG bị cấm bị gián đoạn. Vì vậy, tôi sẽ thấy cpo0 nhận được rất nhiều ngắt và các cpus khác không nhận được ngắt, phải không? Đây là / Proc / ngắt của tôi. Các dòng in đậm đang thay đổi cho TẤT CẢ cpus. Các dòng 22, 24, 35 và LỘC đang thay đổi.

            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: Có vẻ như tùy chọn IRQBALANCE_BANNED_CPUS hoàn toàn được IGNORED trên Ubuntu . Tôi đã thử khởi động lại máy của mình với 1, 3e và bị gián đoạn tất cả. Chỉ khi tôi vô hiệu hóa sự mất cân bằng bằng cách đặt ENABLED = 0, tôi sẽ nhận được một sạch / Proc / ngắt chỉ trên cpu0 và không có cpu nào khác.

Câu trả lời:


7

Bạn đặt IRQBALANCE_BANNED_CPUS trong / etc / default / irqbalance . Tôi đã tìm thấy điều này bằng cách tìm trong /etc/init.d/irqbalance . Nhưng các giá trị hợp lệ cho cài đặt đó là gì? Từ trang người đàn ông của Red Hat:

Đây là mặt nạ hex không có '0x' hàng đầu, trên các hệ thống có số lượng lớn bộ xử lý, mỗi nhóm gồm tám chữ số hex được phân tách bằng dấu phẩy ','. tức là export IRQBALANCE_BANNED_CPUS=fc0sẽ ngăn chặn sự mất cân bằng khi gán irqs cho cpus thứ export IRQBALANCE_BANNED_CPUS=ff000000,000000017-12

Các khái niệm về một mặt nạ được giải thích trên wikipedia. Đọc rồi, quay lại. Hãy phá vỡ ví dụ đầu tiên của Red Hat. Số được viết là fc0 theo hệ thập lục phân được viết là 111111000000 ở dạng nhị phân. Quét từ phải sang trái (nghĩa là từ bit có trọng số thấp nhất đến bit đáng kể nhất ), có sáu số không. Điều này có nghĩa là cpus thứ 1-thứ 5 (cpu0-cpu5) có thể được chỉ định ngắt. Sau đó, có sáu cái. Điều này có nghĩa là cpus thứ 7-12 (cpu6-cpu11) sẽ không được chỉ định ngắt.

Có vẻ như bạn muốn cho phép cpu0 và cpu1 nhận được các ngắt nhưng ngăn cpu2, cpu3, ​​cpu4 và cpu5 không bị gián đoạn. Điều đó có nghĩa là bạn cần hai số không và bốn số, hoặc 111100. Đây là số 3 trong hệ thập lục phân. Vì vậy, bạn sẽ tạo / etc / default / irqbalance với nội dung

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

Để xem những gì đang xảy ra, hãy thử

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

Cảm ơn đã giải thích. Sự nhầm lẫn ở đây là: Để BAN CPU 0 trên máy 6 cpu. Tôi có sử dụng: 000001 (1) hoặc 111110 (3e). Đây là lần đầu tiên, phải không?
TraderJoeChicago

Vui lòng kiểm tra chỉnh sửa của tôi trong câu hỏi ban đầu. Tôi cần biết cách đọc / Proc / ngắt để đảm bảo cấu hình của tôi hoạt động và cpu của tôi bị cấm ngắt. Cảm ơn!
TraderJoeChicago

Xem chỉnh sửa số 3 của tôi: IRQBALANCE_BANNED_CPUS đang được sử dụng trên Ubuntu, trừ khi chúng tôi đang làm rối mặt nạ. Nhưng tôi đã thử 1 và 3e mà không thành công. :(
TraderJoeChicago

Xem các chỉnh sửa gỡ lỗi của tôi.
tọa

2
ĐẠO ĐỨC. Tôi có thể xác nhận nó KHÔNG hoạt động trên Ubuntu 10.04.1. Tùy chọn cấu hình này IRQBALANCE_BANNED_CPUS = "1" bị bỏ qua.
TraderJoeChicago


0

Bạn phải sử dụng 3c như trên để làm cho nó hoạt động. Các phiên bản mới hơn sẽ tự động làm điều này (ít nhất là bằng v 1.9 trên debian / sid)


0

Thêm vào các đề xuất ở trên về cách khắc phục sự cố mất cân bằng - Một lệnh hữu ích để xem các mối quan hệ gián đoạn do việc chạy của irqbalance:

find /proc/irq/ -name smp_affinity | xargs cat | less
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.