DemYaN Опубликовано 10 ноября, 2010 · Жалоба Добрый день, может кто подскажет? Дано: 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 10 ноября, 2010 · Жалоба У нас вот так: last pid: 63697; load averages: 1.58, 1.59, 1.54 up 110+12:48:48 22:10:02127 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-атрибутами. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 10 ноября, 2010 · Жалоба трафик 400мегов, выжрет наверное ещё 500. Тюнинга по нулям. Шейпим RADIUS-атрибутами.ну это я так понимаю ng_car? в любом случае, не объяснеят по чему все ng_queueX висят на одном ядре Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
st_re Опубликовано 11 ноября, 2010 · Жалоба Прибейте к разным. cpuset Вам в руки. (да и в Вашем топе они на 1 ядрах висят. на 0 и на 1) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
carleone Опубликовано 11 ноября, 2010 · Жалоба Прибейте к разным. cpuset Вам в руки. (да и в Вашем топе они на 1 ядрах висят. на 0 и на 1) Интересно, а как можно прибить dummynet к одному ядру, если у него PID 0? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 11 ноября, 2010 (изменено) · Жалоба Прибейте к разным. 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% от ядра Изменено 11 ноября, 2010 пользователем DemYaN Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 11 ноября, 2010 · Жалоба То что все ng_queueX sleep на 0 и 1 ядрах ещё не значит что и работают они на тех же ядрах. А % загрузки вещь относительная и зависит от способа измерения: в качестве примера: http://www.insidepro.com/kk/397/397r.shtml Full disclose: Честная кража процессорного времени Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
st_re Опубликовано 11 ноября, 2010 · Жалоба Прибейте к разным. 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 можно убрать.... ;) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
make.kernel Опубликовано 11 ноября, 2010 · Жалоба Прибейте к разным. 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
carleone Опубликовано 12 ноября, 2010 · Жалоба Прибейте к разным. 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 спасибо! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 12 ноября, 2010 · Жалоба ок, с ng_queue понятно - прибить на разные ядра А как быть с dummynet, не многовато ли 32% на таком трафике с таким кол-вом сессий? Ведь dummynet крутится как один процесс и по ядрам его не раскидаешь - значит нужно как-то снижать потребление процессорного времени. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 12 ноября, 2010 · Жалоба Один процесс не означает что в нём один поток. К ядрам прибиваются потоки и они же являются теми объектами, которым манипулирует планировщик потоков. Процесс лишь "контейнер" для потоков, памяти, описателей. Прибивание даже 1 потока может повысить быстродействие, за счёт того что не нужно будет таскать между ядрами, синхронизируя кеши всех уровней. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
st_re Опубликовано 12 ноября, 2010 · Жалоба net.inet.ip.dummynet.io_fast=1 Ситуацию не меняет? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 12 ноября, 2010 · Жалоба Один процесс не означает что в нём один поток.К ядрам прибиваются потоки и они же являются теми объектами, которым манипулирует планировщик потоков. Процесс лишь "контейнер" для потоков, памяти, описателей. Прибивание даже 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 .... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_longhorn_ Опубликовано 12 ноября, 2010 · Жалоба DemYaN dummynet не прибит к конкретному ядруОтсюда и нужно начинать, очень помогает. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
st_re Опубликовано 12 ноября, 2010 · Жалоба 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 ;) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 12 ноября, 2010 · Жалоба 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} Всем спасибо ! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...