DemYaN Posted November 10, 2010 Posted November 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 Вставить ник Quote
terrible Posted November 10, 2010 Posted November 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-атрибутами. Вставить ник Quote
DemYaN Posted November 10, 2010 Author Posted November 10, 2010 трафик 400мегов, выжрет наверное ещё 500. Тюнинга по нулям. Шейпим RADIUS-атрибутами.ну это я так понимаю ng_car? в любом случае, не объяснеят по чему все ng_queueX висят на одном ядре Вставить ник Quote
st_re Posted November 11, 2010 Posted November 11, 2010 Прибейте к разным. cpuset Вам в руки. (да и в Вашем топе они на 1 ядрах висят. на 0 и на 1) Вставить ник Quote
carleone Posted November 11, 2010 Posted November 11, 2010 Прибейте к разным. cpuset Вам в руки. (да и в Вашем топе они на 1 ядрах висят. на 0 и на 1) Интересно, а как можно прибить dummynet к одному ядру, если у него PID 0? Вставить ник Quote
DemYaN Posted November 11, 2010 Author Posted November 11, 2010 (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 November 11, 2010 by DemYaN Вставить ник Quote
Ivan_83 Posted November 11, 2010 Posted November 11, 2010 То что все ng_queueX sleep на 0 и 1 ядрах ещё не значит что и работают они на тех же ядрах. А % загрузки вещь относительная и зависит от способа измерения: в качестве примера: http://www.insidepro.com/kk/397/397r.shtml Full disclose: Честная кража процессорного времени Вставить ник Quote
st_re Posted November 11, 2010 Posted November 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 можно убрать.... ;) Вставить ник Quote
make.kernel Posted November 11, 2010 Posted November 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 Вставить ник Quote
carleone Posted November 12, 2010 Posted November 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 спасибо! Вставить ник Quote
DemYaN Posted November 12, 2010 Author Posted November 12, 2010 ок, с ng_queue понятно - прибить на разные ядра А как быть с dummynet, не многовато ли 32% на таком трафике с таким кол-вом сессий? Ведь dummynet крутится как один процесс и по ядрам его не раскидаешь - значит нужно как-то снижать потребление процессорного времени. Вставить ник Quote
Ivan_83 Posted November 12, 2010 Posted November 12, 2010 Один процесс не означает что в нём один поток. К ядрам прибиваются потоки и они же являются теми объектами, которым манипулирует планировщик потоков. Процесс лишь "контейнер" для потоков, памяти, описателей. Прибивание даже 1 потока может повысить быстродействие, за счёт того что не нужно будет таскать между ядрами, синхронизируя кеши всех уровней. Вставить ник Quote
st_re Posted November 12, 2010 Posted November 12, 2010 net.inet.ip.dummynet.io_fast=1 Ситуацию не меняет? Вставить ник Quote
DemYaN Posted November 12, 2010 Author Posted November 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 .... Вставить ник Quote
_longhorn_ Posted November 12, 2010 Posted November 12, 2010 DemYaN dummynet не прибит к конкретному ядруОтсюда и нужно начинать, очень помогает. Вставить ник Quote
st_re Posted November 12, 2010 Posted November 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 ;) Вставить ник Quote
DemYaN Posted November 12, 2010 Author Posted November 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} Всем спасибо ! Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.