Перейти к содержимому
Калькуляторы

FreeBSD 8.1 - ng_queueX на одном ядре

Добрый день, может кто подскажет?

 

Дано: FreeBSD 8.1-RELEASE (именно релиз), CPU Intel Core i5 CPU 760 @ 2.80GHz, сетвые Intel ET, обновленный драйвер igb (взят из пака от wawa.)

Индивидульаные настройки такие:

 

# cat /etc/sysctl.conf
net.inet.flowtable.enable=0
net.inet.ip.dummynet.expire=1
net.inet.ip.dummynet.hash_size=512
net.inet.ip.dummynet.io_fast=1
net.inet.ip.fw.dyn_max=65535
net.inet.ip.fw.one_pass=1

# cat /boot/loader.conf
kern.hz=2000
kern.maxusers=512
kern.ipc.nmbclusters=131072
net.graph.maxalloc=2048
hw.igb.rxd=1024
hw.igb.txd=1024
hw.igb.num_queues=4
hw.igb.lro=0
hw.igb.enable_msix=1
hw.igb.rx_process_limit=2048
hw.igb.fc_setting=0

# sysctl -a |grep dummynet
net.inet.ip.dummynet.io_pkt_drop: 84795758
net.inet.ip.dummynet.io_pkt_fast: 1410048755
net.inet.ip.dummynet.io_pkt: 3323982346
net.inet.ip.dummynet.queue_count: 0
net.inet.ip.dummynet.fsk_count: 18
net.inet.ip.dummynet.si_count: 305
net.inet.ip.dummynet.schk_count: 36
net.inet.ip.dummynet.tick_lost: 0
net.inet.ip.dummynet.tick_diff: 32002371
net.inet.ip.dummynet.tick_adjustment: 20236524
net.inet.ip.dummynet.tick_delta_sum: 284
net.inet.ip.dummynet.tick_delta: 500
net.inet.ip.dummynet.red_max_pkt_size: 1500
net.inet.ip.dummynet.red_avg_pkt_size: 512
net.inet.ip.dummynet.red_lookup_depth: 256
net.inet.ip.dummynet.expire_cycle: 0
net.inet.ip.dummynet.expire: 1
net.inet.ip.dummynet.debug: 0
net.inet.ip.dummynet.io_fast: 1
net.inet.ip.dummynet.pipe_byte_limit: 1048576
net.inet.ip.dummynet.pipe_slot_limit: 100
net.inet.ip.dummynet.hash_size: 512

 

На машине только терминация pptp-туннелей на mpd5.5 и шейп dummynet/tablearg. Трафик детский - около 50k:

            input        (Total)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
       46K     0     0        28M        53K     0        38M     0
       45K     0     0        27M        50K     0        37M     0
       46K     0     0        28M        52K     0        38M     0

Cессий также мало:

# ifconfig  |grep ng |wc -l
     222

При этом всем загрузка ядер:

