[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Динамически включать-выключать CPU




2011/9/7 Anton Kovalenko <anton@sw4me.com>
Mikhail Ramendik <mr@ramendik.ru> writes:

>     (Остальное отложим пока)
>     dmesg запостите, если процитированная сессия ещё не померла, плз.

> Прилагается.

Приложить забыли, если не ошибаюсь.  (В логах строки режутся по длине;
кроме того, надеялся увидеть в контексте dmesg, не происходит ли до
этого что-то интересное).

--
Regards, Anton Kovalenko
+7(916)345-34-02 | Elektrostal' MO, Russia

Упс. Прошу прощения. Приложил.

Пока что воюю с IRQ affinity. Нарисовал скрипт-сервис:

#! /bin/sh
# /etc/init.d/irq-affinity

case "$1" in
  start)
    cd /proc/irq
    for i in * ; do
      if [ "$i" != "default_smp_affinity" ] ;then echo 1 >"$i"/smp_affinity ; fi
    done
    echo 1 > default_smp_affinity
    echo "IRQ affinity set to CPU 0"
  ;;
  stop)
    echo "IRQ affinity script stop"
  ;;
  *)
    echo "IRQ affinity script"
    exit 1
esac
exit 0

Прикрутил. Вроде бы работает, после перезагрузки вижу:

# cat /proc/irq/default_smp_affinity
1
# cat /proc/irq/14/smp_affinity
1

Однако...
$ cat /proc/interrupts
            CPU0       CPU1      
   0:         45          1   IO-APIC-edge      timer
   1:          0          2   IO-APIC-edge      i8042
   3:          0          2   IO-APIC-edge   
   4:          0          2   IO-APIC-edge   
   6:          0          2   IO-APIC-edge      floppy
   7:          0          0   IO-APIC-edge      parport0
   8:          0          0   IO-APIC-edge      rtc0
   9:          0          0   IO-APIC-fasteoi   acpi
  12:          0          4   IO-APIC-edge      i8042
  14:          0        906   IO-APIC-edge      pata_sis
  15:          0          0   IO-APIC-edge      pata_sis
  17:          0      12106   IO-APIC-fasteoi   sata_sis
  18:          0       7793   IO-APIC-fasteoi   SiS SI7012, wlan0
  19:          0          0   IO-APIC-fasteoi   saa7133[0], saa7133[0]
  20:          0       3308   IO-APIC-fasteoi   ohci_hcd:usb2
  21:          0        794   IO-APIC-fasteoi   ohci_hcd:usb3
  22:          0          0   IO-APIC-fasteoi   ohci_hcd:usb4
  23:          0          3   IO-APIC-fasteoi   ehci_hcd:usb1
 NMI:          0          0   Non-maskable interrupts
 LOC:      24913      30097   Local timer interrupts
 SPU:          0          0   Spurious interrupts
 PMI:          0          0   Performance monitoring interrupts
 PND:          0          0   Performance pending work
 RES:        744        425   Rescheduling interrupts
 CAL:       5529         41   Function call interrupts
 TLB:       4372       4184   TLB shootdowns
 TRM:          0          0   Thermal event interrupts
 THR:          0          0   Threshold APIC interrupts
 MCE:          0          0   Machine check exceptions
 MCP:          1          1   Machine check polls
 ERR:          1
 MIS:          0

Ну и _почему_ куча прерываний всё равно валится исключительно на CPU1?

Появилась идея что affinity интерпретируется с точностью до наоборот. Проверил:

# echo 2 > /proc/irq/17/smp_affinity

Но счётчик irq 17 продолжил увеличиваться на CPU 1. На CPU 0 остался нуль.

# echo f > /proc/irq/17/smp_affinity

Тот же результат...

Пока оставлю так, но надеюсь всё же узнать, как правильно зажать все прерывания именно на CPU0.

--
Yours, Mikhail Ramendik

Unless explicitly stated, all opinions in my mail are my own and do not reflect the views of any organization

Attachment: dmesg
Description: Binary data


Reply to: