IVB Опубликовано 17 ноября, 2014 · Жалоба Доброго времени суток, господа и дамы. Столкнулся с непонятной проблемой. Прочесть 44 страницы в теме "Linux softrouter" за разумный период времени невозможно, а быстрый поиск в ней ничего не дал - поэтому решил задать вопрос в отдельной теме. Имеем 4-хядерный Intel Xeon E3-1220, имеем 10G сетевушку Intel 82599ES, имеем Gentoo на ядре 3.10.17. В системе есть и другие сетевушки, но трафик там несущественный, поэтому (как показала практика) тем трафиком можно пренебречь. Сетевушка позволяет распределять прерывания (совмещенные - Tx и Rx) по 64 очередям. В нашем случае очереди распределяются по 4-м прерываниям, каждое из которых "прибито" к своему ядру: 1-я очередь - к CPU0, 2-я - к CPU1, и т.д. Сначала картинка была идеальной - графики загрузки всех 4-х CPU шли практически "точка в точку". Но в один не очень прекрасный момент времени загрузка CPU0 стала превышать загрузку каждого из остальных процессоров примерно в 3 раза. Это произошло довольно давно, поэтому связать произошедшее с какими-либо нашими действиями не представляется возможным. А обратили внимание на это недавно, когда загрузка CPU0 в пиках стала достигать 100% - в эти периоды нагрузка на остальные процы резко падает, и общая пропускная способность сервера заметно снижается. Сначала я грешил на остальные сетевушки (4 Intel 82576, собранные в bond), т.к. на них распределение по очередям практически не сказывается - почти все прерывания попадают в первую очередь, на остальные очереди приходится менее 0.1%. Чтобы разгрузить CPU0, который, как мне казалось, перегружен из-за 82576, я перенастроил 82599ES на 3 очереди вместо четырех, и привязал каждую из 3-х очередей к процессорам от 1 до 3, исключив таким образом CPU0 из обработки прерываний от этой сетевушки. Но, как показала практика, я ошибался. Загрузка CPU0 была вызвана именно обработкой прерываний от 10G сетевушки (точнее, прерываний 1-й очереди), т.к. теперь CPU0 загружен на 1%, а CPU1 (обрабатывающий 1-ю очередь) загружен в 3 с лишним раза больше, чем CPU2 и CPU3. И вот теперь, собственно, вопрос: можно ли что-то сделать, чтобы равномерно распределить прерывания по очередям? Или единственный выход в нашей ситуации - замена 4-хядерного проца на 8-миядерный? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 17 ноября, 2014 · Жалоба Какой тип трафика у вас? Есть ли q-in-q, pppoe? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wheely Опубликовано 17 ноября, 2014 · Жалоба В системе есть и другие сетевушки, но трафик там несущественный, поэтому (как показала практика) тем трафиком можно пренебречь. Нельзя пренебречь. Для сетевушек разные маршруты? На всех сетевухах висят айпишники из одной подсети или из разных (с необходимостью создания n числа "дефолтных" маршрутов для каждой сетевухи)? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
IVB Опубликовано 17 ноября, 2014 · Жалоба Какой тип трафика у вас? Есть ли q-in-q, pppoe? Сервер - софт-роутер (пограничный маршрутизатор). Q-in-Q есть, PPPoE нету. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 17 ноября, 2014 (изменено) · Жалоба Сервер - софт-роутер. Q-in-Q есть, PPPoE нету. RSS не работает для PPPoE (и не будет). Для Q-in-Q в чипе заложено пару функций, но в текущем драйвере ixgbe разрабы это не добавили и поэтому RSS тоже не работает. Нужно включить биты IXGBE_DMATXCTL_GDV и IXGBE_CTRL_EXT_EXTENDED_VLAN в регистрах согласно даташиту. Тут http://sourceforge.net/p/e1000/mailman/message/31896025/ Steve O'Brien писал, что у него вроде заработало. У меня тоже такая проблема возникла, в бою пока не тестировал, в ближайшее время скорее всего будет возможность проверить. А разрабы очень ленивые какие-то - много чего не добавили в драйвер, хотя может очень тщательно все тестируют, но в документации по драйверу все равно нету информации по этим вопросам. Изменено 17 ноября, 2014 пользователем alexmern Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
IVB Опубликовано 17 ноября, 2014 · Жалоба В системе есть и другие сетевушки, но трафик там несущественный, поэтому (как показала практика) тем трафиком можно пренебречь. Нельзя пренебречь. Для сетевушек разные маршруты? На всех сетевухах висят айпишники из одной подсети или из разных (с необходимостью создания n числа "дефолтных" маршрутов для каждой сетевухи)? Сами сетевушки адресов не имеют. net1-net4 (гигабитные) объединены в bond. На bond и на net5 (10 гиг) висят vlan'ы. Бриджей нет (т.е. на разных интерфейсах - разные vlan'ы). У всех vlan'ов - разные подсети, соответственно, разные IP адреса и разные маршруты. Прерываниями с остальных сетевушек можно пренебречь, т.к. после освобождения CPU0 от обработки прерываний с net5, его загрузка упала почти до нуля. И при наступлении "времени Ч" (т.е. "полка" на одном из CPU) загрузка на CPU0 так и осталась около нуля. Т.е. проблема только в обработке прерываний именно с net5. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
IVB Опубликовано 17 ноября, 2014 · Жалоба Сервер - софт-роутер. Q-in-Q есть, PPPoE нету. RSS не работает для PPPoE (и не будет). Для Q-in-Q в чипе заложено пару функций, но в текущем драйвере ixgbe разрабы это не добавили и поэтому RSS тоже не работает. Нужно включить биты IXGBE_DMATXCTL_GDV и IXGBE_CTRL_EXT_EXTENDED_VLAN в регистрах согласно даташиту. Тут http://sourceforge.n...ssage/31896025/ Steve O'Brien писал, что у него вроде заработало. У меня тоже такая проблема возникла, в бою пока не тестировал, в ближайшее время скорее всего будет возможность проверить. А разрабы очень ленивые какие-то - много чего не добавили в драйвер, хотя может очень тщательно все тестируют, но в документации по драйверу все равно нету информации по этим вопросам. Порылся в даташите, но так и не нашел, как это сделать. Даже в исходники драйвера заглянул! IXGBE_DMATXCTL_GDV только определяется (через #define), но нигде в коде не используется. А IXGBE_CTRL_EXT_EXTENDED_VLAN даже нигде не определяется. Наверное, мне будет проще избавиться от Q-in-Q на этом сервере... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 17 ноября, 2014 · Жалоба Как у себя проверю - пришлю патч на драйвер. Разработчики Double VLAN там вообще не делали. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
IVB Опубликовано 18 ноября, 2014 · Жалоба Как у себя проверю - пришлю патч на драйвер. Разработчики Double VLAN там вообще не делали. Буду весьма признателен! Убрал QinQ - загрузка всех процессоров выровнялась. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 18 ноября, 2014 · Жалоба diff -rupN ixgbe-3.22.3//src/ixgbe_main.c ixgbe-3.22.3-qinq//src/ixgbe_main.c --- ixgbe-3.22.3//src/ixgbe_main.c 2014-08-15 04:17:42.000000000 +0500 +++ ixgbe-3.22.3-qinq//src/ixgbe_main.c 2014-11-18 19:07:49.000000000 +0500 @@ -3629,6 +3629,11 @@ static void ixgbe_configure_tx(struct ix dmatxctl |= IXGBE_DMATXCTL_TE; IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl); } + + /* Enable Global Double VLAN */ + dmatxctl = IXGBE_READ_REG(hw, IXGBE_DMATXCTL); + dmatxctl |= IXGBE_DMATXCTL_GDV; + IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl); /* Setup the HW Tx Head and Tail descriptor pointers */ for (i = 0; i < adapter->num_tx_queues; i++) @@ -5719,6 +5724,12 @@ static void ixgbe_up_complete(struct ixg mod_timer(&adapter->service_timer, jiffies); ixgbe_clear_vf_stats_counters(adapter); + + /* Set Extended VLAN bit */ + ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); + ctrl_ext |= IXGBE_CTRL_EXT_EXTENDED_VLAN; + IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); + /* Set PF Reset Done bit so PF/VF Mail Ops can work */ ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD; diff -rupN ixgbe-3.22.3//src/ixgbe_type.h ixgbe-3.22.3-qinq//src/ixgbe_type.h --- ixgbe-3.22.3//src/ixgbe_type.h 2014-08-15 04:17:42.000000000 +0500 +++ ixgbe-3.22.3-qinq//src/ixgbe_type.h 2014-11-18 19:08:04.000000000 +0500 @@ -1119,6 +1119,7 @@ struct ixgbe_thermal_sensor_data { #define IXGBE_CTRL_EXT_NS_DIS 0x00010000 /* No Snoop disable */ #define IXGBE_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ #define IXGBE_CTRL_EXT_DRV_LOAD 0x10000000 /* Driver loaded bit for FW */ +#define IXGBE_CTRL_EXT_EXTENDED_VLAN 0x04000000 /* Extended VLAN bit */ /* Direct Cache Access (DCA) definitions */ #define IXGBE_DCA_CTRL_DCA_ENABLE 0x00000000 /* DCA Enable */ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
walertos Опубликовано 23 декабря, 2015 · Жалоба Включить то это всё не проблема! Намного интереснее теперь всё это выключить. После включения данного функционала vlan-mon от Accel перестал создавать QinQ интерфейсы. Ну я не долго думая откатил драйвер назад, только это не помогает, кто может помочь и подсказать как вернуть всё назад и выключить данный функционал в сетевой? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 23 декабря, 2015 · Жалоба diff -rupN ixgbe-3.22.3//src/ixgbe_main.c ixgbe-3.22.3-qinq//src/ixgbe_main.c --- ixgbe-3.22.3//src/ixgbe_main.c 2014-08-15 04:17:42.000000000 +0500 +++ ixgbe-3.22.3-qinq//src/ixgbe_main.c 2014-11-18 19:07:49.000000000 +0500 @@ -3629,6 +3629,11 @@ static void ixgbe_configure_tx(struct ix dmatxctl |= IXGBE_DMATXCTL_TE; IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl); } + + /* Enable Global Double VLAN */ + dmatxctl = IXGBE_READ_REG(hw, IXGBE_DMATXCTL); + dmatxctl |= IXGBE_DMATXCTL_GDV; + IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl); /* Setup the HW Tx Head and Tail descriptor pointers */ for (i = 0; i < adapter->num_tx_queues; i++) @@ -5719,6 +5724,12 @@ static void ixgbe_up_complete(struct ixg mod_timer(&adapter->service_timer, jiffies); ixgbe_clear_vf_stats_counters(adapter); + + /* Set Extended VLAN bit */ + ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); + ctrl_ext |= IXGBE_CTRL_EXT_EXTENDED_VLAN; + IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); + /* Set PF Reset Done bit so PF/VF Mail Ops can work */ ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD; diff -rupN ixgbe-3.22.3//src/ixgbe_type.h ixgbe-3.22.3-qinq//src/ixgbe_type.h --- ixgbe-3.22.3//src/ixgbe_type.h 2014-08-15 04:17:42.000000000 +0500 +++ ixgbe-3.22.3-qinq//src/ixgbe_type.h 2014-11-18 19:08:04.000000000 +0500 @@ -1119,6 +1119,7 @@ struct ixgbe_thermal_sensor_data { #define IXGBE_CTRL_EXT_NS_DIS 0x00010000 /* No Snoop disable */ #define IXGBE_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ #define IXGBE_CTRL_EXT_DRV_LOAD 0x10000000 /* Driver loaded bit for FW */ +#define IXGBE_CTRL_EXT_EXTENDED_VLAN 0x04000000 /* Extended VLAN bit */ /* Direct Cache Access (DCA) definitions */ #define IXGBE_DCA_CTRL_DCA_ENABLE 0x00000000 /* DCA Enable */ Крутяк! А может добавите патч в апстримный ixgbe? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
walertos Опубликовано 23 декабря, 2015 (изменено) · Жалоба diff -rupN ixgbe-3.22.3//src/ixgbe_main.c ixgbe-3.22.3-qinq//src/ixgbe_main.c --- ixgbe-3.22.3//src/ixgbe_main.c 2014-08-15 04:17:42.000000000 +0500 +++ ixgbe-3.22.3-qinq//src/ixgbe_main.c 2014-11-18 19:07:49.000000000 +0500 @@ -3629,6 +3629,11 @@ static void ixgbe_configure_tx(struct ix dmatxctl |= IXGBE_DMATXCTL_TE; IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl); } + + /* Enable Global Double VLAN */ + dmatxctl = IXGBE_READ_REG(hw, IXGBE_DMATXCTL); + dmatxctl |= IXGBE_DMATXCTL_GDV; + IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl); /* Setup the HW Tx Head and Tail descriptor pointers */ for (i = 0; i < adapter->num_tx_queues; i++) @@ -5719,6 +5724,12 @@ static void ixgbe_up_complete(struct ixg mod_timer(&adapter->service_timer, jiffies); ixgbe_clear_vf_stats_counters(adapter); + + /* Set Extended VLAN bit */ + ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); + ctrl_ext |= IXGBE_CTRL_EXT_EXTENDED_VLAN; + IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); + /* Set PF Reset Done bit so PF/VF Mail Ops can work */ ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD; diff -rupN ixgbe-3.22.3//src/ixgbe_type.h ixgbe-3.22.3-qinq//src/ixgbe_type.h --- ixgbe-3.22.3//src/ixgbe_type.h 2014-08-15 04:17:42.000000000 +0500 +++ ixgbe-3.22.3-qinq//src/ixgbe_type.h 2014-11-18 19:08:04.000000000 +0500 @@ -1119,6 +1119,7 @@ struct ixgbe_thermal_sensor_data { #define IXGBE_CTRL_EXT_NS_DIS 0x00010000 /* No Snoop disable */ #define IXGBE_CTRL_EXT_RO_DIS 0x00020000 /* Relaxed Ordering disable */ #define IXGBE_CTRL_EXT_DRV_LOAD 0x10000000 /* Driver loaded bit for FW */ +#define IXGBE_CTRL_EXT_EXTENDED_VLAN 0x04000000 /* Extended VLAN bit */ /* Direct Cache Access (DCA) definitions */ #define IXGBE_DCA_CTRL_DCA_ENABLE 0x00000000 /* DCA Enable */ Крутяк! А может добавите патч в апстримный ixgbe? Это работает кстати на любой версии драйверов! И на 3.X.X и на 4.X.X. Изменено 23 декабря, 2015 пользователем walertos Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 24 декабря, 2015 · Жалоба После включения данного функционала vlan-mon от Accel перестал создавать QinQ интерфейсы. Ну я не долго думая откатил драйвер назад, только это не помогает, кто может помочь и подсказать как вернуть всё назад и выключить данный функционал в сетевой? Мон не должен был сломаться. Здесь просто указывается сетевухе что в эзернете двойной тэг. Если она его сама декапсулирует и пишет в какие то расширенные заголовки то много чего бы сломалось, но я подозреваю что она просто использует это для расчёта хэша при балансировке прерываний. Если тебе отката мало то: 1. выключи питание совсем минут на 5. 2. если не помогло то пропатч патч: dmatxctl &= ~IXGBE_DMATXCTL_GDV; ... ctrl_ext &= ~IXGBE_CTRL_EXT_EXTENDED_VLAN; и пересобери дрова, так гарантированно QinQ отключится. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 24 декабря, 2015 · Жалоба может попробовать отключить vlan offload через ethtool? :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
walertos Опубликовано 26 декабря, 2015 (изменено) · Жалоба может попробовать отключить vlan offload через ethtool? :) Уже отключено и было отключено. ethtool -k eth5 rx-vlan-filter: on [fixed] Вот может это мешает!? Скоро соберём тестовый сервак и будем пробовать! После включения данного функционала vlan-mon от Accel перестал создавать QinQ интерфейсы. Ну я не долго думая откатил драйвер назад, только это не помогает, кто может помочь и подсказать как вернуть всё назад и выключить данный функционал в сетевой? Мон не должен был сломаться. Здесь просто указывается сетевухе что в эзернете двойной тэг. Если она его сама декапсулирует и пишет в какие то расширенные заголовки то много чего бы сломалось, но я подозреваю что она просто использует это для расчёта хэша при балансировке прерываний. Если тебе отката мало то: 1. выключи питание совсем минут на 5. 2. если не помогло то пропатч патч: dmatxctl &= ~IXGBE_DMATXCTL_GDV; ... ctrl_ext &= ~IXGBE_CTRL_EXT_EXTENDED_VLAN; и пересобери дрова, так гарантированно QinQ отключится. А можно немного подробнее, как именно добавить это в патч? Между каких строк или вместо какой из строк? Изменено 26 декабря, 2015 пользователем walertos Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 27 декабря, 2015 · Жалоба Вместо: dmatxctl |= IXGBE_DMATXCTL_GDV; и ctrl_ext |= IXGBE_CTRL_EXT_EXTENDED_VLAN; Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
gureedo Опубликовано 13 февраля, 2016 (изменено) · Жалоба Последняя на данный момент версия драйвера ixgbe c опцией qinq для rss. https://github.com/intersvyaz/ixgbe/tree/4.3.13-netmap На netmap можно не обращать внимания, т.к. он будет пропущен если сборка выполняется не для него. Изменено 13 февраля, 2016 пользователем gureedo Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
myth Опубликовано 13 февраля, 2016 · Жалоба А с PPPoE кроме RPS ничего не предвидится? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 14 февраля, 2016 · Жалоба gureedo похоже, мы делаем одинаковую работу https://github.com/pavel-odintsov/ixgbe-linux-netmap/commits/master :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
gureedo Опубликовано 15 февраля, 2016 · Жалоба gureedo похоже, мы делаем одинаковую работу https://github.com/pavel-odintsov/ixgbe-linux-netmap/commits/master :) netmap наше всё) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
medvedv Опубликовано 15 февраля, 2016 · Жалоба netmap наше всё) Только DPDK, только хардкор =) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 15 февраля, 2016 · Жалоба netmap наше всё) Только DPDK, только хардкор =) Такие вещи надо обсуждать под пиво и в Skype :) Мой - energy_true. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
medvedv Опубликовано 15 февраля, 2016 · Жалоба netmap наше всё) Только DPDK, только хардкор =) Такие вещи надо обсуждать под пиво и в Skype :) Мой - energy_true. Ну мой скайп ты знаешь ) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexmern Опубликовано 31 марта, 2017 (изменено) · Жалоба Update по теме - мой патч работает в бою упешно. Для тех кто включал и у него не заработало, нужно добавить это: ethtool -K eth0 rxvlan off txvlan off ethtool -K eth0 rx-vlan-filter off 40: 3755273838 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-0 41: 7 3670363860 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-1 42: 7 0 3592521918 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-2 43: 7 0 0 3722244061 0 0 0 0 PCI-MSI-edge eth0-TxRx-3 44: 7 0 0 0 3709475958 0 0 0 PCI-MSI-edge eth0-TxRx-4 45: 7 0 0 0 0 3700686839 0 0 PCI-MSI-edge eth0-TxRx-5 46: 7 0 0 0 0 0 3673804167 0 PCI-MSI-edge eth0-TxRx-6 47: 7 0 0 0 0 0 0 3647398649 PCI-MSI-edge eth0-TxRx-7 Изменено 31 марта, 2017 пользователем alexmern Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...