Перейти к содержимому
Калькуляторы

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-интерфейсов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

voron

попробовал, никакой разницы, что ip, что vconfig+ifconfig

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

да

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если кому-то интересно, то проблема решена в 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Изменено пользователем voron

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ip и batch режим используйте
ppp интерфейсы тоже создаются и удаляются медленно, особенно после 1000

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем alexaaa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем alexaaa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

klisha

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.