Назад | Перейти на главную страницу

Несбалансированная обработка прерываний в многопроцессорных системах приводит к сбою (uhci_hcd: usb1, ens3)

Я провожу несколько экспериментов в частном облаке на базе OpenNebula. Не уверен, насколько это актуально, но эксперименты являются эталонным тестированием Hyperledger Farbirc. Это сеть блокчейнов, которая запускает тесты с 15 контейнерами, распределенными по 5 рабочим узлам и одному управляющему узлу (тот, о котором мы говорим), который запускает тест. Организация сети и контейнеров осуществляется с помощью docker swarm.

Когда я запускаю тест в частном облаке, процесс под названием Ksoftirqd использует 100% ЦП и приводит к сбою теста. Однако, чтобы убедиться, что проблема не в программном обеспечении или рое докеров и т. Д., Я провел точный эксперимент с очень похожей настройкой на облачных виртуальных машинах Google, и ничего не сломалось, поэтому тест прошел успешно.

top - 06:25:30 up 10 min,  4 users,  load average: 3.03, 0.99, 0.43
Tasks: 253 total,   2 running, 152 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.5 sy,  0.0 ni, 86.7 id,  5.7 wa,  0.0 hi,  6.7 si,  0.2
KiB Mem : 14331012 total, 11549292 free,  1983412 used,   798308 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 12053012 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   54 root      20   0       0      0      0 R  100  0.0   0:16.32 ksoftir+
  221 root      20   0       0      0      0 I  20.8  0.0   0:00.69 kworker+
 9090 root      20   0    8104   2300   1972 D   6.3  0.0   0:01.85 updated+
  520 root       0 -20       0      0      0 I   1.3  0.0   0:00.07 kworker+
 1696 root      20   0 2524388 142968  49000 S   0.7  1.0   0:12.89 dockerd
 7643 root      20   0   14772   3232   2540 S   0.7  0.0   0:00.95 watch
 7666 root      20   0   44480   4368   3576 R   0.7  0.0   0:01.42 top
   95 root      rt   0       0      0      0 S   0.3  0.0   0:00.37 migrati+
 7298 nima      20   0 1442936  83188  26064 S   0.3  0.6   0:07.78 node
 7442 root      20   0  107980   7100   6092 S   0.3  0.0   0:00.07 sshd
 8775 nima      20   0 1547888 218960  26456 S   0.3  1.5   0:24.46 node
    1 root      20   0   78136   9268   6704 S   0.0  0.1   0:12.68 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
    3 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 rcu_gp
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 rcu_par+
    5 root      20   0       0      0      0 I   0.0  0.0   0:00.00 kworker+
    6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker+
    7 root      20   0       0      0      0 I   0.0  0.0   0:00.10 kworker+
    8 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_perc+
    9 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftir+
   10 root      20   0       0      0      0 I   0.0  0.0   0:00.29 rcu_sch+

Глядя на прерывания, я понял, что uhci_hcd:usb1, ens3 который является сетевым интерфейсом, который я использую для обеспечения сети между виртуальными машинами, использует только CPU7.

Every 2.0s: cat /proc/interrupts                                                                                                                                                                                                       caliper-latest1: Sat May  2 06:25:31 2020

           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15
  0:         29          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   IO-APIC   2-edge      timer
  1:          0          0          0          0          0          0          0          9          0          0          0          0          0          0          0          0   IO-APIC   1-edge      i8042
  6:          0          0          0          0          0          0          0          0          0          3          0          0          0          0          0          0   IO-APIC   6-edge      floppy
  8:          0          0          0          0          0          0          0          0          1          0          0          0          0          0          0          0   IO-APIC   8-edge      rtc0
  9:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   IO-APIC   9-fasteoi   acpi
 10:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   IO-APIC  10-fasteoi   virtio1
 11:          0          0          0          0          0        909          0     321335          0          0          0          0          0          0          0          0   IO-APIC  11-fasteoi   uhci_hcd:usb1, ens3
 12:          0          0          0          0          0          0         15          0          0          0          0          0          0          0          0          0   IO-APIC  12-edge      i8042
 14:          0          0          0        260          0          0          0          0          0          0          0          0          0          0        729          0   IO-APIC  14-edge      ata_piix
 15:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   IO-APIC  15-edge      ata_piix
 24:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   PCI-MSI 65536-edge      virtio0-config
 25:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0      40349   PCI-MSI 65537-edge      virtio0-req.0
