Eu tenho isso para trabalhar no hfsc. Eu suponho que "X" no seu exemplo é 100mbit, mas isso poderia ser qualquer coisa, claro ..
O truque aqui é criar uma classe de árvore assim:
+--------------------------------------------------------------+ +---------------------+
| | | 1:1 |
| root | |---------------------|
| + | | Rate: 100mbit |
| | | | Upper Rate: 100mbit |
| | | | |
| | | | |
| | | | |
| +----v------+ | +---------------------+
| | 1:1 | |
| | | | +---------------------+
| +--+---+----+ | | 1:10 |
| | | | |---------------------|
| | | | | Rate: 100mbit |
| | | | | Upper Rate: 100mbit |
| | | | | |
| +----------+------+ +--------+----------+ | | |
| | 1:10 | | 1:11 | | | |
| | | | | | +---------------------+
| +----------+ +----------+ |
| | +---------------------+
| | | 1:11 |
| | |---------------------|
| | | Rate: 10kbit |
+--------------------------------------------------------------+ | Upper Rate: 100mbit |
| |
| |
| |
+---------------------+
A mágica acontece porque a classe 1:10 (classe padrão) é configurada para ter sempre uma largura de banda garantida de 100mbit, enquanto a classe 'lenta' 1:11 oferece uma largura de banda garantida de apenas 10kbit para 100mbit.
Isso força a classe raiz (1: 1) a sempre honrar as necessidades de 1:10 acima de 1:11.
Coisas a serem observadas:
- Não use o destino CLASSIFY do iptables para colocar o tráfego em 1:11. Está muito lento em fazer classificações. Use filtros de controle de tráfego. Ou se você tiver um número de aplicativos para entrar aqui e as portas podem variar para filtrar, use um cgroup.
- Definir um alvo padrão no hfsc para 1:10.
- Você provavelmente deve definir o link "lento" como o tamanho máximo do segmento TCP do seu host. Dessa forma, você pode tentar colocar seu aplicativo de envio emperrado na fila lenta para bloquear por longos períodos sem que o kernel renegocie os tamanhos das janelas e outros enfeites.
Testei isso com dois aplicativos concorrentes enviando dados o mais rápido possível para um host vizinho em dois serviços. Onde um dos serviços estava na aula 1:11. Ambos enviaram 5 segundos de tráfego ao longo de 100mbit (assim, 60MB de dados foram transmitidos). Ao correr sem classe, como esperado, ambos terminam em 10 segundos (ambos compartilhando o link para que o tempo seja dividido igualmente).
Com esta configuração de QoS, o serviço prioritário terminou em 5 segundos, enquanto o serviço de baixa prioridade terminou em 10 (como se a baixa prioridade estivesse aguardando que a alta prioridade terminasse primeiro), o que eu acho que é o que você deseja.