# top -PSHI                                                                                                                           
last pid: 85116;  load averages:  0.12,  0.12,  0.08                                                                                                             up 34+03:53:20  14:32:44
124 processes: 5 running, 92 sleeping, 27 waiting
CPU 0:  0.0% user,  0.0% nice,  2.2% system,  3.3% interrupt, 94.4% idle
CPU 1:  0.0% user,  0.0% nice, 60.0% system,  2.8% interrupt, 37.2% idle
CPU 2:  0.0% user,  0.0% nice,  1.7% system,  3.3% interrupt, 95.0% idle
CPU 3:  0.0% user,  0.0% nice,  2.8% system,  2.2% interrupt, 95.0% idle
Mem: 104M Active, 70M Inact, 202M Wired, 100K Cache, 210M Buf, 1567M Free
Swap:

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   11 root     171 ki31     0K    64K CPU3    3 817.5H 100.00% {idle: cpu3}
   11 root     171 ki31     0K    64K CPU2    2 817.0H 100.00% {idle: cpu2}
   11 root     171 ki31     0K    64K RUN     0 813.4H 96.97% {idle: cpu0}
   11 root     171 ki31     0K    64K CPU1    1 812.8H 43.26% {idle: cpu1}
    0 root     -68    0     0K   224K -       2 187:29 31.45% {dummynet}
  965 root      48    -     0K    64K sleep   0  64:45  8.11% {ng_queue0}
  965 root      48    -     0K    64K sleep   1  65:23  7.28% {ng_queue2}
  965 root      48    -     0K    64K sleep   1  65:33  7.23% {ng_queue3}
  965 root      48    -     0K    64K sleep   0  64:25  6.49% {ng_queue1}
   12 root     -68    -     0K   432K WAIT    1  29:36  1.66% {irq257: igb0:que}
   12 root     -68    -     0K   432K WAIT    3  29:26  1.03% {irq259: igb0:que}
   12 root     -68    -     0K   432K WAIT    0  42:31  0.98% {irq256: igb0:que}
    0 root     -68    0     0K   224K -       3  34:27  0.98% {igb0 que}
   12 root     -68    -     0K   432K WAIT    2  27:01  0.83% {irq258: igb0:que}
   12 root     -68    -     0K   432K WAIT    2  17:11  0.83% {irq263: igb1:que}
   12 root     -68    -     0K   432K WAIT    0  19:00  0.68% {irq261: igb1:que}
   12 root     -68    -     0K   432K WAIT    3  29:35  0.63% {irq264: igb1:que}
   12 root     -68    -     0K   432K WAIT    1  25:22  0.29% {irq262: igb1:que}
61863 root      44    0 40180K 12280K select  1   1:38  0.05% {mpd5}

 

Сразу бросается в галаза, что все нити ng_queue висят на одном ядре:

CPU 1: 0.0% user, 0.0% nice, 60.0% system, 2.8% interrupt, 37.2% idle

0 root -68 0 0K 224K - 2 187:29 31.45% {dummynet}

965 root 48 - 0K 64K sleep 0 64:45 8.11% {ng_queue0}

965 root 48 - 0K 64K sleep 1 65:23 7.28% {ng_queue2}

965 root 48 - 0K 64K sleep 1 65:33 7.23% {ng_queue3}

965 root 48 - 0K 64K sleep 0 64:25 6.49% {ng_queue1}

 

Почему так? dummynеt отедает 31.45% от ядра, это нормально?

При этом ipfw/pipe такого вида:

 

IF_EXT="igb0"

${IPFW} pipe 21 config bw 250kbit/s queue 10 mask dst-ip 0xffffffff
${IPFW} pipe 22 config bw 250kbit/s queue 10 mask src-ip 0xffffffff
....
${IPFW} pipe 81 config bw 8Mbit/s mask dst-ip 0xffffffff
${IPFW} pipe 82 config bw 8Mbit/s mask src-ip 0xffffffff

${IPFW} add pipe tablearg ip from any to 'table(11)' in recv ${IF_EXT}
${IPFW} add pipe tablearg ip from 'table(12)' to any out xmit ${IF_EXT}
${IPFW} add allow ip from any to ${LOCAL_PPP} out xmit ng*
${IPFW} add allow ip from ${LOCAL_PPP} to any in recv ng*

# ipfw table 11 list  |wc -l
     219
# ipfw table 12 list  |wc -l
     219

# ipfw pipe show |grep active
sched 65607 type FIFO flags 0x1 512 buckets 69 active
sched 65608 type FIFO flags 0x1 512 buckets 73 active
sched 65617 type FIFO flags 0x1 512 buckets 5 active
sched 65557 type FIFO flags 0x1 512 buckets 1 active
sched 65618 type FIFO flags 0x1 512 buckets 5 active
sched 65558 type FIFO flags 0x1 512 buckets 1 active
sched 65628 type FIFO flags 0x1 512 buckets 6 active
sched 65627 type FIFO flags 0x1 512 buckets 7 active
sched 65567 type FIFO flags 0x1 512 buckets 0 active
sched 65638 type FIFO flags 0x1 512 buckets 5 active
sched 65568 type FIFO flags 0x1 512 buckets 0 active
sched 65637 type FIFO flags 0x1 512 buckets 5 active
sched 65578 type FIFO flags 0x1 512 buckets 32 active
sched 65577 type FIFO flags 0x1 512 buckets 32 active
sched 65587 type FIFO flags 0x1 512 buckets 0 active
sched 65588 type FIFO flags 0x1 512 buckets 0 active
sched 65598 type FIFO flags 0x1 512 buckets 34 active
sched 65597 type FIFO flags 0x1 512 buckets 34 active

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У нас вот так:

