Как делиться ?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Как делиться ?

irix
Hello Openbsd,

  Как будет делиться трафик между потоками от разных клиентов внутри одной очереди ?

  Например вы создали очередь

  queue big_client bandwidth 2Mb cbq

  В  эту  очередь  вы  запихали  например  2  ипишнега  192.168.1.1  и
  192.168.1.2

  pass in on $int_if from 192.168.1.1 queue big_client
  pass in on $int_if from 192.168.1.2 queue big_client

  Оба  клиента начинают активно качать, 1.1 качает в 30 потоков, а 1.2
качает в 100 потоков.

Каким  образом  будет  распределяться пропускная способность очереди в
случае использования cbq и в случае hfsc ?

В  линуксе  для  краевых  дисциплин  (краевой  очереди)  используються
алгоритмы sfq или tbf

sfq  стремиться  распределить  пропускную способность равномерно между
всеми  качальщиками незавизимо от количества потоков который каждый из
них делает.
--
Best regards,
 irix                          mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Как делиться ?

Stanislav Kruchinin
irix wrote:

>   Как будет делиться трафик между потоками от разных клиентов внутри одной очереди ?
>
>   Например вы создали очередь
>
>   queue big_client bandwidth 2Mb cbq
>
>   В  эту  очередь  вы  запихали  например  2  ипишнега  192.168.1.1  и
>   192.168.1.2
>
>   pass in on $int_if from 192.168.1.1 queue big_client
>   pass in on $int_if from 192.168.1.2 queue big_client
>
>   Оба  клиента начинают активно качать, 1.1 качает в 30 потоков, а 1.2
> качает в 100 потоков.
>
> Каким  образом  будет  распределяться пропускная способность очереди в
> случае использования cbq и в случае hfsc ?

Если заполнение очереди далеко от переполнения, то полоса будет делиться
пропорционально пакетрейту и среднему размеру пакетов к каждому юзеру, т.к.
трафик от всех IP идет в общую очередь. Количество потоков ничего не говорит о
пакетрейте. Можно наоткрывать кучу медленных соединений и получить низкий пакетрейт.

>
> В  линуксе  для  краевых  дисциплин  (краевой  очереди)  используються
> алгоритмы sfq или tbf
>
> sfq  стремиться  распределить  пропускную способность равномерно между
> всеми  качальщиками незавизимо от количества потоков который каждый из
> них делает.

Не между всеми "качальщиками", а между всеми потоками (flows), которые
определяются уникальной парой src-ip:src-port - dst-ip:dst-port. Т.е. SFQ можно
обмануть, открыв много соединений. В патче ESFQ можно было задавать хэширование
по IP-адресам без портов. В mainline еще есть какие-то round-robin'ы (WRR и
DRR), они примерно для тех же целей, но еще позволяют задавать определенные веса.


Reply | Threaded
Open this post in threaded view
|

Re: Как делиться ?

irix
Hello Stanislav,

Tuesday, October 13, 2009, 4:55:39 AM, you wrote:

SK> irix wrote:

>>   Как будет делиться трафик между потоками от разных клиентов внутри одной очереди ?
>>
>>   Например вы создали очередь
>>
>>   queue big_client bandwidth 2Mb cbq
>>
>>   В  эту  очередь  вы  запихали  например  2  ипишнега  192.168.1.1  и
>>   192.168.1.2
>>
>>   pass in on $int_if from 192.168.1.1 queue big_client
>>   pass in on $int_if from 192.168.1.2 queue big_client
>>
>>   Оба  клиента начинают активно качать, 1.1 качает в 30 потоков, а 1.2
>> качает в 100 потоков.
>>
>> Каким  образом  будет  распределяться пропускная способность очереди в
>> случае использования cbq и в случае hfsc ?

SK> Если заполнение очереди далеко от переполнения, то полоса будет делиться
SK> пропорционально пакетрейту и среднему размеру пакетов к каждому юзеру, т.к.
SK> трафик от всех IP идет в общую очередь. Количество потоков ничего не говорит о
SK> пакетрейте. Можно наоткрывать кучу медленных соединений и получить низкий пакетрейт.

>>
>> В  линуксе  для  краевых  дисциплин  (краевой  очереди)  используються
>> алгоритмы sfq или tbf
>>
>> sfq  стремиться  распределить  пропускную способность равномерно между
>> всеми  качальщиками незавизимо от количества потоков который каждый из
>> них делает.

SK> Не между всеми "качальщиками", а между всеми потоками (flows), которые
SK> определяются уникальной парой src-ip:src-port - dst-ip:dst-port. Т.е. SFQ можно
SK> обмануть, открыв много соединений. В патче ESFQ можно было задавать хэширование
SK> по IP-адресам без портов. В mainline еще есть какие-то round-robin'ы (WRR и
SK> DRR), они примерно для тех же целей, но еще позволяют задавать определенные веса.


Судя  по  вашему  ответу, могу предположить что в внутри одной очереди
altq, действия по выравниванию между потоками подобны действиям esfq в
линуксе. Правильно ?

Есть  ли  отличия  по  выравниванию  если использывать разные шедулеры
например cbq и hfsc ?

Кстати  в  старом  altqd, cbq умел балансировать между очередями двумя
режимами  cbq-wrr(weighted-round  robin)  и  cbq-prr (packet-by-packet
round robin). В pf/altq насколько я мог видеть остался только cbq-wrr.
Чем он лучше cbq-prr если его оставили ?






--
Best regards,
 irix                            mailto:[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Как делиться ?

Stanislav Kruchinin
irix wrote:
>
> Судя  по  вашему  ответу, могу предположить что в внутри одной очереди
> altq, действия по выравниванию между потоками подобны действиям esfq в
> линуксе. Правильно ?

Нет, т.к. sfq случайным образом перемешивает пакеты от всех потоков, и таким
образом обеспечивает fair queuing. Без перемешивания один поток с мощным
пакетрейтом забьет всю очередь.

>
> Есть  ли  отличия  по  выравниванию  если использывать разные шедулеры
> например cbq и hfsc ?
>
> Кстати  в  старом  altqd, cbq умел балансировать между очередями двумя
> режимами  cbq-wrr(weighted-round  robin)  и  cbq-prr (packet-by-packet
> round robin). В pf/altq насколько я мог видеть остался только cbq-wrr.
> Чем он лучше cbq-prr если его оставили ?

Читайте документацию по altq и статьи Kenjiro Cho.


Reply | Threaded
Open this post in threaded view
|

Re: Как делиться ?

Anton Maksimenkov-2
13 октября 2009 г. 16:23 пользователь Stanislav Kruchinin
<[hidden email]> написал:
> irix wrote:
>>
>> Судя  по  вашему  ответу, могу предположить что в внутри одной очереди
>> altq, действия по выравниванию между потоками ...

Я что-то не помню в коде altq чтобы, кроме назначения собственно
очереди, дальше внутри очереди ещё что-либо делалось. Могу ошибаться,
но если первое предложение верно, то внутри очереди "кто успел тот и
съел".
--
antonvm