Jump to content

Recommended Posts

Posted

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

 

Дано: 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

Posted

У нас вот так:

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-атрибутами.

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

 

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

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

 

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

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

Posted (edited)
Прибейте к разным. 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% от ядра

Edited by DemYaN
Posted

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

 

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

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

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

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

 

 

Posted
Прибейте к разным. 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 можно убрать.... ;)

 

 

 

Posted
Прибейте к разным. 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

 

Posted
Прибейте к разным. 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 спасибо!

Posted

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

 

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

 

Posted

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

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

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

 

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

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

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

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

 

Прибивание даже 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
....

Posted
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 ;)

 

 

Posted
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.