LINUX.ORG.RU

Распределение irq: ЭТО нормально?


0

0

Всем привет!

Решил посмотреть как распределены irq у меня в системе:

           CPU0       CPU1       
  0:        126          0   IO-APIC-edge      timer
  1:      16123          0   IO-APIC-edge      i8042
  4:          2          0   IO-APIC-edge    
  7:          0          0   IO-APIC-edge      parport0
  8:          1          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 16:     460792          0   IO-APIC-fasteoi   pata_jmicron, uhci_hcd:usb3, nvidia
 18:      20159          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb7, EMU10K1
 19:     103951          0   IO-APIC-fasteoi   ahci, ata_piix, ata_piix, uhci_hcd:usb6
 20:      10966          0   IO-APIC-fasteoi   ath
 21:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 23:      99919          0   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb5
 28:     131809          0   PCI-MSI-edge      sky2@pci:0000:04:00.0
 29:        243          0   PCI-MSI-edge      hda_intel
NMI:          0          0   Non-maskable interrupts
LOC:    2357069    2347455   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
PND:          0          0   Performance pending work
RES:      38962      51144   Rescheduling interrupts
CAL:       2577       2454   Function call interrupts
TLB:      25613      25906   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:         26         26   Machine check polls
ERR:          1
MIS:          0

Что я вижу:

1) как я понял, у меня практически все прерывания обрабатываются одним процессором.

2) у меня на одном прерывании висят порой до трех устройств.

3) Устройства распределны по-глупому: ath (wifi который используется раз в пятилетку) занимает целый irq, тогда как два SATA винчестера висят на одном.

Посему у меня вопросы:

1) А как у вас?

2) А если два процессора будут обрабатывать irq будет лучше? Как это сделать?

3) Как «вручную» распределить девайсы по irq?

Буду благодарен за такую консультацию.

★★★★★

$ cat /proc/interrupts 
           CPU0       
  0:       1004   IO-APIC-edge      timer
  1:     136126   IO-APIC-edge      i8042
  7:          1   IO-APIC-edge    
  8:        106   IO-APIC-edge      rtc0
  9:       1120   IO-APIC-fasteoi   acpi
 12:    3259980   IO-APIC-edge      i8042
 14:          0   IO-APIC-edge      ide0
 16:    1288341   IO-APIC-fasteoi   ehci_hcd:usb2, ohci_hcd:usb4
 17:         45   IO-APIC-fasteoi   ehci_hcd:usb1, ohci_hcd:usb3
 19:    1104301   IO-APIC-fasteoi   nouveau
 20:    4151204   IO-APIC-fasteoi   hda_intel
 23:          0   IO-APIC-fasteoi   ath
 25:     871439   PCI-MSI-edge      ahci
 26:    5443097   PCI-MSI-edge      eth0
NMI:          0   Non-maskable interrupts
LOC:   35436378   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
PND:          0   Performance pending work
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:        547   Machine check polls
ERR:          1
MIS:          0
anon_666 ()

>А если два процессора будут обрабатывать

то начнутся дикие race conditions и тормоза.

anon_666 ()
           CPU0       CPU1       CPU2       CPU3       
  0:        349        181        106        544   IO-APIC-edge      timer
  1:          1          0          1          0   IO-APIC-edge      i8042
  8:          0          1          0          0   IO-APIC-edge      rtc0
  9:          0          0          0          0   IO-APIC-fasteoi   acpi
 12:          1          0          1          2   IO-APIC-edge      i8042
 16:      67169       7835      18243     962399   IO-APIC-fasteoi   uhci_hcd:usb3, eth2, nvidia
 18:          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
 19:    1539777     762883   26424297   13934690   IO-APIC-fasteoi   uhci_hcd:usb7
 21:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 23:    3042570     930751     808056     165583   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb6
 43:        933        983    1166989    1003071   PCI-MSI-edge      ahci
 44:         30   16249497         37         31   PCI-MSI-edge      eth1
 45:   12072350    1789883     777062     162276   PCI-MSI-edge      hda_intel
NMI:          0          0          0          0   Non-maskable interrupts
LOC:   59872480   54280684   54946026   51496569   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:          0          0          0          0   Performance monitoring interrupts
PND:          0          0          0          0   Performance pending work
RES:    2385616    2512113    1909677    1955648   Rescheduling interrupts
CAL:     975637     527748     428160     385039   Function call interrupts
TLB:    3381480    3015581    2896464    2721187   TLB shootdowns
TRM:          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0   Threshold APIC interrupts
MCE:          0          0          0          0   Machine check exceptions
MCP:       1138       1138       1138       1138   Machine check polls
ERR:          3
MIS:          0
ahonimous ()
Ответ на: комментарий от megabaks

а. да - забыл

