Что такое отдельный поток в Linux fq_codel?

Я устанавливаю подтверждение концепции для ограничения входящего трафика на терминале (клиент):

eth0 -> ifb0 -> htb -> filter by ip -> htb rate -> fq_codel+ecn

У меня есть 2 исходных ips для конкретной программы, которую я хочу регулировать. Рассматриваемая программа открывает кучу tcp-соединений (загрузки, таким образом, входной газ), и я хотел бы ограничить общую входную полосу пропускания, которую она использует (сделано), и иметь справедливое планирование между соединениями с одним и тем же IP-адресом (этот вопрос).

В конце есть 1 ведро с добавленной скоростью и 1 fq_codel пример.

У меня это работает, но у меня есть несколько вопросов:

  • конечно, у codel есть отдельная очередь на протокол (tcp vs udp)?
  • у codel есть отдельные очереди на исходный IP?
  • у codel есть отдельная очередь на соединение tcp?
  • я должен вручную разделить / пометить потоки?

В соответствии с идентификатором потока интернет-исследований "хэш 5-кортежа", вопрос заключается в том, какие элементы пакета являются частью 5-кортежа? Включены ли порты источника и назначения?

2 ответа

Решение

По http://mdh.diva-portal.org/smash/get/diva2:754020/FULLTEXT01.pdf (чья-то кандидатская диссертация):

Потоки разделяются путем хеширования 5-значного кортежа из пакета (по умолчанию это src / dest port / ip и protocol) вместе со случайным числом

Помимо бита по умолчанию, это понятно.

Похоже, порты источника и назначения включены, по крайней мере по умолчанию:

http://lxr.free-electrons.com/source/net/core/flow_dissector.c#L655

655 /**
656  * __skb_get_hash: calculate a flow hash
657  * @skb: sk_buff to calculate flow hash from
658  *
659  * This function calculates a flow hash based on src/dst addresses
660  * and src/dst port numbers.  Sets hash in skb to non-zero hash value
661  * on success, zero indicates no valid hash.  Also, sets l4_hash in skb
662  * if hash is a canonical 4-tuple hash over transport ports.
663  */
664 void __skb_get_hash(struct sk_buff *skb)
Другие вопросы по тегам