NMI:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Non-maskable interrupts
LOC:      24949      21841      25547      27193      17287      18251      27781      20564      20127      18850      18684      18947      18961      23488      19858      18301   Local timer interrupts
SPU:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Spurious interrupts
PMI:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Performance monitoring interrupts
IWI:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          1   IRQ work interrupts
RTR:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   APIC ICR read retries
RES:      15499      14382      14482      13364      10644      13499      15352       8655      13473      13083       8528      14588      16648      14164      14177      13493   Rescheduling interrupts
CAL:       5999       5715       7934       4806       4225       4683       4689       3410       5292       5338       9532       5868       2765       7084       3869       2875   Function call interrupts
TLB:       2147       3053       6996       4550       3418       4793       4459       4029       3515       6444       7028       3968       1070       2846       4118       4763   TLB shootdowns
TRM:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Threshold APIC interrupts
DFR:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Deferred Error APIC interrupts
MCE:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Machine check exceptions
MCP:          2          2          2          2          2          2          2          2          2          2          2          2          2          2          2          2   Machine check polls
HYP:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Hypervisor callback interrupts
HRE:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Hyper-V reenlightenment interrupts
HVS:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Hyper-V stimer0 interrupts
ERR:          0
MIS:          0
PIN:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0   Posted-interrupt notification event

и:

root@caliper-latest1:~#  grep . /proc/irq/*/smp_affinity
/proc/irq/0/smp_affinity:ffff
/proc/irq/1/smp_affinity:0100
/proc/irq/10/smp_affinity:0010
/proc/irq/11/smp_affinity:0080
/proc/irq/12/smp_affinity:0002
/proc/irq/13/smp_affinity:ffff
/proc/irq/14/smp_affinity:4000
/proc/irq/15/smp_affinity:0008
/proc/irq/2/smp_affinity:ffff
/proc/irq/24/smp_affinity:0800
/proc/irq/25/smp_affinity:ffff
/proc/irq/3/smp_affinity:ffff
/proc/irq/4/smp_affinity:ffff
/proc/irq/5/smp_affinity:ffff
/proc/irq/6/smp_affinity:0400
/proc/irq/7/smp_affinity:ffff
/proc/irq/8/smp_affinity:1000
/proc/irq/9/smp_affinity:0020

Присмотревшись к файлу / proc / softirqs, я понял, что NET_TX / NET_RX и TASKLET неравномерно распределяются между процессорами и бомбардируют CPU7.

Every 2.0s: cat /proc/softirqs                                                                                                                          caliper-latest1: Sat May  2 06:25:44 2020

                    CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15

          HI:          0          0          0          0          0          0          1          0          0          0          0          0          0          0          0          0
       TIMER:      21656      15833      14169      13228      13466      13059      13383      10565      16011      12679      16139      14041      12160      15680      14883      14232
      NET_TX:         14         15         12         16         20        477        106      79183         19         14         10         17          2         22         13          9
      NET_RX:       8195      11835      12037      12203      12227       9200       6719     116134       6855       6418       7086       8225       5721       7992      12477       8105
       BLOCK:       3646       2950       6351       2031       1354       1851       1814        689       3132       2434       6847       3007        570       4276       1149       1569
    IRQ_POLL:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0          0
     TASKLET:          0          2          0          0          1         24          2        597         14          0          1          1          1          0          0          1
       SCHED:       7943       4241       3528       3305       3152       3138       2759       4318       3789       2955       3730       3298       2532       3483       3660       3383
     HRTIMER:          0          0          0          0          0          0          0          5          0          0          0          0          0          0          0          0
         RCU:      18913      10231      18753      10353      18891       8120      10553      14994      10600       6451      12809       9338       7204       9445      10576      10050

И вот некоторая системная информация:

root@caliper-latest1:~# inxi -Fxz
System:    Host: caliper-latest1 Kernel: 5.3.0-51-generic x86_64
           bits: 64 gcc: 7.5.0
           Console: tty 3 Distro: Ubuntu 18.04.4 LTS
Machine:   Device: kvm System: QEMU product: Standard PC (i440FX + PIIX 1996) v: pc-i440fx-2.8 serial: N/A
           Mobo: N/A model: N/A serial: N/A
           BIOS: SeaBIOS v: 1.10.2-1 date: 04/01/2014
CPU(s):    16 Single core QEMU Virtual version 2.5+s (-SMP-)
           arch: P6 II rev.3 cache: 262144 KB
           flags: (lm nx sse sse2 sse3) bmips: 85119
           clock speeds: max: 2659 MHz 1: 2659 MHz 2: 2659 MHz 3: 2659 MHz
           4: 2659 MHz 5: 2659 MHz 6: 2659 MHz 7: 2659 MHz 8: 2659 MHz
           9: 2659 MHz 10: 2659 MHz 11: 2659 MHz 12: 2659 MHz 13: 2659 MHz
           14: 2659 MHz 15: 2659 MHz 16: 2659 MHz