last pid: 63697; load averages: 1.58, 1.59, 1.54 up 110+12:48:48 22:10:02

127 processes: 14 running, 84 sleeping, 29 waiting

CPU 0: 0.4% user, 0.0% nice, 18.0% system, 34.1% interrupt, 47.6% idle

CPU 1: 0.8% user, 0.0% nice, 19.5% system, 24.1% interrupt, 55.6% idle

CPU 2: 0.0% user, 0.0% nice, 21.8% system, 21.4% interrupt, 56.8% idle

CPU 3: 0.8% user, 0.0% nice, 9.4% system, 19.5% interrupt, 70.3% idle

CPU 4: 0.8% user, 0.0% nice, 18.9% system, 0.8% interrupt, 79.6% idle

CPU 5: 0.4% user, 0.0% nice, 17.7% system, 0.0% interrupt, 81.9% idle

CPU 6: 1.9% user, 0.0% nice, 15.8% system, 0.8% interrupt, 81.5% idle

CPU 7: 0.4% user, 0.0% nice, 11.3% system, 0.4% interrupt, 88.0% idle

Mem: 349M Active, 1163M Inact, 580M Wired, 344K Cache, 822M Buf, 5755M Free

Swap: 8000M Total, 8000M Free

 

PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND

11 root 171 ki31 0K 16K CPU7 7 2530.9 90.19% idle: cpu7

14 root 171 ki31 0K 16K CPU4 4 2514.5 84.28% idle: cpu4

12 root 171 ki31 0K 16K RUN 6 2529.2 82.86% idle: cpu6

13 root 171 ki31 0K 16K RUN 5 2524.7 81.59% idle: cpu5

15 root 171 ki31 0K 16K RUN 3 2410.5 68.46% idle: cpu3

17 root 171 ki31 0K 16K CPU1 1 2276.3 58.40% idle: cpu1

16 root 171 ki31 0K 16K RUN 2 2276.0 53.27% idle: cpu2

18 root 171 ki31 0K 16K CPU0 0 2108.1 46.58% idle: cpu0

72 root -68 - 0K 16K CPU2 0 147.0H 22.75% em0 taskq

50 root -68 - 0K 16K WAIT 2 122.2H 16.36% irq262: igb0

48 root -68 - 0K 16K WAIT 1 123.5H 16.06% irq261: igb0

46 root -68 - 0K 16K CPU0 0 129.3H 15.97% irq260: igb0

89181 root 54 0 17164K 6524K select 7 144.2H 14.45% natd

52 root -68 - 0K 16K WAIT 3 119.9H 13.87% irq263: igb0

3 root -68 - 0K 16K CPU4 4 93.5H 11.87% ng_queue1

7 root -68 - 0K 16K sleep 2 93.3H 11.47% ng_queue5

4 root -68 - 0K 16K sleep 4 93.5H 11.38% ng_queue2

5 root -68 - 0K 16K sleep 1 93.4H 11.38% ng_queue3

2 root -68 - 0K 16K sleep 7 93.4H 11.38% ng_queue0

6 root -68 - 0K 16K sleep 5 93.2H 11.38% ng_queue4

8 root -68 - 0K 16K sleep 6 93.5H 11.28% ng_queue6

9 root -68 - 0K 16K sleep 1 93.2H 10.79% ng_queue7

#

# ifconfig |grep ng |wc -l

961

# uname -s -r -m

FreeBSD 7.3-RELEASE-p1 amd64

#

трафик 400мегов, выжрет наверное ещё 500. Тюнинга по нулям. Шейпим RADIUS-атрибутами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

трафик 400мегов, выжрет наверное ещё 500. Тюнинга по нулям. Шейпим RADIUS-атрибутами.
ну это я так понимаю ng_car?

 

в любом случае, не объяснеят по чему все ng_queueX висят на одном ядре

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прибейте к разным. cpuset Вам в руки.

 

