<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: TCP accept() не масштабируется под SMP на Linux и BSD</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html</link>
    <description>Есть, что называется, single packet workload, когда HTTP-сервер клиентам отдает данные, которые умещаются в один пакет. С целью выжать максимум пишется собственный HTTP-сервер на базе асинхронной модели (используя epoll/kqueue).&lt;br&gt;&lt;br&gt;Тестирование ведется на стенде из двух серверов на Intel платформе (quad core xeon 2.4 ghz / 4 gb / 2 x 1 gbps). Сервер работает на одной машине, а тестирущий клиент на другой. Тестируется связь, как через свич, так и напрямую, через кабель соединяющий два порта.&lt;br&gt;&lt;br&gt;При обработке соединений сервером, когда accept делается одним серверным потоком производительность примерно 32 000 обработанных соединений в секунду. Когда accept делается четырьмя серверными потоками с мутексами или без - производительность та же.&lt;br&gt;&lt;br&gt;Проблема, вероятно, в сериализации accept(). Хотя может быть и в другом - тюнинг параметров TCP не помог :)&lt;br&gt;&lt;br&gt;CPU при 2000 одновременных коннектах на сервере грузятся примерно вот так:&lt;br&gt;------------------------------------------------------------------------------&lt;br&gt;top -</description>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (NuINu)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#7</link>
    <pubDate>Fri, 17 Oct 2008 11:26:50 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;При больших пакетах трафик вырос с 88 до 90 мегабайт в &lt;br&gt;&amp;gt;секунду - едва заметное улучшение. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Скорость передачи пакетов в любом случае около 170000 пакетов в секунду, что &lt;br&gt;&amp;gt;для гигабитного линка мало, если используются небольшие пакеты. Пакетная скорость для &lt;br&gt;&amp;gt;небольших пакетов для гигабитного езернета должна быть, как минимум в несколько &lt;br&gt;&amp;gt;раз выше. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Кажется, что даже когда отсылается небольшой TCP-пакет, то драйвер заворачивает его внутрь &lt;br&gt;&amp;gt;неоостветственно большего ethernet-пакета. Каким хитрым способом подебагить raw ethernet? :) &lt;br&gt;&lt;br&gt;возмьите свитч гигабитный, и настройте на нем порт мироринг. подсоедините еще одну линуху и тспдамп-ом.&lt;br&gt;</description>
</item>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (Advanced User)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#6</link>
    <pubDate>Fri, 17 Oct 2008 11:13:53 GMT</pubDate>
    <description>Проблема судя по всему не в акцепте и не в стеке TCP, а в ethernet frame rate.&lt;br&gt;&lt;br&gt;Я пробовал различные настройки, которые оптимизированя для гигабитного езернета (включая различные режимы прерываний).&lt;br&gt;&lt;br&gt;Несмотря на любой тюнинг на сейчас - это не особо не помогло. При больших пакетах трафик вырос с 88 до 90 мегабайт в секунду - едва заметное улучшение.&lt;br&gt;&lt;br&gt;Скорость передачи пакетов в любом случае около 170000 пакетов в секунду, что для гигабитного линка мало, если используются небольшие пакеты. Пакетная скорость для небольших пакетов для гигабитного езернета должна быть, как минимум в несколько раз выше.&lt;br&gt;&lt;br&gt;Кажется, что даже когда отсылается небольшой TCP-пакет, то драйвер заворачивает его внутрь неоостветственно большего ethernet-пакета. Каким хитрым способом подебагить raw ethernet? :)&lt;br&gt;</description>
