URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 92373
[ Назад ]

Исходное сообщение
"Не меняется net.isr.maxthreads."

Отправлено 4el , 01-Окт-11 16:04 
Заметили что наш IPNAT в связке с IPFW шейпером(+ пару других утилиток) напрягает восновном 2 ядра из 8 при больших нагрузках. Нашли такое решение как параметр net.isr.maxthreads – собственно, количество потоков, разгребающих очередь пакетов. Добавили в файл /boot/loader.conf --> net.isr.maxthreads=8. но после перезагрузки значение всё равно 1.
ОС FreeBSD 8.1-RELEASE amd64. Что делаем не так, помогите.

Содержание

Сообщения в этом обсуждении
"Не меняется net.isr.maxthreads."
Отправлено DeadLoco , 01-Окт-11 16:20 
> Что делаем не так, помогите.

Все так, это фича. Если хотите параллелить нат - используйте нг_нат, создавайте отдельные номерные ноды под отдельные правила, и будет вам щясье. Из ипфв обращение к нетграфу даже логичней выглядит, чем к ипфв_нату. Плюс есть масса плюшек, связанных с таблеаргами.


"Не меняется net.isr.maxthreads."
Отправлено 4el , 01-Окт-11 16:27 
>> Что делаем не так, помогите.
> Все так, это фича. Если хотите параллелить нат - используйте нг_нат, создавайте
> отдельные номерные ноды под отдельные правила, и будет вам щясье. Из
> ипфв обращение к нетграфу даже логичней выглядит, чем к ипфв_нату. Плюс
> есть масса плюшек, связанных с таблеаргами.

А можно по сути вопроса. Почему фича не применяется?


"Не меняется net.isr.maxthreads."
Отправлено DeadLoco , 01-Окт-11 16:50 
> А можно по сути вопроса. Почему фича не применяется?

Потому что ипнат - однопоточен архитектурно. Из-за одной общей таблицы трансляции. В случае сопряжения с нетграфом ипфв работает брокером пакетов, сбрасывая их на отдельные ноды нг_ната, каждая из которых имеет свою таблицу преобразования адресов. Нужно только аккуратно разруливать входящие пакеты, чтобы обратка попадала на ту же ноду, через которую шел исходящий траффик.


"Не меняется net.isr.maxthreads."
Отправлено 4el , 01-Окт-11 17:09 
>> А можно по сути вопроса. Почему фича не применяется?
> Потому что ипнат - однопоточен архитектурно. Из-за одной общей таблицы трансляции. В
> случае сопряжения с нетграфом ипфв работает брокером пакетов, сбрасывая их на
> отдельные ноды нг_ната, каждая из которых имеет свою таблицу преобразования адресов.
> Нужно только аккуратно разруливать входящие пакеты, чтобы обратка попадала на ту
> же ноду, через которую шел исходящий траффик.

т.е. получается, что тормоза всего сервера при > 100к активных сессий ("ipnat -s | grep inuse") как раз и есть результат этого ограничения однопоточности? 2 ядра постоянно загружены на 100%, и пропадают сразу после очистки таблиц (ipnat -CF).. а то тормоза как-то не совпадают по логике с наличием 2х 4-ядерных xeon-ов


"Не меняется net.isr.maxthreads."
Отправлено DeadLoco , 01-Окт-11 16:55 
> Добавили в файл /boot/loader.conf --> net.isr.maxthreads=8. но после
> перезагрузки значение всё равно 1.
> ОС FreeBSD 8.1-RELEASE amd64. Что делаем не так, помогите.

А, да. Переменные ядра рулятся не из /бут/лоадер.конф, а из /етц/сисцтл.конф


"Не меняется net.isr.maxthreads."
Отправлено 4el , 01-Окт-11 17:35 
>> Добавили в файл /boot/loader.conf --> net.isr.maxthreads=8. но после
>> перезагрузки значение всё равно 1.
>> ОС FreeBSD 8.1-RELEASE amd64. Что делаем не так, помогите.
> А, да. Переменные ядра рулятся не из /бут/лоадер.конф, а из /етц/сисцтл.коF

А ничего что:
# sysctl net.isr.maxthreads=8
sysctl: oid 'net.isr.maxthreads' is read only


