LINUX.ORG.RU
ФорумAdmin

Linux мост


0

3

Здравствуйте, уважаемые Гуру. Помогите пожалуйста решить проблему...

Есть сервер используется в режиме Мост т.е. пропускает через себя трафик и отдает дальше При трафике 2-3 гбит начинаются сильные тормаза, процессор на 100% нагружен. При разборе ситуации выяснилось что всегда нагружено 1 ядро (процессор E5-2680)...

Каким образом можно распределить нагрузку на все ядра? Может кто сталкивался с подобной проблемой? Пожалуйста помогите


Мост али таки шлюз? Какие сетевухи? Как выяснилось что используется одно ядро? Какая версия ОС?

Телепаты в отпуске кагбе.

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

Драйвер: driver: ixgbe version: 3.13.10-k

Linux Gentoo, ядро: 3.10

Как узнал? При нагрузке посмотрел по atop и только одно ядро было на максимум 100% остальные были 0%...

Amazik ()

При разборе ситуации выяснилось что всегда нагружено 1 ядро (процессор E5-2680)...

icqballance надо ставить. В Intel обленились и не делают больше чипсеты, кторые сами все прерывания по всем ядрам раскидывают. Впрочем, для сетевых карт это даже и вредно, говорят, советуют одну очередь на одно ядро вешать. Ну а на современных и невозможно более, чем на одно ядро повесить. Так что, теперь ещё и сетевухи с большим количеством очередей требуются.

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

Телепаты в отпуске кагбе.

Лето кончилось, уже не в отпуске. :-)

Мост али таки шлюз? Какие сетевухи? Какая версия ОС?

по барабану.

Как выяснилось что используется одно ядро?

cat /proc/interrupts

upd: хм, оказывается, выяснилось чуть-чуть не так. :-)

AS ★★★★★ ()
Последнее исправление: AS (всего исправлений: 1 )
Ответ на: комментарий от AS

по барабану.

Не сказал бы. Зависит от правил в файрволле и т.п. если они есть. Бридж при прочих равных быстрее, проверял на 10Гбит сетевухах.

cat /proc/interrupts

Ну точно телепат :)

А так если сетевухи ixgbe, то используй irq affinity. Я в свое время просто наваял скрипт, который распихивает прерывания сетевух по ядрам, может поможет:

 cat /opt/scripts/interrupt_affinity.pl
#!/usr/bin/perl -w

use strict;
use warnings;

my $irq = 77;
my $ifs = 11;
my $queues = 6;
my $skip = 1;
my @tmpl = ("0", "0", "0", "0", "0", "0");

print "Applying IRQ affinity...\n";

for(my $if = 0; $if < $ifs; $if++) {
    for(my $q = 0; $q < $queues; $q++, $irq++) {
        my @tmp = @tmpl;
        $tmp[$q] = 1;
        my $mask = join("", @tmp);

        my $hexmask = bin2hex($mask);
        #print $irq . " -> " . $hexmask . "\n";

        open(OUT, ">/proc/irq/".$irq."/smp_affinity");
        print OUT $hexmask."\n";
        close(OUT);
    }

    $irq += $skip;
}

sub bin2hex {
    my ($bin) = @_;
    return sprintf('%x', oct("0b".scalar(reverse($bin))));
}

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

Не сказал бы.

Так вопрос был про «почему на одном ядре». Тут по барабану. :-)
А дальше - уже тюнинг.

то используй irq affinity.

В общем-то тоже дельно. Я так на часть ядер развесил очереди, как мне надо, а остальное icqballance разруливает (соответственно, ему задано, какие прерывания и ядра не использовать). Но если проблема пока только в одном ядре, то можно всё на откуп icqballance оставить.

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

Это разве не настройками драйвера делается?

Нет. Или руками через /proc/irq/<N>/smp_affinity, или irqbalance (я, в первом сообщении, его неправильно написал аж в двух буквах) это делать будет.

AS ★★★★★ ()

на хаборе на прошлой неделе была статья про оптимизацию подобной конфигурации на примере сети кампуса университета.

Там про влияние и про прерывания и про влияние iptables было.

anonymous ()

Есть 2 метода: либо пытаться распределять прерывания от сетевых карт в мосте по разным ядрам, что помогает в случае отсутствия сложной обработки пакетов, либо настраивать RPS/XPS linux/Documentation/networking/scaling.txt

в тяжелых случаях их применяют вместе.

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

На сколько я понял: 1) Драйвера автоматически создают по одной очереди на ядро... 2) А irq можно распределить с помощью irqbalance Правильно я понимаю?

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

1) Драйвера автоматически создают по одной очереди на ядро...

Нет, количество очередей - свойство чипа сетевой карты. Их ровно столько, сколько там есть. Драйвер может с ними работать уметь, может не уметь. Ещё от драйвера может зависеть, эти очереди смешанные (все Rx/Tx), или половина Rx, половина Tx.

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

Не совсем так. твои 1 и 2 это это первый вариант

А второй вариант это кто будет обрабатывать принятый пакет. После того как пакет принят ( отработано irq на каком-то ядре) его дальнейшая обработка может вестись на любом доступном и свободном ядре. Это и есть RPS/XPS. Очень помогает при длительной обработки пакетов типа шифрования или DPI.

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