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

Параллелизм dummynet Распределение шейпинга на несколько процессоров

Например стоит увеличить net.inet.ip.dummynet.hash_size до 256

И продублировать buckets 256 при создании pipes. У меня, как оказалось 512 везде стоит.

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


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

Ну человеку, имеющему представления о программировании, должно быть интуитивно понятно, что если некий хэш имеет слишком малый размер, то он очень быстро заполняется при большом числе одновременных соединений. Чтобы обработать все новые и новые пакеты dummynet вынужден удалять старые записи и вносить новые, пересчитывая ключ, вместо того, чтобы просто хранить записи в памяти. Такой хэш является узким местом и отнимает процессорное время.

Думаю, не стоит лезть в исходники без сильной нужды, т.к. самостоятельные исправления трудно поддерживать. Лучше сначала покрутить переменные sysctl.

А установка еще одной переменной sysctl net.inet.ip.dummynet.expire=0 не будет способствовать снижению нагрузки на CPU правда за счет утилизации большего объема ОЗУ?

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


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

Интересная тема, посмотрел, подумал, попробую подвести итог по настройке думинета:

 

#define HASHSIZE 16 !!целое 2 в степени

посоветую ставить - корень из (макс_шейперов(и динамические и в обе стороны))

и оноже в шестнадцатиричном виде в конце

#define HASH(num) ((((num) >> 8) ^ ((num) >> 4) ^ (num)) & 0x0f)

 

 

net.inet.ip.dummynet.expire=1

размер хеша меньше и время поиска тоже

 

net.inet.ip.dummynet.max_chain_len: 16

макс динамических шейперов в 1 шаблоне

 

net.inet.ip.dummynet.hash_size: 64

макс_шейперов(и динамические и в обе стороны)

 

ну и на вырост все колличества шейперов множить на 2-4

 

 

 

допустим онлайн 250 учеток по 2 шейпера на учетку минимум - 512

в 1 тарифе до 110 учеток

с выростом в 4 раза

 

#define HASHSIZE 32 !!целое 2 в степени

#define HASH(num) ((((num) >> 8) ^ ((num) >> 4) ^ (num)) & 0x1f)

по моему будет эффективно для от 512 до 2048 шейперов

 

 

net.inet.ip.dummynet.max_chain_len: 512

net.inet.ip.dummynet.hash_size: 2048

 

покритикуйте пожалуста

 

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


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

А я продолжаю набивать 4-х ядерный ксеон нодами ng_car :) По 1500 в 10 тарифных планов, для начала :)

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


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

Интересная тема, посмотрел, подумал, попробую подвести итог по настройке думинета:

 

#define HASHSIZE 16 !!целое 2 в степени

посоветую ставить - корень из (макс_шейперов(и динамические и в обе стороны))

и оноже в шестнадцатиричном виде в конце

#define HASH(num) ((((num) >> 8) ^ ((num) >> 4) ^ (num)) & 0x0f)

 

 

net.inet.ip.dummynet.expire=1

размер хеша меньше и время поиска тоже

 

net.inet.ip.dummynet.max_chain_len: 16

макс динамических шейперов в 1 шаблоне

 

net.inet.ip.dummynet.hash_size: 64

макс_шейперов(и динамические и в обе стороны)

 

ну и на вырост все колличества шейперов множить на 2-4

 

 

 

допустим онлайн 250 учеток по 2 шейпера на учетку минимум - 512

в 1 тарифе до 110 учеток

с выростом в 4 раза

 

#define HASHSIZE 32 !!целое 2 в степени

#define HASH(num) ((((num) >> 8) ^ ((num) >> 4) ^ (num)) & 0x1f)

по моему будет эффективно для от 512 до 2048 шейперов

 

 

net.inet.ip.dummynet.max_chain_len: 512

net.inet.ip.dummynet.hash_size: 2048

 

покритикуйте пожалуста

Всё так, только в отличие от OID-ов в sysctl, изменение HASHSIZE требует пересборки ядра с последующим ребутом, потому ставим 64

Остальное крутим на ходу и ПОСТОЯННО контролируем распределение памяти.

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

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


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

А я продолжаю набивать 4-х ядерный ксеон нодами ng_car :) По 1500 в 10 тарифных планов, для начала :)

Сколько гигабит поток, и номер xeon'а ?

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


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

Интересная тема, посмотрел, подумал, попробую подвести итог по настройке думинета:
Значения sysctl-переменных, влияющих на работу dummynet, описаны в man и на странице автора http://www.iet.unipi.it/~luigi/ip_dummynet/ . При желании, можно найти и для ipfw.

 

net.inet.ip.dummynet.expire=1

размер хеша меньше и время поиска тоже

Не нужно гадать, читайте документацию. Там сказано: delete dynamic pipes when they become empty. Удаление записей для динамических пайпов, когда все пакеты кончаются. Если памяти много, то можно ставить 0.

 

net.inet.ip.dummynet.max_chain_len: 16

макс динамических шейперов в 1 шаблоне

Вы путаете понятия pipe и shaper. Shaper -- устройство для распределения полосы пропускания между абонентами. Pipe -- это очередь с дисциплиной token bucket.

 

допустим онлайн 250 учеток по 2 шейпера на учетку минимум - 512

в 1 тарифе до 110 учеток

с выростом в 4 раза

 

#define HASHSIZE 32 !!целое 2 в степени

#define HASH(num) ((((num) >> 8) ^ ((num) >> 4) ^ (num)) & 0x1f)

по моему будет эффективно для от 512 до 2048 шейперов

 

net.inet.ip.dummynet.max_chain_len: 512

net.inet.ip.dummynet.hash_size: 2048

Как уже говорилось, не следует экономить на памяти. Нужно прикинуть максимально возможное число пользователей, которое потянет данная машина, и сразу вбить максимальные размеры хэшей.

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


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

Всё так, только в отличие от OID-ов в sysctl, изменение HASHSIZE требует пересборки ядра с последующим ребутом, потому ставим 64

Остальное крутим на ходу и ПОСТОЯННО контролируем распределение памяти.

Вот один из моих шейперов. Никаких HASHSIZE не менял. Никакого распределения памяти не контролирую. Core2Quad 2.33Ghz.

last pid: 74032;  load averages:  2.29,  2.14,  2.06                                                                               up 91+22:04:32  12:01:42
83 processes:  11 running, 60 sleeping, 12 waiting
PU states:  0.0% user,  0.0% nice, 49.6% system,  0.3% interrupt, 50.1% idle
Mem: 15M Active, 9380K Inact, 107M Wired, 60K Cache, 14M Buf, 853M Free
Swap:

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
   11 root        1 171 ki31     0K    16K RUN    3 1208.5 64.94% idle: cpu3
   14 root        1 171 ki31     0K    16K RUN    0 1066.7 58.94% idle: cpu0
   13 root        1 171 ki31     0K    16K RUN    1 1122.2 57.71% idle: cpu1
   12 root        1 171 ki31     0K    16K RUN    2 1159.7 50.98% idle: cpu2
  898 root        1  43    -     0K    16K CPU1   1 430.7H 22.56% em1_rx_kthread_3
  895 root        1  43    -     0K    16K WAIT   2 442.1H 22.36% em0_rx_kthread_3
  897 root        1  43    -     0K    16K WAIT   1 431.1H 22.36% em1_rx_kthread_2
  894 root        1  43    -     0K    16K RUN    2 441.6H 21.48% em0_rx_kthread_2
   29 root        1  43    -     0K    16K RUN    2 430.9H 21.48% em1_rx_kthread_0
   30 root        1  43    -     0K    16K CPU0   1 430.9H 21.39% em1_rx_kthread_1
   25 root        1  43    -     0K    16K CPU2   2 442.7H 21.24% em0_rx_kthread_0
   26 root        1  43    -     0K    16K RUN    2 442.4H 21.04% em0_rx_kthread_1
   28 root        1 -68    -     0K    16K WAIT   0  98.7H  3.42% em1_txcleaner
   24 root        1 -68    -     0K    16K WAIT   3  96.5H  1.51% em0_txcleaner
   15 root        1 -32    -     0K    16K WAIT   2  18.5H  0.05% swi4: clock
   35 root        1 -68    -     0K    16K -      0 549.1H  0.00% dummynet
   17 root        1 -44    -     0K    16K WAIT   3  10:26  0.00% swi1: net

 

# ipfw pipe show | wc -l

2792

 

Одна натяжечка, это не роутер, а бридж.

 

# netstat -I bridge0 -w1

input (bridge0) output

packets errs bytes packets errs bytes colls

134326 0 86629336 132768 0 85225424 0

127142 0 80147704 126432 0 79723206 0

123273 0 76538898 122666 0 76209182 0

125034 0 77501077 124057 0 76791711 0

120795 0 73479480 120118 0 73020397 0

119625 0 73819005 118862 0 73348189 0

 

В ЧНН нагрузка в два раза больше. Но dummynet больше чем 0.1% не жрет.

 

# uname -a

FreeBSD acd 7.0-RELEASE-p4 FreeBSD 7.0-RELEASE-p4 #0: Tue Feb 10 13:39:29 MSK 2009 m@farm7_64e.lan:/usr/src/sys/amd64/compile/ACDSMP_amd64_wo_poll amd64

 

 

Никаких nat'ов и netflow нет, голый шейпер.

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


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

# ipfw pipe show | wc -l

2792

уверен что эта цыфра показывает к-во пайпов :)?

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


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

Xeon: CPU: Intel® Xeon® CPU E5410 @ 2.33GHz (2339.15-MHz K8-class CPU)

Потоки небольшие ~ 1Gbit/s (куда нам до Вас), но судя по тому, что сейчас загрузка только одного ядра близка к 60% продолжать набивать его я смогу еще очень долго.

 

Кстати: swi: net - как тут когда-то отмечалось у меня пока не растет и составляет ~10-15%.

 

P.S> А потом скорее доставлю еще один такой же ксеон, еще четыре гига памяти и еще 2-е двух головые сетевые.

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

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


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

уверен что эта цыфра показывает к-во пайпов :)?

Эта цифра показывает количество динамических очередей. Пайпов там 16 штук. На каждый тариф по две трубы.

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


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

уверен что эта цыфра показывает к-во пайпов :)?

Эта цифра показывает количество динамических шейперов. Пайпов там 16 штук. На каждый тариф по две трубы.

нам бы твоих продавцов. Наши насочиняли 300 тарифов с разными скоростями
Изменено пользователем chert

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


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

нам бы твоих продавцов. Наши насочиняли 300 тарифов с разными скоростями

Это потому что ты их не запугал с самого начала, как это сделал я. :-)

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


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

нам бы твоих продавцов. Наши насочиняли 300 тарифов с разными скоростями

Это потому что ты их не запугал с самого начала, как это сделал я. :-)

а если клиенты юрики ?

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


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

а если клиенты юрики ?

А продажнику что, есть разница, на кого готовить линейку тарифов ? У меня например унифицировано все.

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


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

а если клиенты юрики ?

А продажнику что, есть разница, на кого готовить линейку тарифов ? У меня например унифицировано все.

ээ я о том что если у юрика сетка то папйп или queue по маске не сделаеш и соответственно получится по pipe на юрика

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


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

а если клиенты юрики ?

Все наши клиенты - юр. лица, но это не значит, что мы будем делать под каждого отдельный т.п.

Разговор о "кастомном" т.п. начиается от 10Mbit/s и выше.

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


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

ээ я о том что если у юрика сетка то папйп или queue по маске не сделаеш и соответственно получится по pipe на юрика

У меня все юрики _на_анлиме_ подключаются через CPE рутер с натом. Кроме того, если есть достаточное количество юриков с индивидуальными тарифами - никто не мешает ставить под них отдельный шейпер.

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


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

у меня более 50% продаваемой полосы занимают юрики с тарифами от 10-ти и у каждого своя сетка раельных адрессов.

ставить под каждого отдельный шейпер? :)

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

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


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

у меня более 50% продаваемой полосы занимают юрики с патрифами от 10-ти и у каждого своя сетка раельных адрессов.

ставить под каждого отдельный шейпер? :)

Полоса какая ?

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


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

у меня более 50% продаваемой полосы занимают юрики с патрифами от 10-ти и у каждого своя сетка раельных адрессов.

ставить под каждого отдельный шейпер? :)

Полоса какая ?

300 mbit/s in + 300 mbit/s out

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


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

300 mbit/s in + 300 mbit/s out

Это детская нагрузка для современных процов. Кроме того, я посмотрел одесские цены на корпоративные анлимы с реальными ip статикой... "голодаем и скитаемся, на шейперы не хватает".

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


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

у меня более 50% продаваемой полосы занимают юрики с тарифами от 10-ти и у каждого своя сетка раельных адрессов.

ставить под каждого отдельный шейпер? :)

В случае ng_car параллельно какая у абонента сетка. Заворачиваешь в нужную ноду все нужные сети и все.

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


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

Jab: твои мосты живут с ULE или 4BSD? какое производительнее будет?

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


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

kern.sched.name: ULE

 

Но на самом деле там разница на глаз не особо заметна. Они же под одну задачу заточены.

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


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

Join the conversation

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

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

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

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

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

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

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