"Не меняется net.isr.maxthreads."
Отправлено 4el , 03-Окт-11 08:28 
>>> Добавили в файл /boot/loader.conf --> net.isr.maxthreads=8. но после
>>> перезагрузки значение всё равно 1.
>>> ОС FreeBSD 8.1-RELEASE amd64. Что делаем не так, помогите.
>> А, да. Переменные ядра рулятся не из /бут/лоадер.конф, а из /етц/сисцтл.коF
> А ничего что:
> # sysctl net.isr.maxthreads=8
> sysctl: oid 'net.isr.maxthreads' is read only

Кстати из /etc/sysctl.conf, тоже ничего не поменяло.


"Не меняется net.isr.maxthreads."
Отправлено KES , 18-Ноя-11 12:15 
>> Добавили в файл /boot/loader.conf --> net.isr.maxthreads=8. но после
>> перезагрузки значение всё равно 1.
>> ОС FreeBSD 8.1-RELEASE amd64. Что делаем не так, помогите.
> А, да. Переменные ядра рулятся не из /бут/лоадер.конф, а из /етц/сисцтл.конф

Они рулятся и там и там, только бут/лоадер.конф как раз и нужен для того, чтобы установить переменные ядра до загрузки ядра. т.е. Используется для тех переменных, которые нельзя менять рантайм


"Не меняется net.isr.maxthreads."
Отправлено pavlinux , 01-Окт-11 20:29 
>  Что делаем не так, помогите.

Linux - для умных, Cisco - для богатых, FreeBSD - для тупых жмотов. :)



"Не меняется net.isr.maxthreads."
Отправлено mr_gfd , 02-Окт-11 01:28 
>>  Что делаем не так, помогите.
> Linux - для умных, Cisco - для богатых, FreeBSD - для тупых
> жмотов. :)

толсто.


"Не меняется net.isr.maxthreads."
Отправлено KES , 18-Ноя-11 12:16 
>>  Что делаем не так, помогите.
> Linux - для умных, Cisco - для богатых, FreeBSD - для тупых
> жмотов. :)

вы наверное сильно умный ))


"Не меняется net.isr.maxthreads."
Отправлено павлинах , 18-Ноя-11 22:24 
>>>  Что делаем не так, помогите.
>> Linux - для умных, Cisco - для богатых, FreeBSD - для тупых
>> жмотов. :)
> вы наверное сильно умный ))

Да, спасибо.


"Не меняется net.isr.maxthreads."
Отправлено _sirius_ , 02-Окт-11 15:21 
А у вас ядро собрано с DEVICE POLLING?

"Не меняется net.isr.maxthreads."
Отправлено 4el , 03-Окт-11 08:25 
> А у вас ядро собрано с DEVICE POLLING?

Нет


"Не меняется net.isr.maxthreads."
Отправлено nix , 18-Ноя-11 14:59 
> Заметили что наш IPNAT в связке с IPFW шейпером(+ пару других утилиток)
> напрягает восновном 2 ядра из 8 при больших нагрузках. Нашли такое
> решение как параметр net.isr.maxthreads – собственно, количество потоков, разгребающих
> очередь пакетов. Добавили в файл /boot/loader.conf --> net.isr.maxthreads=8. но после
> перезагрузки значение всё равно 1.
> ОС FreeBSD 8.1-RELEASE amd64. Что делаем не так, помогите.

Я заметил, что не меняеются параметры
net.isr.direct=0                      # interrupt handling via multiple CPU
net.isr.direct_force=0
их нужно установить в 1, что бы работала система обработки прерываний разными корами\процессорами. Я их установил в 1 в лоадер.конф, но после ребута - все по нолям.
А у вас как?

---
net.isr.bindthreads=0                 # do not bind threads to CPUs
net.isr.direct=1                      # interrupt handling via multiple CPU
net.isr.direct_force=1                # "
net.isr.maxthreads=3                  # Max number of threads for NIC IRQ balancing


"Не меняется net.isr.maxthreads."
Отправлено KES , 19-Ноя-11 00:35 
# sysctl -a | grep net.isr
net.isr.numthreads: 3
net.isr.maxprot: 16
net.isr.defaultqlimit: 256
net.isr.maxqlimit: 10240
net.isr.bindthreads: 0
net.isr.maxthreads: 3
net.isr.direct: 0
net.isr.direct_force: 0