(да и в Вашем топе они на 1 ядрах висят. на 0 и на 1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прибейте к разным. cpuset Вам в руки.

 

(да и в Вашем топе они на 1 ядрах висят. на 0 и на 1)

Интересно, а как можно прибить dummynet к одному ядру, если у него PID 0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прибейте к разным. cpuset Вам в руки.

 

(да и в Вашем топе они на 1 ядрах висят. на 0 и на 1)

тем не менее в топе

CPU 0: 0.0% user, 0.0% nice, 2.2% system, 3.3% interrupt, 94.4% idle

CPU 1: 0.0% user, 0.0% nice, 60.0% system, 2.8% interrupt, 37.2% idle

CPU 2: 0.0% user, 0.0% nice, 1.7% system, 3.3% interrupt, 95.0% idle

CPU 3: 0.0% user, 0.0% nice, 2.8% system, 2.2% interrupt, 95.0% idle

 

0 root -68 0 0K 224K - 2 187:29 31.45% {dummynet}

965 root 48 - 0K 64K sleep 0 64:45 8.11% {ng_queue0}

965 root 48 - 0K 64K sleep 1 65:23 7.28% {ng_queue2}

965 root 48 - 0K 64K sleep 1 65:33 7.23% {ng_queue3}

965 root 48 - 0K 64K sleep 0 64:25 6.49% {ng_queue1}

 

8.11 + 6.49 как то больше чем (2.2% system, 3.3% interrupt)

 

dummynet, как я понимаю бегает одним процессом, но это не объясняет почему он ест 32% от ядра

Изменено пользователем DemYaN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То что все ng_queueX sleep на 0 и 1 ядрах ещё не значит что и работают они на тех же ядрах.

 

А % загрузки вещь относительная и зависит от способа измерения:

в качестве примера:

http://www.insidepro.com/kk/397/397r.shtml

Full disclose: Честная кража процессорного времени

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прибейте к разным. cpuset Вам в руки.

 

(да и в Вашем топе они на 1 ядрах висят. на 0 и на 1)

Интересно, а как можно прибить dummynet к одному ядру, если у него PID 0?

 

на 7 он не 0, а на восьмерке...

 

# ps -p 0 -axcH -o lwp,command | egrep '\/dummynet' | while read lwp cmd; do echo /usr/bin/cpuset -l 3 -t $lwp; done
/usr/bin/cpuset -l 3 -t 100080

 

echo можно убрать.... ;)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прибейте к разным. cpuset Вам в руки.

 

(да и в Вашем топе они на 1 ядрах висят. на 0 и на 1)

Интересно, а как можно прибить dummynet к одному ядру, если у него PID 0?

8-stable# procstat -at | grep dummynet
    0 100026 kernel           dummynet           1   16 sleep   -         
8-stable# cpuset -t 100026 -l 0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прибейте к разным. cpuset Вам в руки.

 

(да и в Вашем топе они на 1 ядрах висят. на 0 и на 1)

Интересно, а как можно прибить dummynet к одному ядру, если у него PID 0?

8-stable# procstat -at | grep dummynet
    0 100026 kernel           dummynet           1   16 sleep   -         
8-stable# cpuset -t 100026 -l 0

st_re, make.kernel спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ок, с ng_queue понятно - прибить на разные ядра

 

А как быть с dummynet, не многовато ли 32% на таком трафике с таким кол-вом сессий? Ведь dummynet крутится как один процесс и по ядрам его не раскидаешь - значит нужно как-то снижать потребление процессорного времени.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один процесс не означает что в нём один поток.

К ядрам прибиваются потоки и они же являются теми объектами, которым манипулирует планировщик потоков.

Процесс лишь "контейнер" для потоков, памяти, описателей.

 

Прибивание даже 1 потока может повысить быстродействие, за счёт того что не нужно будет таскать между ядрами, синхронизируя кеши всех уровней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Один процесс не означает что в нём один поток.

К ядрам прибиваются потоки и они же являются теми объектами, которым манипулирует планировщик потоков.

Процесс лишь "контейнер" для потоков, памяти, описателей.

 

Прибивание даже 1 потока может повысить быстродействие, за счёт того что не нужно будет таскать между ядрами, синхронизируя кеши всех уровней.

ок, это все понятно

 