Graphics:  Card: Cirrus Logic GD 5446 bus-ID: 00:02.0
           Display Server: X.org 1.20.5 driver: cirrus
           tty size: 77x28 Advanced Data: N/A for root out of X
Network:   Card: Realtek RTL-8100/8101L/8139 PCI Fast Ethernet Adapter
           driver: 8139cp v: 1.3 port: c000 bus-ID: 00:03.0
           IF: ens3 state: up speed: 100 Mbps duplex: full mac: <filter>
Drives:    HDD Total Size: 32.2GB (24.1% used)
           ID-1: /dev/vda model: N/A size: 32.2GB
Partition: ID-1: / size: 29G used: 7.3G (26%) fs: ext4 dev: /dev/vda1
RAID:      No RAID devices: /proc/mdstat, md_mod kernel module present
Sensors:   None detected - is lm-sensors installed and configured?
Info:      Processes: 249 Uptime: 15 min Memory: 492.3/13995.1MB
           Init: systemd runlevel: 5 Gcc sys: 7.5.0
           Client: Shell (bash 4.4.201) inxi: 2.3.56

Так что я лично подозреваю, что, возможно, адаптер Realtek RTL-8100 / 8101L / 8139 не поддерживает многоядерность / поток?

Еще один вывод, который может помочь:

$mpstat 1
16:47:18     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
16:47:19     all   79.16    0.00    1.74    0.00    0.00   18.86    0.25    0.00    0.00    0.00
16:47:20     all   77.19    0.00    2.51    0.00    0.00   20.30    0.00    0.00    0.00    0.00
16:47:21     all   79.50    0.00    1.00    0.00    0.00   19.50    0.00    0.00    0.00    0.00
16:47:22     all   90.98    0.00    0.50    0.00    0.00    8.52    0.00    0.00    0.00    0.00
16:47:23     all   91.50    0.00    1.25    0.00    0.00    7.25    0.00    0.00    0.00    0.00
16:47:24     all   90.25    0.00    1.00    0.00    0.00    8.75    0.00    0.00    0.00    0.00
16:47:25     all   89.03    0.00    1.00    0.00    0.00    9.98    0.00    0.00    0.00    0.00
16:47:26     all   79.25    0.00    2.50    0.00    0.00   18.25    0.00    0.00    0.00    0.00
16:47:27     all   78.20    0.00    2.26    0.00    0.00   19.55    0.00    0.00    0.00    0.00
16:47:28     all   79.25    0.00    3.25    0.00    0.00   17.50    0.00    0.00    0.00    0.00
16:47:29     all   80.00    0.00    3.25    0.00    0.00   16.75    0.00    0.00    0.00    0.00
The point where the benchmark crashes
16:47:30     all   78.05    0.00    4.49    0.00    0.00   17.46    0.00    0.00    0.00    0.00
16:47:31     all   81.00    0.00    4.00    0.00    0.00   14.75    0.25    0.00    0.00    0.00
16:47:32     all   80.50    0.00    4.75    0.00    0.00   14.75    0.00    0.00    0.00    0.00
16:47:33     all   81.25    0.00    5.00    0.00    0.00   13.75    0.00    0.00    0.00    0.00
16:47:34     all   81.00    0.00    3.25    0.00    0.00   15.75    0.00    0.00    0.00    0.00
16:47:35     all   79.00    0.00    4.50    0.00    0.00   16.25    0.00    0.00    0.00    0.25
16:47:36     all   74.37    0.00    4.02    0.00    0.00   16.33    0.00    0.00    0.00    5.28
16:47:37     all   66.24    0.00    3.35    0.00    0.00   13.14    0.00    0.00    0.00   17.27
16:47:38     all   44.50    0.00    2.05    0.00    0.00    9.72    0.00    0.00    0.00   43.73
16:47:39     all   11.92    0.00    0.78    0.00    0.00    3.11    0.00    0.00    0.00   84.20
16:47:40     all   11.41    0.00    0.80    0.00    0.00    3.45    0.00    0.00    0.00   84.35
16:47:41     all    9.07    0.00    0.52    0.00    0.00    1.81    0.00    0.00    0.00   88.60
16:47:42     all   20.97    0.00    2.81    0.00    0.00    3.84    0.00    0.00    0.00   72.38
16:47:43     all    6.94    0.00    0.51    0.00    0.00    2.06    0.00    0.00    0.00   90.49