last pid: 46125;  load averages:  1.26,  1.30,  1.33     up 0+12:43:57  22:16:07
222 processes: 6 running, 198 sleeping, 18 waiting
CPU 0:  3.7% user,  0.0% nice, 11.1% system,  9.9% interrupt, 75.3% idle
CPU 1:  0.0% user,  0.0% nice,  2.5% system, 37.0% interrupt, 60.5% idle
CPU 2:  2.5% user,  0.0% nice,  1.2% system, 34.6% interrupt, 61.7% idle
CPU 3:  1.2% user,  0.0% nice,  6.2% system, 27.2% interrupt, 65.4% idle
Mem: 258M Active, 1662M Inact, 201M Wired, 316K Cache, 112M Buf, 1777M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME   PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   11 root       155 ki31     0K    32K CPU3    3 525:10 76.61% {idle: cpu3}
   11 root       155 ki31     0K    32K RUN     2 520:14 76.37% {idle: cpu2}
   11 root       155 ki31     0K    32K CPU0    0 509:33 75.68% {idle: cpu0}
   11 root       155 ki31     0K    32K RUN     1 518:15 71.14% {idle: cpu1}
   12 root       -72    -     0K   152K CPU1    1 269:13 35.25% {swi1: netisr 0}
   12 root       -72    -     0K   152K WAIT    3 174:30 19.97% {swi1: netisr 2}
   12 root       -92    -     0K   152K WAIT    0 108:13 12.55% {irq256: re0}
   12 root       -72    -     0K   152K WAIT    2  84:00 12.55% {swi1: netisr 3}
   13 root       -16    -     0K    32K sleep   3  48:04  4.10% {ng_queue0}
   13 root       -16    -     0K    32K sleep   0  48:04  4.05% {ng_queue2}
   13 root       -16    -     0K    32K sleep   3  48:06  4.00% {ng_queue3}
   13 root       -16    -     0K    32K sleep   0  48:02  4.00% {ng_queue1}
46124 cacti       26    0 11960K  3480K select  0   0:00  0.83% snmpget
46078 cacti       45    0 23716K 16432K piperd  1   0:00  0.73% php
46089 cacti       46    0 11116K  2836K piperd  2   0:00  0.73% perl5.10.1
46090 root        46    0  9728K  1952K select  3   0:00  0.73% sudo
46116 cacti       27    0 11960K  3592K select  0   0:00  0.63% snmpwalk
46123 cacti       52    0 11116K  2824K piperd  0   0:00  0.63% perl5.10.1
6989 root        21    0 13408K  5576K select  3  16:51  0.54% snmpd
46073 cacti       52    0 23716K 16440K piperd  2   0:00  0.54% php
46091 root        21    0  9672K  1512K select  0   0:00  0.44% ping

Как видно, работают все ядра, но вот в этой ситуации:

net.isr.bindthreads=0                
net.isr.direct=1                      
net.isr.direct_force=1                
net.isr.maxthreads=3  

#top -SIHP
last pid: 14902;  load averages:  1.92,  2.12,  1.96    up 0+17:47:31  19:59:04
226 processes: 12 running, 197 sleeping, 17 waiting
CPU 0:  0.6% user,  0.0% nice,  1.2% system, 88.3% interrupt,  9.8% idle
CPU 1:  1.8% user,  0.0% nice, 29.4% system,  0.0% interrupt, 68.7% idle
CPU 2:  3.7% user,  0.0% nice, 30.7% system,  0.0% interrupt, 65.6% idle
CPU 3:  3.1% user,  0.0% nice, 25.8% system,  0.0% interrupt, 71.2% idle
Mem: 264M Active, 1641M Inact, 272M Wired, 832K Cache, 112M Buf, 1721M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME   PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   12 root       -92    -     0K   152K CPU0    0 354:30 96.78% {irq256: re0}
   11 root       155 ki31     0K    32K RUN     1 929:16 77.83% {idle: cpu1}
   11 root       155 ki31     0K    32K RUN     3 922:41 72.95% {idle: cpu3}
   11 root       155 ki31     0K    32K RUN     2 904:02 71.63% {idle: cpu2}
   13 root       -16    -     0K    32K CPU3    1  71:11 18.65% {ng_queue1}
   13 root       -16    -     0K    32K RUN     1  71:10 18.36% {ng_queue3}
   13 root       -16    -     0K    32K RUN     3  71:18 17.63% {ng_queue0}
   13 root       -16    -     0K    32K RUN     1  71:11 17.14% {ng_queue2}
   11 root       155 ki31     0K    32K RUN     0 682:25 10.55% {idle: cpu0}