</item>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (int_0dh)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#5</link>
    <pubDate>Fri, 17 Oct 2008 07:56:47 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;связь, как через свич, так и напрямую, через кабель соединяющий два &lt;br&gt;&amp;gt;порта. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;При обработке соединений сервером, когда accept делается одним серверным потоком производительность примерно &lt;br&gt;&amp;gt;32 000 обработанных соединений в секунду. Когда accept делается четырьмя серверными &lt;br&gt;&amp;gt;потоками с мутексами или без - производительность та же. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Проблема, вероятно, в сериализации accept(). Хотя может быть и в другом - &lt;br&gt;&amp;gt;тюнинг параметров TCP не помог :) &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;а почему вы решили что параллельный вызов accept() из &lt;br&gt;разных потоков решит проблему ? сокет-то один - и &lt;br&gt;очередь входящих соединений у него тоже одна..&lt;br&gt;</description>
</item>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (NuINu)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#4</link>
    <pubDate>Fri, 17 Oct 2008 06:23:49 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;При 1 гигабите получается около 170000 пакетов в секунду, &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;что эквивалентно 34000 полных соединений в секунду. &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;Вопрос в том, что такой пэкетрэйт для 1 gige должен &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;быть для пакетов размером около 1560 байт. &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;В теории с меньшими пакетами должен быть больший &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;пэкетрэйт. Вопрос теперь в том, как уже с этим бороться :) &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;нашел на опененте подборку: http://www.opennet.ru/links/sml/91.shtml &lt;br&gt;&lt;br&gt;вот еще по тюнигу, а то там все старое&lt;br&gt;http://xgu.ru/wiki/TCP_tuning&lt;br&gt;</description>
</item>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (NuINu)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#3</link>
    <pubDate>Fri, 17 Oct 2008 06:05:47 GMT</pubDate>
    <description>&amp;gt;&amp;gt;Судя по всему дело в packet rate сетевой карты. &lt;br&gt;&amp;gt;&amp;gt;При 1 гигабите получается около 170000 пакетов в секунду, &lt;br&gt;&amp;gt;&amp;gt;что эквивалентно 34000 полных соединений в секунду. &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;Вопрос в том, что такой пэкетрэйт для 1 gige должен &lt;br&gt;&amp;gt;&amp;gt;быть для пакетов размером около 1560 байт. &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;В теории с меньшими пакетами должен быть больший &lt;br&gt;&amp;gt;&amp;gt;пэкетрэйт. Вопрос теперь в том, как уже с этим бороться :) &lt;br&gt;&lt;br&gt;нашел на опененте подборку: http://www.opennet.ru/links/sml/91.shtml&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (NuINu)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#2</link>
    <pubDate>Fri, 17 Oct 2008 05:53:29 GMT</pubDate>
    <description>&amp;gt;Судя по всему дело в packet rate сетевой карты. &lt;br&gt;&amp;gt;При 1 гигабите получается около 170000 пакетов в секунду, &lt;br&gt;&amp;gt;что эквивалентно 34000 полных соединений в секунду. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Вопрос в том, что такой пэкетрэйт для 1 gige должен &lt;br&gt;&amp;gt;быть для пакетов размером около 1560 байт. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;В теории с меньшими пакетами должен быть больший &lt;br&gt;&amp;gt;пэкетрэйт. Вопрос теперь в том, как уже с этим бороться :) &lt;br&gt;&lt;br&gt;так ты чего вместо 32тыщ хочешь 34 получить? :)&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>TCP accept() не масштабируется под SMP на Linux и BSD (Advanced User)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/7651.html#1</link>
    <pubDate>Fri, 17 Oct 2008 00:56:11 GMT</pubDate>
    <description>Судя по всему дело в packet rate сетевой карты.&lt;br&gt;При 1 гигабите получается около 170000 пакетов в секунду,&lt;br&gt;что эквивалентно 34000 полных соединений в секунду.&lt;br&gt;&lt;br&gt;Вопрос в том, что такой пэкетрэйт для 1 gige должен&lt;br&gt;быть для пакетов размером около 1560 байт.&lt;br&gt;&lt;br&gt;В теории с меньшими пакетами должен быть больший&lt;br&gt;пэкетрэйт. Вопрос теперь в том, как уже с этим бороться :)&lt;br&gt;</description>
</item>

</channel>
</rss>