netbook megabaks # cat /proc/interrupts 
           CPU0       CPU1       
  0:     553244          0   IO-APIC-edge      timer
  1:       5947          0   IO-APIC-edge      i8042
  7:          9          0   IO-APIC-edge    
  9:      22741          0   IO-APIC-fasteoi   acpi
 12:     350627          0   IO-APIC-edge      i8042
 16:      52222          0   IO-APIC-fasteoi   i915, uhci_hcd:usb5
 18:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 19:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
 23:      23148          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 24:          0          0   PCI-MSI-edge      PCIe PME
 25:          0          0   PCI-MSI-edge      PCIe PME
 26:      16722          0   PCI-MSI-edge      ahci
 27:          0          0   PCI-MSI-edge      eth0
 28:        869          0   PCI-MSI-edge      hda_intel
 29:     214864          0   PCI-MSI-edge      iwlagn
NMI:          0          0   Non-maskable interrupts
LOC:     272937     524836   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
PND:          0          0   Performance pending work
RES:      63873      77539   Rescheduling interrupts
CAL:       1482       1671   Function call interrupts
TLB:      54736      54335   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:         13         13   Machine check polls
ERR:         10
MIS:          0

megabaks ★★★★ ()

1. Сколько прерываний сидят на одном IRQ, не важно. Важно, сколько времени проводит процессор при обработке прерывания. А у вас, пардон, в Local timer interrupts времени потрачено в 2 раза больше, чем в обработке всех остальных прерываний вместе взятых :-)

2. Обработчики прерываний давно уже все reentrant, то есть если одна нить зашла в него, второй нити зайти в него это не помешает. Это не MS-DOS, и не ядро 1.2, где всё ядро было одним Big Kernel Lock

3. Практически все устройства давно работают с очередями команд и активно используют DMA, так что код обработчика прерывания занимает ничтожно мало времени - отметить завершение задания, сдвинуть очередь, послать следующую команду, выйти

Так что забейте. На 386 с винтами в PIO и сетевушками NE2000 ISA это было критично. Сейчас - нет.

Nastishka ★★★★ ()
Ответ на: комментарий от Nastishka

А как сделать чтобы IRQ обрабатывались обоими процессорами?

P. S. Сейчас у меня вот так:

# cat /proc/irq/default_smp_affinity 
3

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

Самое забавное:

Когда делаю echo 1 > /proc/irq/28/smp_affinity задействуется только первый процессор.

Когда делаю echo 2 > /proc/irq/28/smp_affinity задействуется только второй процессор.

Когда делаю echo 3 > /proc/irq/28/smp_affinity задействуется опять только первый процессор.

Почему?

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

мне кажется зря вы этим занимаетесь, число обработаных irq у вас очень малое, имеет смысл раскидывать на разные ядра разные irq, от разных сетевых карт, жестких дисков , этим занимается irqbalance

аффинити задавать можете как уодно, все равно одновременно irq будут обработаны только одним ядром, опять таки irqbalance поможет балансировать между ядрами в зависимости от нагрузки.

какая роль вашего компьютера? для десктопа не имеет большого смысла заниматься распределением, почему - вам уже обьяснили

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

Sylvia

У меня desktop и на нем есть две проблемы, которые не дают мне покоя.

Первая - у меня периодически зависает комп и из-за чего - непонятно. В соседней ветке я уже поднимал эту тему, но четкого решения пока нет. Подозрения на видюху и на жесткий диск. А тут по IRQ оказыаюется, что они висят на одном прерывании. Я хочу копнуть туда.

Вторая проблема (которую я пока RTFMлю сам) - большая загрузка процессора при дисковых операциях. Например, при банальном забивании с помощью dd файла из /dev/zero , средняя нагрузка проца составляет 130% (то есть, например, первое ядро загружено на 80%, второе на 50% или первое на 100%, второе на 30% и т. п.). Я не верю, что с новомодными DMA, NCQ и т. п. это нормальная ситуация.

Поскольку наводящие вопросы кончились, я выслеживаю любые аномальные ситуации на компьютере, авось найду то, что решит мои проблемы.

Еще одной причиной является любознательность, которая, думается, свойствена большинству LORовцев. Так давайте разберемся вместе!

Что может быть причиной того, что у, скажем, ahonimous нагрузка по прерываниям равномерно ложится на четыре проца, а у меня только на один из двух?

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

>меня периодически зависает комп

большая загрузка процессора при дисковых операциях


Это у вас, очевидно, с чипсетом косяки, тут переназначать прерывания - как мёртвому припарка.

средняя нагрузка проца составляет 130%

Фактически не работает dma, но на sata dma не отключаемо, значит это аппаратный баг. Если irq разбосать по всем ядрам - то вы получите все 200%.

Под вендой таких проблем нет? Если нет - очевидно ядро не дружит с вашим дисковым контроллером пишите багрепорт.

anon_666 ()
Ответ на: комментарий от Kroz

>они висят на одном прерывании
Как выше сказано - linux != dos.

anon_666 ()
Ответ на: комментарий от Kroz

>нормальная ситуация
Норма - 1-2% cpu при любых дисковых операциях.

anon_666 ()
Ответ на: комментарий от Kroz

>любые аномальные ситуации на компьютере
Меняйте материнку, винты, хренли искать.