55709 root        20    0 13408K  5840K select  2  15:50  1.71% snmpd
14902 cacti       33    0 11960K  3480K select  1   0:00  1.12% snmpget
14864 cacti       46    0 11116K  2836K piperd  3   0:00  1.12% perl5.10.1
14867 root        46    0  9728K  1956K select  3   0:00  1.12% sudo

Работает только одно ядро. т.е. выходит, что одно ядро привязывается к одной сетевухе
через время будет вторая сетевуха, попробую провести тесты.
В вашей ситуации вы можете попробовать установить
net.isr.direct_force=0

тогда, опять же из постов на форумах, вроде как, будет передаваться обработка в другие ядра, если это первое загружено. Я это не тестировал.

в моём же случае я только оттюнил net.isr.maxthreads: 3. Как работает вы видите. Будет ли превышен лимит, который был достигнут при direct and force =1 посмотрим.


"Не меняется net.isr.maxthreads."
Отправлено nix , 19-Ноя-11 01:11 
>[оверквотинг удален]
> Работает только одно ядро. т.е. выходит, что одно ядро привязывается к одной
> сетевухе
> через время будет вторая сетевуха, попробую провести тесты.
> В вашей ситуации вы можете попробовать установить
> net.isr.direct_force=0
> тогда, опять же из постов на форумах, вроде как, будет передаваться обработка
> в другие ядра, если это первое загружено. Я это не тестировал.
> в моём же случае я только оттюнил net.isr.maxthreads: 3. Как работает вы
> видите. Будет ли превышен лимит, который был достигнут при direct and
> force =1 посмотрим.

  Отпишитесь. ОК?


"Не меняется net.isr.maxthreads."
Отправлено KES , 07-Дек-11 23:51 
>[оверквотинг удален]
>> сетевухе
>> через время будет вторая сетевуха, попробую провести тесты.
>> В вашей ситуации вы можете попробовать установить
>> net.isr.direct_force=0
>> тогда, опять же из постов на форумах, вроде как, будет передаваться обработка
>> в другие ядра, если это первое загружено. Я это не тестировал.
>> в моём же случае я только оттюнил net.isr.maxthreads: 3. Как работает вы
>> видите. Будет ли превышен лимит, который был достигнут при direct and
>> force =1 посмотрим.
>   Отпишитесь. ОК?

А что же вы не отписываетесь???


"Не меняется net.isr.maxthreads."
Отправлено nix , 08-Дек-11 15:48 
>[оверквотинг удален]
>>> через время будет вторая сетевуха, попробую провести тесты.
>>> В вашей ситуации вы можете попробовать установить
>>> net.isr.direct_force=0
>>> тогда, опять же из постов на форумах, вроде как, будет передаваться обработка
>>> в другие ядра, если это первое загружено. Я это не тестировал.
>>> в моём же случае я только оттюнил net.isr.maxthreads: 3. Как работает вы
>>> видите. Будет ли превышен лимит, который был достигнут при direct and
>>> force =1 посмотрим.
>>   Отпишитесь. ОК?
> А что же вы не отписываетесь???

А у меня все по-старому))
net.isr.direct: 0
net.isr.direct_force: 0
так в 1 выставить и не удалось. я так понимаю в 9-кe по-умолчанию новый механизм включен и выключить его нельзя. С net.isr.maxthreads все ясно, с этим разобрался. Можно выставить =#CPU's


"Не меняется net.isr.maxthreads."
Отправлено shamanu4 , 07-Фев-12 11:48 
>>[оверквотинг удален]
> А у меня все по-старому))
> net.isr.direct: 0
> net.isr.direct_force: 0
> так в 1 выставить и не удалось. я так понимаю в 9-кe
> по-умолчанию новый механизм включен и выключить его нельзя. С net.isr.maxthreads все
> ясно, с этим разобрался. Можно выставить =#CPU's

net.isr.direct и net.isr.direct_force меняется параметром net.isr.dispatch.
Если net.isr.dispatch=direct то:
net.isr.direct: 1
net.isr.direct_force: 1
Если net.isr.dispatch=hybrid то:
net.isr.direct: 1
net.isr.direct_force: 0
И наконец если net.isr.dispatch=deferred то:
net.isr.direct: 0
net.isr.direct_force: 0

