Jump to content
Калькуляторы

linux - скорость создания интерфейсов чем больше, тем медленнее создаётся

При создании большого количества интерфейсов возникает проблема в том, что чем больше их уже существует в системе, тем медленнее они создаются(проверял на ядрах 2.6.32 и 3.2.17 из репозиториев debian). Может кто-то сказать почему это происходит и как вылечить?

 

Пример скрипта, который наглядно это демонстрирует:

 

vlan.php

<?php
system("ifconfig eth1 up");
system("vconfig add eth1 2");
system("ifconfig eth1.2 up");

system("ifconfig eth1 up");
system("vconfig add eth1 3");
system("ifconfig eth1.3 up");

system("ifconfig eth1 up");
system("vconfig add eth1 4");
system("ifconfig eth1.4 up");

system("ifconfig eth1 up");
system("vconfig add eth1 5");
system("ifconfig eth1.5 up");

for($i=1;$i<=1000;$i++)
{
   system("vconfig add eth1.2 $i");
   system("ifconfig eth1.2.$i up");

   system("vconfig add eth1.3 $i");
   system("ifconfig eth1.3.$i up");

   system("vconfig add eth1.4 $i");
   system("ifconfig eth1.4.$i up");

   system("vconfig add eth1.5 $i");
   system("ifconfig eth1.5.$i up");

}
?>

 

выполнять php -f vlan.php (из-под рута)

 

Если у кого-то не тормозит скрипт под конец, то поделитесь версией ОС(и ядра, если не родное).

 

Такая же ситуация возникает не только при создании .1Q или Q-in-Q интерфейсов, но и при попытке создать большое кол-во ppp-интерфейсов

Share this post


Link to post
Share on other sites

Попробуйте использовать ip вместо ifconfig/vconfig

Share this post


Link to post
Share on other sites

а чо дергаете постоянно eth1? сложно поставить проверку на его состояние из системных переменных)

Share this post


Link to post
Share on other sites
попробовал, никакой разницы, что ip, что vconfig+ifconfig
тогда похоже вы не добьетесь большой скорости создания/удаления интерфейсов, разве что ядро найдете где попатчить. Вам часто и быстро нужно создавать много интерфейсов?

Share this post


Link to post
Share on other sites

Вам часто и быстро нужно создавать много интерфейсов?

 

да

Share this post


Link to post
Share on other sites

Если кому-то интересно, то проблема решена в 3.5.0-rc1(сегодняшний релиз ядра)

 

3.5.0-rc1

# time php -f vlan.php > /dev/null

real 0m35.963s

user 0m0.544s

sys 0m5.940s

 

3.3.7

# time php -f vlan.php > /dev/null

real 7m5.256s

user 0m0.636s

sys 6m20.792s

 

2.6.32

# time php -f vlan.php > /dev/null

real 7m38.243s

user 0m4.836s

sys 7m34.624s

Share this post


Link to post
Share on other sites

А скорость удаления не тестировали?

 

PS 36 секунд это быстрее конечно чем 7 минут, но всё равно не то чтобы очень быстро, как например 1 сек. Не смотрели, на что именно уходит время?

Edited by voron

Share this post


Link to post
Share on other sites

Там куча инициализаций и добавлений во всякие списки. Добавления, как правило, через экслюзивный доступ через блокировку.

Плюс там ещё UP интерфейса, это ещё время...

Share this post


Link to post
Share on other sites

будет время - посмотрю как профилировать ядро(раньше не занимался низкоуровневым программированием/отладкой/профилированием)

 

скорость удаления тестировал, она меньше чем скорость создания

Share this post


Link to post
Share on other sites
ip и batch режим используйте
ppp интерфейсы тоже создаются и удаляются медленно, особенно после 1000

Share this post


Link to post
Share on other sites

Скорость создания очень сильно просаживается при включении опции SYSCTL_SYSCALL_CHECK (Kernel hacking -> Sysctl checks), но и без нее особо не блещет и зависит от кол-ва существующих интерфейсов.

Share this post


Link to post
Share on other sites

Vlan на Debiane очень зависит от дров и сетевых, должна быть поддержка протокола 8021q сетевой картой, и модуль 8021q должен быть подгружен в системе, очень хорошо работают c vlan сетевые D-Link DGE-528T и Intel E1G42ETBLK, значение mtu стандартное как на коммутаторах, простые дешёвые сетевые будут тупить при перезагрузке, прописываем vlan так

 

auto vlan333

iface vlan333 inet static

address 10.90.90.1

netmask 255.255.255.0

mtu 1500

vlan_raw_device eth1

 

поднимаем или удаляем так ifup vlan333, ifdown vlan333

Edited by alexaaa

Share this post


Link to post
Share on other sites

поднимаем или удаляем так ifup vlan333, ifdown vlan333

Всё равно тупить будет, а уж грузиться скока оно будет, если там под несколько сотен вланом, так ето вообще жесть

Share this post


Link to post
Share on other sites
ip и batch режим используйте
можно примеры batch-режима у ip, что-то в мане не нашел ничего позволяющего делать а-ля
ip addr add 127.0.0.2/32 127.0.0.3/32 dev lo

Share this post


Link to post
Share on other sites

будет время - посмотрю как профилировать ядро

iperf, мануал есть, указать на vmlinux (непакованный необрезанный бинарник со всем дебаг инфо) - и вперед...

Share this post


Link to post
Share on other sites

а сетевушка у вас какая, у меня DGE-560T была тупила постоянно перед и после рубета, с DGE-528T работает нормально.

Edited by alexaaa

Share this post


Link to post
Share on other sites
iperf, мануал есть, указать на vmlinux (непакованный необрезанный бинарник со всем дебаг инфо) - и вперед...

Абсолютно в точку. Только не iperf, а oprofile.

Share this post


Link to post
Share on other sites
ip и batch режим используйте
можно примеры batch-режима у ip, что-то в мане не нашел ничего позволяющего делать а-ля
ip addr add 127.0.0.2/32 127.0.0.3/32 dev lo

ip -force -batch add.batch
centaur ~ # cat add.batch 
addr add 127.0.0.2/32 dev lo
addr add 127.0.0.3/32 dev lo
addr add 127.0.0.4/32 dev lo
centaur ~ # ip addr show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet 127.0.0.2/32 scope host lo
   inet 127.0.0.3/32 scope host lo
   inet 127.0.0.4/32 scope host lo

Share this post


Link to post
Share on other sites

а сетевушка у вас какая, у меня DGE-560T была тупила постоянно перед и после рубета, с DGE-528T работает нормально.

 

например такая

02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM57711E 10-Gigabit PCIe

 

но это не сильно принципиально в данном случае

Share this post


Link to post
Share on other sites

Тема актуальна. Скажите кто как решает? особенно интересует решение на RH-совместимых дистрибутивах.

Share this post


Link to post
Share on other sites

klisha

Я просто собираю ядро из последних. В последний раз собирал 3.6.9 ванильное, всё отлично работает, интерфейсы очень быстро создаются

Share this post


Link to post
Share on other sites

Я правильно понимаю, что вы подобие "ip unnumbered" + QinQ на брасах делаете?

Если не секрет - сколько одна коробка вланов терминирует + сколько трафика обслуживает? =)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this