anon_666 ()
Ответ на: комментарий от Kroz

>desktop

тогда оставили бы вы эту темы с раскидыванием irq

у меня периодически зависает комп и из-за чего - непонятно


не из за irq, скорее всего какой-то кривой драйвер или acpi, обычное больное место
попробуйте acpi=off добавить в параметры ядра и сравнить как будет
(acpi=ht , если у вас процессор с HT)

Подозрения на видюху


вполне возможно что это видео драйвер, у меня периодически зависает ноут, ati драйвер и mesa с git'a , как откачу до стабильного снапшота так перестает зависать

А тут по IRQ оказыаюется, что они висят на одном прерывании


может быть, но решается это в bugzilla.kernel.org
для начала посмотрите какие проблемы у тех у кого похожий чипсет

средняя нагрузка проца составляет 130%

IO wait ? Опять таки стоит посмотреть что у других на том же железе, попробовать разные планировщики, я тут с NCQ обновила ядро до 34.1 и ... тормозит ужасно, было лучше, вернулась на CFQ

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

PS:

$dd if=/dev/zero of=filetest
^C2575171+0 records in
2575171+0 records out
1318487552 bytes (1.3 GB) copied, 20.7208 s, 63.6 MB/s

Cpu0 : 4.7%us, 29.2%sy, 0.0%ni, 7.0%id, 59.1%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 2.3%us, 4.0%sy, 0.0%ni, 85.0%id, 7.6%wa, 0.0%hi, 1.0%si, 0.0%st


dd 35%

2258 sylvia 20 0 5636 564 476 S 35 0.0 0:06.81 dd if=/dev/zero of=filetest

тоже высокая нагрузка за счет iowait

чипсет NVidia 630i , AHCI

Sylvia ★★★★★ ()

У моего знакомого была ситуация - под линуксом тормозили дисковые операции, венда висла, перед этим посыпался жд. Оказалось - окислились контакты на sata разъёме. Почистил - всё заработало.

anon_666 ()

[code] cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 0: 1725148079 0 0 0 0 0 0 0 IO-APIC-edge timer 1: 2 0 0 0 0 0 0 0 IO-APIC-edge i8042 6: 5 0 0 0 0 0 0 0 IO-APIC-edge floppy 8: 1 0 0 0 0 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 0 0 0 0 IO-APIC-level acpi 12: 115 71 0 0 0 0 0 0 IO-APIC-edge i8042 50: 29 0 99 190 0 0 0 0 IO-APIC-level uhci_hcd:usb4 58: 13472 0 72302276 0 0 0 3219209 0 IO-APIC-level uhci_hcd:usb7, ata_piix, ata_piix 66: 412 0 0 0 0 0 0 25375026 PCI-MSI eth0 74: 207 0 0 0 0 0 0 0 IO-APIC-level HDA Intel 169: 36 2213216 0 0 0 0 0 0 IO-APIC-level uhci_hcd:usb3, uhci_hcd:usb9, ahci 225: 43 1 0 0 0 0 0 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8 233: 2 0 0 0 0 0 0 0 IO-APIC-level ehci_hcd:usb2, uhci_hcd:usb6 NMI: 258174 137248 189669 148062 255724 146964 196311 150609 LOC: 1725148018 1725147946 1725147874 1725147803 1725147701 1725147658 1725147587 1725147516 ERR: 0 MIS: 0 [/code]

запущен irqbalance

anonymous ()
Ответ на: комментарий от anonymous
cat /proc/interrupts 
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0: 1725148079          0          0          0          0          0          0          0    IO-APIC-edge  timer
  1:          2          0          0          0          0          0          0          0    IO-APIC-edge  i8042
  6:          5          0          0          0          0          0          0          0    IO-APIC-edge  floppy
  8:          1          0          0          0          0          0          0          0    IO-APIC-edge  rtc
  9:          0          0          0          0          0          0          0          0   IO-APIC-level  acpi
 12:        115         71          0          0          0          0          0          0    IO-APIC-edge  i8042
 50:         29          0         99        190          0          0          0          0   IO-APIC-level  uhci_hcd:usb4
 58:      13472          0   72302276          0          0          0    3219209          0   IO-APIC-level  uhci_hcd:usb7, ata_piix, ata_piix
 66:        412          0          0          0          0          0          0   25375026         PCI-MSI  eth0
 74:        207          0          0          0          0          0          0          0   IO-APIC-level  HDA Intel
169:         36    2213216          0          0          0          0          0          0   IO-APIC-level  uhci_hcd:usb3, uhci_hcd:usb9, ahci
225:         43          1          0          0          0          0          0          0   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
233:          2          0          0          0          0          0          0          0   IO-APIC-level  ehci_hcd:usb2, uhci_hcd:usb6
NMI:     258174     137248     189669     148062     255724     146964     196311     150609 
LOC: 1725148018 1725147946 1725147874 1725147803 1725147701 1725147658 1725147587 1725147516 

irqbalance запущен

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.