Я пытаюсь ограничить пропускную способность внутри своих контейнеров. Я пробовал использовать следующие команды, но думаю, что это не дает результата.
cd /sys/fs/cgroup/net_cls/
echo 0x1001 > A/net_cls.classid # 10:1
echo 0x1002 > B/net_cls.classid # 10:2
tc qdisc add dev eth0 root \
handle 10: htb
tc class add dev eth0 parent 10: \
classid 10:1 htb rate 40mbit
tc class add dev eth0 parent 10: \
classid 10:2 htb rate 30mbit
tc filter add dev eth0 parent 10: \
protocol ip prio 10 \
handle 1: cgroup
Здесь A и B - это контейнеры, созданные с помощью этой команды.
lxc-execute -n A -f configfile /bin/bash
lxc-execute -n B -f configfile /bin/bash
В то время как файл конфигурации содержит только эту запись:
lxc.utsname = test_lxc
После запуска контейнера я запустил vsftpd внутри контейнера A и пытаюсь получить доступ к файлам с помощью ftp-клиента с другого компьютера. Затем я убил vsftpd в контейнере A и запустил vsftpd в контейнере B и попытался получить доступ к файлам с помощью ftp-клиента с другой машины.
Никакой разницы в производительности я не наблюдаю, если уж на то пошло, она не ближе к 40/30 Мбит.
Пожалуйста, поправьте меня, есть ли здесь что-нибудь не так.
Проблема здесь плохо документирована, но я уже сталкивался с ней раньше. В 64-битных системах отображаемое вами значение будет не представлен как 16-битное целое, но 32-битное целое число.
Попробуйте заменить:
echo 0x1001 > A/net_cls.classid # 10:1
echo 0x1002 > B/net_cls.classid # 10:2
С участием
echo 0x00100001 > A/net_cls.classid # 10:1
echo 0x00100002 > B/net_cls.classid # 10:2
Это должно решить вашу проблему.
Примечание: На самом деле нет необходимости вводить ведущие нули в начале, но для ясности я добавил их.
Многие из контейнеров без гипервизора (lxc, jails), как правило, имеют изворотливое / неполное измерение (disk iops, net), которое влияет на другие контейнеры. Если ограничение внешнего транзита является основной проблемой, сначала установите прозрачный брандмауэр (например, ArmorLogic, Barracuda и т. Д.) Перед ними.
В любом случае, обязательно проведите нагрузочный тест, чтобы увидеть, имеет ли это значение.
(Подсказка: Heroku запускает LXC. heroku run bash
)