А как решили проблему с net.isr.maxthreads? Никак не хочет меняться. в loader.conf:
net.isr.dispatch=deferred
net.isr.numthreads=4
net.isr.maxthreads=4
но в результате получаю 1.


"Не меняется net.isr.maxthreads."
Отправлено nix , 07-Фев-12 17:10 
>[оверквотинг удален]
> net.isr.direct: 1
> net.isr.direct_force: 0
> И наконец если net.isr.dispatch=deferred то:
> net.isr.direct: 0
> net.isr.direct_force: 0
> А как решили проблему с net.isr.maxthreads? Никак не хочет меняться. в loader.conf:
> net.isr.dispatch=deferred
> net.isr.numthreads=4
> net.isr.maxthreads=4
> но в результате получаю 1.

Только что специально проверил. Стоит в /boot/loader.conf

net.isr.maxthreads=2
net.isr.dispatch=deferred
Только эти две записи. (касательно очереди)
После ребута все как положено.


"Не меняется net.isr.maxthreads."
Отправлено SergeyKa , 24-Мрт-13 18:19 
> А как решили проблему с net.isr.maxthreads? Никак не хочет меняться. в loader.conf:
> net.isr.dispatch=deferred
> net.isr.numthreads=4
> net.isr.maxthreads=4
> но в результате получаю 1.

Смотрю по дате 2012, но все-же для следующий поколений.
Если net.isr.numthreads=1 и не меняется черех loader.conf - уберите polling из ядра.


"Не меняется net.isr.maxthreads."
Отправлено KES , 20-Ноя-11 16:13 
> # sysctl -a | grep net.isr
> net.isr.numthreads: 3
> net.isr.maxprot: 16
> net.isr.defaultqlimit: 256
> net.isr.maxqlimit: 10240
> net.isr.bindthreads: 0
> net.isr.maxthreads: 3
> net.isr.direct: 0
> net.isr.direct_force: 0

last pid: 25228;  load averages:  2.39,  2.33,  2.15    up 2+04:33:34  14:05:44
203 processes: 7 running, 179 sleeping, 17 waiting
CPU 0:  0.8% user,  0.0% nice, 14.2% system, 22.4% interrupt, 62.6% idle
CPU 1:  0.4% user,  0.0% nice,  6.3% system, 43.7% interrupt, 49.6% idle
CPU 2:  0.0% user,  0.0% nice,  9.1% system, 41.7% interrupt, 49.2% idle
CPU 3:  0.0% user,  0.0% nice,  5.1% system, 49.6% interrupt, 45.3% idle
Mem: 252M Active, 2374M Inact, 283M Wired, 244K Cache, 112M Buf, 990M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME   PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   11 root       155 ki31     0K    32K RUN     0  38.6H 68.65% {idle: cpu0}
   12 root       -72    -     0K   152K CPU3    3 922:39 59.62% {swi1: netisr 0
   12 root       -72    -     0K   152K CPU1    1 607:43 53.76% {swi1: netisr 2
   11 root       155 ki31     0K    32K CPU1    1  38.3H 53.61% {idle: cpu1}
   11 root       155 ki31     0K    32K RUN     3  38.6H 52.25% {idle: cpu3}
   11 root       155 ki31     0K    32K RUN     2  38.2H 50.39% {idle: cpu2}
   12 root       -72    -     0K   152K WAIT    2 324:22 25.78% {swi1: netisr 3
   12 root       -92    -     0K   152K WAIT    0 346:24 16.70% {irq256: re0}
   13 root       -16    -     0K    32K sleep   2 141:52  6.69% {ng_queue3}
   13 root       -16    -     0K    32K sleep   1 141:40  6.54% {ng_queue1}
   13 root       -16    -     0K    32K sleep   1 141:45  6.20% {ng_queue0}
   13 root       -16    -     0K    32K sleep   1 141:43  6.15% {ng_queue2}
32549 root        20    0 13408K  5808K select  0  43:26  0.73% snmpd
5523 root        21    0 91472K 75760K select  2  37:14  0.34% {mpd5}

Думаю можно net.isr.maxthreads: установить и в 4, никаких проблем на данный момент не наблюдаю, одни плюсы =)