Вопрос в другом, попробую перефразировать - является ли нормальным такое потребление процессорного времени dummynet'ом при трафике в 50kpps, 250 pptp-туннелях, шейпе dummynet/tablearg (dummynet не прибит к конкретному ядру) и процессоре класса Сore i5 760?

 

net.inet.ip.dummynet.io_fast=1

 

Ситуацию не меняет?

Параметр уcтановлен:

....
net.inet.ip.dummynet.io_fast: 1
....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

DemYaN

dummynet не прибит к конкретному ядру
Отсюда и нужно начинать, очень помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

net.inet.ip.dummynet.io_fast=1

 

Ситуацию не меняет?

Параметр уcтановлен:

....
net.inet.ip.dummynet.io_fast: 1
....

Извините, не заметил

 

у Вас 50% все равно уходит в пайпы. Скорости, я так понимаю больше к 250к чем к 8 мегабитам (у Вас там такие примеры) ? И многие забиват свои каналы? Попробуйте поиграться ред-гред настройками, типа там для queue 10 , gred 0.002/5/9/0.1

 

 

тут, кстати, http://forum.nag.ru/forum/index.php?showtopic=58098, в 15 посте утверждается, что бывает обратный эффект. незнаю. just try it ;)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

DemYaN
dummynet не прибит к конкретному ядру
Отсюда и нужно начинать, очень помогает.

Не думал, что будет все так просто.... забираю назад весь свой скептицизм :)

Прибив dummynet к одному ядру, он опустился в top'e просто ниже приличного:

 

# top -PSH 
last pid: 52050;  load averages:  0.26,  0.21,  0.17                                                                                    up 36+10:46:46  21:26:10
126 processes: 6 running, 93 sleeping, 27 waiting
CPU 0:  0.0% user,  0.0% nice,  6.5% system,  3.2% interrupt, 90.3% idle
CPU 1:  0.0% user,  0.0% nice,  8.9% system,  3.3% interrupt, 87.8% idle
CPU 2:  0.0% user,  0.0% nice,  3.3% system,  1.6% interrupt, 95.1% idle
CPU 3:  0.0% user,  0.0% nice,  5.7% system,  4.1% interrupt, 90.2% idle
Mem: 116M Active, 76M Inact, 205M Wired, 210M Buf, 1546M Free
Swap:

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   11 root     171 ki31     0K    64K CPU0    0 863.7H 99.46% {idle: cpu0}
   11 root     171 ki31     0K    64K CPU2    2 868.3H 95.41% {idle: cpu2}
   11 root     171 ki31     0K    64K CPU3    3 869.3H 92.43% {idle: cpu3}
   11 root     171 ki31     0K    64K RUN     1 863.4H 88.92% {idle: cpu1}
  965 root      46    -     0K    64K RUN     1 155:16  4.49% {ng_queue1}
  965 root      46    -     0K    64K sleep   3 156:18  3.03% {ng_queue2}
  965 root      46    -     0K    64K sleep   2 156:32  2.93% {ng_queue3}
  965 root      46    -     0K    64K sleep   0 155:56  2.93% {ng_queue0}
   12 root     -68    -     0K   432K WAIT    1  69:00  2.25% {irq257: igb0:que}
   12 root     -68    -     0K   432K WAIT    3  68:50  1.86% {irq259: igb0:que}
   12 root     -68    -     0K   432K WAIT    3  71:41  1.46% {irq264: igb1:que}
   12 root     -68    -     0K   432K WAIT    0  95:59  1.42% {irq256: igb0:que}
    0 root     -68    0     0K   224K -       2  82:59  1.12% {igb0 que}
   12 root     -68    -     0K   432K WAIT    2  65:19  0.93% {irq258: igb0:que}
   12 root     -68    -     0K   432K WAIT    2  45:38  0.93% {irq263: igb1:que}
   12 root     -68    -     0K   432K WAIT    1  53:34  0.68% {irq262: igb1:que}
   12 root     -68    -     0K   432K WAIT    0  48:26  0.68% {irq261: igb1:que}
   12 root     -32    -     0K   432K WAIT    0 386:29  0.05% {swi4: clock}
    0 root     -68    0     0K   224K -       3 336:01  0.00% {dummynet}

 

Всем спасибо !

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.