nsa2006 Posted October 22, 2012 (edited) Железо: Product Name: PowerEdge R210 CPU: model name: Intel® Xeon® CPU X3430 @ 2.40GHz cpu0: [Package #0, Core #0] same package as 0-3 L1 Data: 32K 8-way with 64 byte lines L1 Instruction: 32K 4-way with 64 byte lines L2 Unified: 256K 8-way with 64 byte lines L3 Unified: 8192K 16-way with 64 byte lines [shared with 0-3] cpu1: [Package #0, Core #1] same package as 0-3 L1 Data: 32K 8-way with 64 byte lines L1 Instruction: 32K 4-way with 64 byte lines L2 Unified: 256K 8-way with 64 byte lines L3 Unified: 8192K 16-way with 64 byte lines [shared with 0-3] cpu2: [Package #0, Core #2] same package as 0-3 L1 Data: 32K 8-way with 64 byte lines L1 Instruction: 32K 4-way with 64 byte lines L2 Unified: 256K 8-way with 64 byte lines L3 Unified: 8192K 16-way with 64 byte lines [shared with 0-3] cpu3: [Package #0, Core #3] same package as 0-3 L1 Data: 32K 8-way with 64 byte lines L1 Instruction: 32K 4-way with 64 byte lines L2 Unified: 256K 8-way with 64 byte lines L3 Unified: 8192K 16-way with 64 byte lines [shared with 0-3] Установленный Debian Squeeze 6.0.6, с нативным ядром. uname -a Linux 2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 GNU/Linux Смотрю прерывания: cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 3260 0 0 0 IO-APIC-edge timer 8: 1 0 0 0 IO-APIC-edge rtc0 9: 0 0 0 0 IO-APIC-fasteoi acpi 20: 22217465 0 0 0 IO-APIC-fasteoi ata_piix 21: 0 0 0 0 IO-APIC-fasteoi ata_piix 22: 93 0 0 0 IO-APIC-fasteoi ehci_hcd:usb1, ehci_hcd:usb2 Попытка прибить прерывание вручную к 2 или 4 ядрам, ни к чему не приводит, начинает обрабатываться 0 ядром, прибить прерывание к 1 из 4 ядер работает. irqbalance в рассмотрение не беру. Почему прерывания сидят на первом ядре, и не расползаются по остальным? Установка ядра старших версий ни к чему не приводит, может какие то опции нужно включить? Понятно что эта тема уже не однократно поднималась, но все же может кто знает решение? Edited October 22, 2012 by nsa2006 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted October 22, 2012 Почему прерывания сидят на первом ядре, и не расползаются по остальным? А накой им расползаться? Все равно, пока обработка прерывания не окончится, новое прерывание того же вектора не обработается ни на одном из ядер. А скачки одного и того же прерывания по ядрам будут сопровождаться cache miss'ами. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nsa2006 Posted October 22, 2012 Читал здесь! https://cs.uwaterloo.ca/~brecht/servers/apic/SMP-affinity.txt Тот же timer и aic7xxx распределяются на 4 ядра, судя по ссылке. В моем случае timer м ata_piix сидят на 0 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted October 23, 2012 Таймер, в зависимости от реализации в железе может быть как общим для всех ядрер так и для каждого ядра свой. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted October 23, 2012 Тот же timer и aic7xxx распределяются на 4 ядра, судя по ссылке. Повторюсь: не распределяются, а скачут. Что приводит к падению производительности при их обработке, особенно - если большое кол-во прерываний (cache miss, ожидание подгрузки кода из медленной памяти...). Ибо пока обработка прерывания не окончится, по новой оно обрабатываться не будет ни тем же ядром, ни другими ядрами. Учите матчасть, ну или хотя бы внимательно читайте, что вам пишут. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nsa2006 Posted October 23, 2012 Повторюсь: не распределяются, а скачут. Ладно пусть скачут, но как это реализовать на практике, под словом распределяется не хотел сказать что одновременно используются 4 ядра. Хотел понять почему так, и как лучше что бы более симметрично происходила загрузка ядер а не иначе. Из других источников находил вот к примеру: http://centos.alt.ru/?p=26 http://www.gentoo.ru/content/stradaniya-po-irq Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alex_001 Posted October 23, 2012 Повторюсь: не распределяются, а скачут. Ладно пусть скачут, но как это реализовать на практике, под словом распределяется не хотел сказать что одновременно используются 4 ядра. Хотел понять почему так, и как лучше что бы более симметрично происходила загрузка ядер а не иначе. Из других источников находил вот к примеру: http://centos.alt.ru/?p=26 http://www.gentoo.ru/content/stradaniya-po-irq 1. Оставить как есть , включить RPS. 2. Если позволяет драйвер сетевой создать несколько очередей . Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nsa2006 Posted October 23, 2012 1. Оставить как есть , включить RPS. 2. Если позволяет драйвер сетевой создать несколько очередей . Я это не имел ввиду, с этими прерываниями и очередями разобрался. Интересовало другое, прерывание от того же ata_piix или ahci работающее на 0 ядре, и не скачущее по ядрам, дает перекос. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alex_001 Posted October 23, 2012 1. Оставить как есть , включить RPS. 2. Если позволяет драйвер сетевой создать несколько очередей . Я это не имел ввиду, с этими прерываниями и очередями разобрался. Интересовало другое, прерывание от того же ata_piix или ahci работающее на 0 ядре, и не скачущее по ядрам, дает перекос. А как выглядит у вас alex001 src # dmesg |grep -i APIC [ 0.000000] ACPI: APIC 00000000bfd63f18 0006C (v02 INTEL DG43NB 06222004 MSFT 00010013) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled) [ 0.000000] ACPI: IOAPIC (id[0x00] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 0, version 32, address 0xfec00000, GSI 0-23 [ 0.006387] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.272793] ACPI: Using IOAPIC for interrupt routing (это для системы где прерывания распределяются нормально). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted October 23, 2012 но как это реализовать на практике Не пойму, зачем? Вам что, хочется искусственно затормозить слишком резвую систему? :) Или, может, не нравится, что ядра уходят "в спячку", снизжая частоту и потребление, и вы таким странным образом собираетесь их все загрузить? Или просто "синдром начальника" - неймется, когда кто-то без дела слоняется, охота всех занять даже в ущерб эффективности? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pasha_49 Posted October 25, 2012 Подскажите пожалуйста, как лучше настроить прерывания? Емеется сетевая карта intel 82574, с двумя очередями. Основная нагрузка - исходящий мультикаст трафик(как я понял, RPS для исходящего не нужен). Лучше каждую очередь повесить на своё ядро, или распределить равномерно по всем ядрам? (4-x ядерный intel core i5 2500). И нормальная ли это нагрузка в powertop? 50,7% (11032,2) <interrupt> : eth0-tx-0 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nsa2006 Posted October 26, 2012 А как выглядит у вас alex001 src # dmesg |grep -i APIC [ 0.000000] ACPI: APIC 00000000bfd63f18 0006C (v02 INTEL DG43NB 06222004 MSFT 00010013) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled) [ 0.000000] ACPI: IOAPIC (id[0x00] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 0, version 32, address 0xfec00000, GSI 0-23 [ 0.006387] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.272793] ACPI: Using IOAPIC for interrupt routing (это для системы где прерывания распределяются нормально). У меня dmesg |grep -i APIC [ 0.000000] ACPI: APIC 00000000cd12c758 00072 (v03 ALASKA A M I 01072009 AMI 00010013) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x04] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x06] enabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 [ 0.014452] Setting APIC routing to flat [ 0.014775] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.506800] ACPI: Using IOAPIC for interrupt routing Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted October 27, 2012 Странно, что никто не сказал. Я всегда считал, что прибивать IDE/SATA/SAS прерывания бесполезно, смысла мало. Вы профайлер гоняли? Есть ли там существенное количество cache misses? Взгляните в т.ч. на: http://www.mjmwired.net/kernel/Documentation/block/queue-sysfs.txt ключевое слово: rq_affinity Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...