управление трафиком Linux qdisc mq pfifo_fast: куда поставить netem?
Когда я вывожу список qdisc в моей системе, я вижу qdisc mq и несколько qdisc pfifo_fast. Кажется, что все pfifo_fast имеют старший номер, который совпадает с их родительским номером. Или я неправильно понимаю иерархию или вижу иерархию там, где ее нет? Может быть, pfifo_fast не являются потомками mq?
bjb@rhino:/opt/blueeyes/houshold$ sudo tc qdisc show dev wlan0
qdisc mq 0: root
qdisc pfifo_fast 0: parent :4 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: parent :3 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: parent :2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: parent :1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
bjb@rhino:/opt/blueeyes/houshold$
Верно ли, что если опущено главное или младшее число, оно считается равным нулю?
Родителями pfifo_fast являются: 1, :2, :3, :4 — будут ли это классы в mq? Делаю вывод, что, поскольку я прочитал, что все qdiscs имеют младшие номера 0, а классы имеют ненулевые младшие номера. Итак, вы ищете подтверждение того, что qdisc mq имеет несколько (в данном случае 4) неявных классов — возможно, по одному на каждую очередь драйвера? И что к этим классам привязаны pfifo-fast qdiscs. Если это не так - поправьте меня.
Как трафик распределяется по четырем pfifo_fast? Сбалансирована ли нагрузка между ними? Если я хочу использовать netem для всего трафика, исходящего из этого интерфейса, куда бы я его поместил? Должен ли я заменить всю очередь pfifo экземплярами netem? Или поместить netem как дочерний элемент root, а mq как дочерний элемент netem и сделать pfifo_fast дочерним элементом mq? Или что-то другое? Может быть, просто иметь netem в корне и забыть обо всем остальном? Но если я это сделаю, потеряю ли я возможность использовать все очереди драйверов интерфейса для каждого ядра, которые, как я понимаю, предоставляет mq?
1 ответ
Верно ли, что если опущено главное или младшее число, оно считается равным нулю?
Да.
Родителями pfifo_fast являются:1, :2, :3, :4 — будут ли это классы в mq?
Да. Вы можете заменить qdisc "mq" по умолчанию (0:) на другой.tc qdisc add dev wlan0 root mqи вы увидите ту же иерархию, но с другим старшим номером, отличным от 0, который, следовательно, будет отображаться какtc qdisc show.
Итак, вы ищете подтверждение того, что qdisc mq имеет несколько (в данном случае 4) неявных классов — возможно, по одному на каждую очередь драйвера?
Точно. Один класс для каждой очереди передачи устройства в соответствии с определенным драйвером и оборудованием. 1
Как трафик распределяется по четырем pfifo_fast? Сбалансирована ли нагрузка между ними?
Это делается не самим планировщиком mq, а обычным управлением передачей пакетов, которое пытается повысить производительность за счет локализации 2 . «mq» называется фиктивным планировщиком, вероятно, потому, что он самостоятельно не принимает никаких настраиваемых политических решений.
Если я хочу использовать netem для всего трафика, исходящего из этого интерфейса, куда бы я его поместил? Должен ли я заменить всю очередь pfifo экземплярами netem? Или поместите netem как дочерний элемент root...
Вероятно как дочерний рут заменяющий планировщик "mq". Технически вы также можете заменить четыре экземпляра pfifo_fast, но я не вижу в этом преимущества.
... и mq является дочерним элементом netem, а pfifo_fast является дочерним элементом mq?
Это было бы невозможно, потому что «mq» можно использовать только в корне.
Может быть, просто иметь netem в корне и забыть обо всем остальном?
Да
Но если я это сделаю, потеряю ли я возможность использовать все очереди драйверов интерфейса для каждого ядра?
Нет, «mq» более или менее обеспечивает просмотр очередей передачи драйвера путем создания соответствующих классов. Если вы замените его, вы просто потеряете представление, но драйвер устройства с несколькими очередями по-прежнему будет иметь и использовать несколько очередей передачи.
Отнеситесь к этому с недоверием. @all: Мне бы хотелось, чтобы меня поправили!