Pritorius Posted January 23, 2013 Собственно вопрос ни кто не сталкивался со следующей проблемой, при большом ППС проходящем через софт роутер (NAT) на Win2003, Xeon 2 ядра, сетевые интегрированные Бордком НетЭкстрим. Нагрузка идёт на одно ядро, под 100%, второе ядро загружено на 10-20%, но при этом трафик начинает теряться, грубо говоря "отказ в обслуживании", сервер вываливается, вплоть до невозможности зайти терминалом. На втором сервере, абсолютно не специализированном на Коре2Дуо, и PCI сетевых, нагрузка распределяется одинаково по ядрам :))) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted January 23, 2013 Либо это встроенный фаервол/антивирус либо особенности драйвера. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 23, 2013 Поставил последний выпущенный драйвер 2011 вместо OEM от IBM 2009 посмотрим... чего сегодня будет... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 23, 2013 Вот чего нарыл только понять не могу мой ли это случай? Настраиваем RSS в WindowsАббревиатура RSS обычно ассоциируется совсем с другим, нежели с настройкой TCP. Хотя, в общем, это у всех по-разному – кто-то PHP с ходу расшифровывает как Penultimate Hop Popping, а кто-то думает, что КВД – это НКВД без первой буквы. Все люди разные. Мы будем говорить про тот RSS, который Receive Side Scaling Суть технологии RSS достаточно проста – входящий поток данных сетевого уровня разбивается на несколько очередей, обработка каждой из которых (вызов прерываний, копирование информации) производится выделенным виртуальным процессором (т.е. или отдельным физическим, или ядром). То есть в случае наличия нескольких процессоров Вы можете распределить интенсивный сетевой трафик по ним, снизив количество вызовов прерываний, переключений контекста, очистки кэша и прочих неприятностей, которые, если происходят много тысяч раз в секунду, могут ощутимо навредить производительности системы в целом. Суть-то простая, да вот в реализации столько тонкостей, что можно написать отдельную статью. Пока это не является целью, поэтому постараюсь описать оные тонкости сжато и компактно Для начала необходимо, чтобы сетевая карта умела формировать вышеупомянутые очереди, и умела делать это хорошо. По сути, эта задача требует от сетевой карты функционала, отдалённо напоминающего CEF (который Cisco Express Forwarding) – коммутации 3го уровня с определением и разделением отдельных потоков пакетов. Давайте попробуем разобраться на примере, как и зачем это может работать. Допустим, у Вас есть быстрый сетевой адаптер (например, 10Гбит), и по нему к Вам приходит много данных. И эти данные хорошо разделяются на много потоков (например, когда мы ведём вебинары, на каждого слушателя идёт почти по десятку TCP-сессий, а слушателей бывает и 40). По сути, все эти потоки данных выглядят потоками только на транспортном уровне, а на сетевом сливаются в общий поток. Это, в общем, и есть работа протоколов транспортного уровня – мультиплексировать потоки данных от различных приложений на различных хостах. Но от этого нашей принимающей стороне не легче – ведь ей надо из входящего потока сформировать: Отдельные сессии TCP – т.е. для каждой поддерживать session state, буферы данных, состояние cwnd/rwnd, состояние sack’ов и ack’ов вообще Отдельные буферы для каждого фрагментированного IP-пакета Отдельные очереди (ведь трафик может обладать приоритетами) И практически каждое событие во всей этой пачке сессий – это вызов прерывания и его обработка. Крайне затратно, особенно учитывая, допустим, негативный сценарий (10 гигабит поток, ip-пакеты по 1КБ). Можно даже сказать проще – ощутимое количество процентов мощности процессора (весьма дорогого, заметим) уйдёт на решение этих задач тех.обслуживания. Как с этим бороться? Да просто – пусть адаптер формирует отдельные очереди пакетов – тогда на каждую из них можно “привязать” свой процессор/ядро, и нагрузка в плане прерываний и прочего распределится. Но тут нас поджидает неочевидная проблема. Дело в том, что просто так распределить не получится. Т.е. если мы придумаем очень простой критерий распределения (например, две очереди, четные пакеты – налево, нечетные – направо), то у нас может получиться следующая ситуация – у потоков данных часть пакетов попадёт в “четную” очередь, а часть – в “нечетную”. А в этом случае мы потеряем все возможные бонусы, возникающие при обработке непрерывного потока пакетов (обычно эти бонусы выглядят как “первый пакет обрабатываем по-полной, кэшируем все возможные результаты обработки, и все последующие пакеты обрабатываем по аналогии”). Т.е. нам надо всячески избегать ситуации, когда одному процессору придётся, обрабатывая, например, поток очень однотипных мультимедийных пакетов (какой-нибудь RTP например), пытаться “сбегать почитать” в соседнюю очередь. Скажем проще – никуда он вообще бегать тогда не будет, а придётся тогда нам выключать всяческие ускорения обработки TCP/UDP/IP-потоков, потому что работать они будут только в случае ситуации, когда весь поток однотипных пакетов обрабатывается одним ядром/процессором. А это приведёт к тому, что на процессоры придётся переводить вообще всю нагрузку по обработке сетевых данных, что с гарантией “убьёт” даже достаточно мощный CPU. То есть, наша задача-максимум – это распределить входящие данные по нескольким отдельным очередям приёма, да так, чтобы потоки пакетов легли в очереди “целиком”, да и ещё желательно, чтобы заполнились эти очереди равномерно. Тогда мы и распределим нагрузку по процессорным ядрам, и не потеряем другие возможности по ускорению обработки потоков пакетов. Для решения этой задачи нам надо будет действовать сообща – и ОС, и оборудованию. Хороший RSS начинается с сетевой карты. В сетевых картах, которые умеют RSS (а уже понятно, что это не карты минимального уровня), такой функционал есть – например в очень даже недорогой Intel 82576 (в моём случае – встроена в сервер) есть функционал и включения RSS сразу, и выбора количества очередей – 1, 2, 4 или 8. Почему же количество очередей RSS будет выбираться из целочисленных степеней двойки? Тут начинается интересное, что будет роднить логику работы RSS и, допустим, логику балансировки у etherchannel. Примечание: Разные реализации RSS используют разную логику, поэтому тут рассматривается достаточно распространённый вариант Дело в том, что для того, чтобы определить “принадлежность” пакета к потоку, RSS использует следующую логику – берутся несколько ключевых полей пакета – SRC IP, DST IP, код протокола L4, SRC PORT, DST PORT – и от них вычисляется хэш, по последним битам которого (соответственно, для 2х очередей достаточно и одного бита, для 4х – двух, для 8 – трёх) и определяется принадлежность пакета к буферу. Соответственно, пакеты одного протокола, идущие с одного фиксированного порта и IP-адреса на другой адрес и порт, будут формировать поток и попадать в одну очередь. Такой подход достаточно быстр и прост с точки зрения балансировщика, но, как понятно, никак не решает ситуацию “Есть два стула две TCP-сессии – одна 1% канала занимает, другая 99%”. И даже не гарантирует, что обе эти сессии не попадут (с вероятностью 1/2) в одну и ту же очередь, что вообще превратит всю задачу в бессмыслицу. Поэтому, в общем-то, остановимся на следующем факте – если у сетевой карты есть поддержка RSS, то её надо как минимум включить, чтобы первичное разделение входящего трафика на несколько очередей, притом с сохранением потоков, происходило без участия CPU. Ну а вот дальше – уже задача операционной системы – что есть не один, а несколько потоков, и на каждый надо выделить свой процессор или ядро. Это как раз и будет тот самый RSS, который мы будем включать. Он уже будет создавать в драйвере NDIS отдельные очереди и выделять на каждую из них по процессору/ядру. Нововведением в Windows Server 2008 R2 является то, что этим можно управлять – правда, только через реестр. В частности, управлению будут поддаваться 2 параметра – стартовое количество процессорных ядер, выделяемое для всех RSS-очередей на адаптере, и максимальное количество ядер для данной задачи. Параметры эти будут находиться по адресу HKLM\SYSTEM\CurrentControlSet\Control\Class\гуид сетевого адаптера\номер сетевого адаптера\ и называться, соответственно, *RssBaseProcNumber и *MaxRSSProcessors. Примечание: Звёздочка в начале – не опечатка, так и надо вводить. Параметры, как понятно, 32bit DWORD. Примечание: У RSS в Windows Server 2008 R2 есть негативный момент – распределение потоков идёт только между ядрами без HT/SMT. То есть на процессорах с Hyper Threading делите количество доступных ядер пополам. Пример использования данных параметров – допустим, у Вас есть сервер с 16 ядрами (2 процессора по 8 ядер или 4 по 4 – не суть). Есть три сетевых адаптера – один используется для управления системой, два других – для привязки к ним виртуальных машин. Вы можете выставить указанные параметры только у двух интерфейсов, на которых будет подразумеваться высокая нагрузка, притом следующим образом – поставить RssBaseProcNumber равным 2, а MaxRSSProcessors – например, 12. Тогда тот интерфейс, который будет активнее принимать трафик, сможет “отъесть” до 12 ядер системы на обработку очередей, при этом не надо будет жестко задавать этот параметр вручную (это удобно, если нагрузка переместится на другой интерфейс). Безусловно, в этом примере надо, чтобы сетевые адаптеры тоже поддерживали RSS, и, желательно, хотя бы очередей 8. Подводя итоги – RSS – это достаточно практичная и нужная технология, требующая поддержку и со стороны оборудования, и со стороны операционной системы. И становящаяся всё более актуальной, так как на данный момент скорости сетевых интерфейсов растут, равно как и количество процессорных ядер, а, следовательно, старый подход, когда одно ядро “разгребает” единую входящую очередь, становится всё менее эффективным. КАК ВКЛЮЧИТЬ RSS В WINDOWS netsh interface tcp set global rss=enabled Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 23, 2013 (edited) Всё разобрался :((( Бери после этого проф-сервера :(((( Проблема в Броадкомовских сетевых и не у одного меня, решения нет: http://forum.sysinternals.com/hardware-interrupts-high-cpu-windows-server-2003_topic19178.html Вот ради прикола завтра поставлю USB сетевую карту и буду долго смеяться если поможет. Почитал ещё у буржуев, отключил: Interrupt Moderation, вроде как полегче стало. Edited January 23, 2013 by Pritorius Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
martini Posted January 23, 2013 ахренеть.. весь форум о распределении нагрузки по процам в линухе , а тут на те )) Вынь2003 ) Ты бы еще ISA сетевую втулил туда.. Ставь линукс и все будет распределятся. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 23, 2013 ахренеть.. весь форум о распределении нагрузки по процам в линухе , а тут на те )) Вынь2003 ) Ты бы еще ISA сетевую втулил туда.. Ставь линукс и все будет распределятся. Читайте между строк, проблема не в винде, а в сетевых. Вот вам для общего развития: http://www.google.ru/search?hl=ru&newwindow=1&tbo=d&spell=1&q=hardware+interrupt+broadcom&sa=X&ei=q1gAUbDhG9SGswb-n4GwAQ&ved=0CC4QvwUoAA У линуксойдов та же беда. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted January 23, 2013 ахренеть.. весь форум о распределении нагрузки по процам в линухе , а тут на те )) Вынь2003 ) Ты бы еще ISA сетевую втулил туда.. Ставь линукс и все будет распределятся. Читайте между строк, проблема не в винде, а в сетевых. Вот вам для общего развития: http://www.google.ru/search?hl=ru&newwindow=1&tbo=d&spell=1&q=hardware+interrupt+broadcom&sa=X&ei=q1gAUbDhG9SGswb-n4GwAQ&ved=0CC4QvwUoAA У линуксойдов та же беда. Не встречал ситуацию когда в линуксе нельзя было гвоздем прибить сетевку к ядру. По ссылке первые линки - о винде, дальше не читал. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 23, 2013 Зря не читали... там FreeBSD и Linux... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted January 24, 2013 софт роутер (NAT) на Win2003 Какой винтаж. Я уж думал, что в прошлое попал, когда народ любил на венде роутеры строить. Не, я понимаю что раз на винде - значит так надо, но просто сам факт роутера на винде заставляет вспомнить старые срачи топики. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 24, 2013 Тут первое правило программиста работает: работает некуй лезти :) Тем более за столько лет обросло всё своим API билингом. Сервак IBM xSeries тоже пашит как часики, только вот со временем трабл с сетевушками вылез :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 24, 2013 Кстати вопрос кто курил: Двухпортовый интегрированный Gigabit Ethernet (10/100/1000Мбит) Intel® 82579LM и 82574L интересно стало почему на двух разных чипах сделана интегрированная сетевая, и не будет ли с ней траблов как броадкомом :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted January 24, 2013 почему на двух разных чипах сделана интегрированная сетевая Ставим вместо чуть более дорогого чипа чуть более дешевый и можем продавать мамку с 2-мя сетевушками не сильно задирая ее в цене? не будет ли с ней траблов как броадкомом Таки это интел - он всяко получше броадкома. ЕМНИМС меня вроде такие сетевушки стояли на каком-то серваке - тогда все нормально работало, а щас и посмотреть то уже негде и нечего. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 24, 2013 Просто вот этот конструктор заюзать, уж очень корпус мне нравится размером с коммутатор :) Шикарный софтроутер получится на E3 Xeon(е) :) Этот корпус и Супермикро и Депо и Асус юзают. Таки это интел - он всяко получше броадкома. Ого... до недавнего дня у меня было противоположное мнение :)))) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kayot Posted January 24, 2013 А сколько по вашему ядер должен утилизировать NAT? Все ведь верно, на одном интерфейсе тупой роутинг - загрузка 10-20% прерываниями и фаерволом. На втором - NAT, 100% на одно ядро и вылезает. Замена сетевок на аналогичный Intel НЕ ПОМОЖЕТ, да и сетевки броадкомовские далеко не худшие. Поможет установка нескольких карт в team(aka bonding), либо установка карты умеющей RSS(82576 описан вами же выше). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted January 24, 2013 В супермикровских ксеонах, которые идут в таких корпусах, стоит такое: em0@pci0:0:25:0: class=0x020000 card=0x150215d9 chip=0x15028086 rev=0x05 hdr=0x00 vendor = 'Intel Corporation' device = '82579LM Gigabit Network Connection' class = network subclass = ethernet ... em1@pci0:2:0:0: class=0x020000 card=0x000015d9 chip=0x10d38086 rev=0x00 hdr=0x00 vendor = 'Intel Corporation' device = '82574L Gigabit Network Connection' class = network subclass = ethernet Вот тока память туда проблематично найти, чтобы по максимуму набить (8Г без проблем, а вот максимум - уже сложно) :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 24, 2013 В супермикровских ксеонах, которые идут в таких корпусах, стоит такое: em0@pci0:0:25:0: class=0x020000 card=0x150215d9 chip=0x15028086 rev=0x05 hdr=0x00 vendor = 'Intel Corporation' device = '82579LM Gigabit Network Connection' class = network subclass = ethernet ... em1@pci0:2:0:0: class=0x020000 card=0x000015d9 chip=0x10d38086 rev=0x00 hdr=0x00 vendor = 'Intel Corporation' device = '82574L Gigabit Network Connection' class = network subclass = ethernet Вот тока память туда проблематично найти, чтобы по максимуму набить (8Г без проблем, а вот максимум - уже сложно) :( А зачем роутеру память? Я планировал 4 гига... не больше? И то из практики основную память веб-сервер жрёт. А сколько по вашему ядер должен утилизировать NAT? Все ведь верно, на одном интерфейсе тупой роутинг - загрузка 10-20% прерываниями и фаерволом. На втором - NAT, 100% на одно ядро и вылезает. Замена сетевок на аналогичный Intel НЕ ПОМОЖЕТ, да и сетевки броадкомовские далеко не худшие. Поможет установка нескольких карт в team(aka bonding), либо установка карты умеющей RSS(82576 описан вами же выше). Я же написал у меня два пуля в пулю сервера, только один проф ИБМ на броадкомоских, а второй обычная башня с интегрированной Реалтеком и PCI нонейм... нагрузка распределяется на два ядра... а на ИБМ не в какую. Про RSS уже понял, на мои броадкомах его поддержки нет... в любом случае думаю менять сервер. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 24, 2013 Тут всётаки удалось давече сбить температуру у пациента :) Только теперь проблема, где взять файрволл с поддержкой встроенного NAT. Который бы понимал пришёл трафик на NAT для трансляции или на приложения самого сервера. На данный момент оставили сервер без защиты на внешнем интерфейсе :( Зато нагрузка на ядро 5-10 процентов :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
replicant Posted January 24, 2013 Просто вот этот конструктор заюзать, уж очень корпус мне нравится размером с коммутатор :) Шикарный софтроутер получится на E3 Xeon(е) :) Этот корпус и Супермикро и Депо и Асус юзают. Несколько месяцев назад стали брать такие платформы, потому что достало с рельсами возиться у того же Asus. E3-1240v2 прекрасно в таком живет. Сетевку дополнительно доставляем на борт, а в качестве харда бюджетный SSD на 32Гб (работает как флешка для загрузки ОС). Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
replicant Posted January 24, 2013 Вот тока память туда проблематично найти, чтобы по максимуму набить (8Г без проблем, а вот максимум - уже сложно) :( А зачем столько памяти? Я бы вообще 2 Гб ставил, но планки по 1 Гб сложнее найти, чем по 2 Гб, поэтому приходится ставить 4 Гб. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 24, 2013 Просто вот этот конструктор заюзать, уж очень корпус мне нравится размером с коммутатор :) Шикарный софтроутер получится на E3 Xeon(е) :) Этот корпус и Супермикро и Депо и Асус юзают. Несколько месяцев назад стали брать такие платформы, потому что достало с рельсами возиться у того же Asus. E3-1240v2 прекрасно в таком живет. Сетевку дополнительно доставляем на борт, а в качестве харда бюджетный SSD на 32Гб (работает как флешка для загрузки ОС). Дай вам бог здоровья :) Всё ждал отзывов, подскажите где берёте, можно в личку? Зачем ещё сетевую ставите? Для Менеджмента? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
replicant Posted January 24, 2013 (edited) Дай вам бог здоровья :) Всё ждал отзывов, подскажите где берёте, можно в личку? Зачем ещё сетевую ставите? Для Менеджмента? Встроенные говно ибо (они как раз только для менеджмента и слива трафика в коллектор и годятся) ... а мне надо как минимум по 4 очереди поднимать на сетевке, потому что сервак через себя прокидывает 1.5 Гбит в одну сторону и 1 Гбит в другую. Приходится ставить i350T4 или 82576 4-х портовые. Берем ... хм, где найдем, там и берем. Я на днях почти всю "нерезиновую" объехал и три штуки такие купил. Теперь либо за переплату либо 30 дней под заказ ждать, а мне еще таких 4 штуки надо. Нормальная цена за такое изделие в "нерезиновой" около 13 т.р. Больше - переплата. Вот тут последние две забрал http://www.netshopping.ru/vcd-42164-1-66681/goodsinfo.html Edited January 24, 2013 by replicant Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Pritorius Posted January 25, 2013 Дай вам бог здоровья :) Всё ждал отзывов, подскажите где берёте, можно в личку? Зачем ещё сетевую ставите? Для Менеджмента? Нормальная цена за такое изделие в "нерезиновой" около 13 т.р. Больше - переплата. Вот тут последние две забрал http://www.netshopping.ru/vcd-42164-1-66681/goodsinfo.html Это цена я так понимаю без ЦПУ, HDD и Памяти? Сколько выходит набитый? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
replicant Posted January 25, 2013 (edited) Это цена я так понимаю без ЦПУ, HDD и Памяти? Сколько выходит набитый? 8 т.р. за ЦПУ типа E3-1240v2 (для минимального энергопотребления 22нм самое оно) 1.5 т.р. за SSD 32Гб 800 руб. за память DDR3-1600 ECC в планках по 2 Гб Итого: в 25 т.р. легко вписывается (без доп. сетевой). DEPO за такие деньги точно ничего аналогичного собрать в этом корпусе не сможет. Edited January 25, 2013 by replicant Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snark Posted January 25, 2013 зачем роутеру память? А зачем столько памяти? Таки эти ксеоны не вечно будут роутерами мпд серваками ;) Хочется на них и виртуалок наплодить и еще для чего нить заюзать, после того, как они РРРоЕ терминировать перестанут. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...