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

Linux-бордер на виртуальной машине кто-то делал?

Скажу сразу - у меня бордер на VM, и мне он не нравится.

 

Теперь уже понимаю, что скорее всего это извращение, но может быть, кто-то имеет похожий опыт, и поделится?

 

У меня проблема с производительностью.

 

Конфигурация системы:

Xen hypervisor 3.4.3,

2 x Xeon E5405 (по 4 ядра, 2.00Ghz),

сетевуха одна Broadcomm NetXtreme BCM5722 (драйвер tg3 последний). На предыдущем сервере была Intel-овская сетевуха с драйвером e1000e, и ситуация была та же самая.

 

Трафика - 60 Мбит, 15-20kpps.

 

ресурсы на бордере:

paravirtOps-ядро 2.6.31

2 x vcpu

1G ram

 

Задачи на бордере:

  • nat (около 300 000 трансляций, упирается в ip_conntrack_max),
  • шейпер HTB (около 1500 классов и фильтров, фильтры захешированы),
  • 1 x BGP full-view,
  • несильно развесистый iptables (около 20-30 match-ей, через которые проходит каждый пакет)
  • netflow-сенсор на libpcap (softflowd)

 

xentop говорит, что border ест от 90 до 150% cpu. И при этом еще 55% ест dom0, который ничем не занят, кроме бриджевания пакетов с физической сетевухи в vif виртуальной машины.

 

top на самом бордере (виртуальном):

top - 21:41:51 up 5 days, 12:50,  1 user,  load average: 0.37, 0.52, 0.44
Tasks:  53 total,   2 running,  51 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.3%us,  3.7%sy,  0.0%ni, 71.0%id,  0.0%wa,  0.0%hi, 19.8%si,  0.2%st
Mem:    793192k total,   767404k used,    25788k free,        0k buffers
Swap:   524280k total,      380k used,   523900k free,   309604k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30939 nobody    20   0 17692  16m  640 R   52  2.1   2012:32 softflowd
31024 nobody    20   0  4932 3620  600 S   10  0.5 205:28.23 softflowd
1799 quagga    20   0  158m 155m 1148 S    3 20.1 408:28.82 bgpd
    1 root      20   0  1988  648  596 S    0  0.1   0:01.97 init

 

Выключение softflowd картины радикально не меняет - в xentop на dom0 вместо 90% становится 65-70, и на dom0 по-прежнему 55.

 

`mpstat 1` на боредере говорит так:

09:43:44 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
09:43:45 PM  all    4.64    0.00    4.30    0.00    0.33   19.87    0.33   70.53  19579.00
09:43:46 PM  all    7.85    0.00    4.10    0.00    0.00   18.77    0.00   69.28  18767.00
09:43:47 PM  all    4.21    0.00    3.88    0.00    0.00   18.45    0.32   73.14  19104.00
09:43:48 PM  all    4.26    0.00    3.28    0.00    0.00   19.34    0.33   72.79  18797.00

 

Бросается в глаза очень большое количество прерываний и 20% softirq.

 

А на dom0 их еще больше:

`mpstat 1`

09:50:11 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
09:50:12 PM  all    0.00    0.00    0.13    0.00    0.00    1.02    0.76   98.09  35237.25
09:50:13 PM  all    0.00    0.00    0.00    0.00    0.00    0.62    0.86   98.52  35934.65
09:50:14 PM  all    0.00    0.00    0.00    0.00    0.00    1.49    0.62   97.89  36420.79
09:50:15 PM  all    0.00    0.00    0.00    0.00    0.00    0.86    0.86   98.28  35048.51
09:50:16 PM  all    0.00    0.00    0.00    0.00    0.00    0.99    0.87   98.14  35116.83

 

`cat /proc/interrupts` на dom0 (ненужное поскипал):

           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7
1275: 1799227419          0          0          0          0          0          0          0        Phys-irq  peth0
1321: 3439284801          0          0          0          0          0          0          0     Dynamic-irq  vif13.0

Т.е., прерывания генерятся не только на каждый принятый пакет на сетевухе, но и на каждый принятый и на каждый переданный в вирт. интерфейс xen пакет.

 

Подозреваю, что мои проблемы кроются в большом количестве прерываний из-за неэффективности работы драйверов xen с прерываниями, использовании единственной сетевухи на вход и выход и неэффективном способе снятия netflow.

 

Я собираюсь переводить бордер на физическую машину с многопортовой сетевухой, и сомневаюсь - позволит ли это радикально уменьшить нагрузку?

И был бы очень рад найти выход, чтобы оставить бордер на виртуальной машине.

 

Как можете посоветовать прооптимизировать без перевода на физическую машину?

Действительно ли проблемы именно в том, что я обозначил, или я не вижу очевидного?

Кто как снимает netflow и сколько ресурсов у вас на это уходит?

 

Заранее спасибо за ответы.

Edited by Алексей Андриянов

Share this post


Link to post
Share on other sites
Кто как снимает netflow и сколько ресурсов у вас на это уходит?
http://ineu.su/blog/2008/09/27/optimalnyj-netflow-sensor/

За год использования абсолютно никаких нареканий, юзерспейсовые сенсоры вспоминаю как страшный сон.

Share this post


Link to post
Share on other sites
Кто как снимает netflow и сколько ресурсов у вас на это уходит?
http://ineu.su/blog/2008/09/27/optimalnyj-netflow-sensor/

За год использования абсолютно никаких нареканий, юзерспейсовые сенсоры вспоминаю как страшный сон.

Я его пробовал, и у меня на нем ядро периодически падало.

Share this post


Link to post
Share on other sites

Я его пробовал, и у меня на нем ядро периодически падало.

Странно это. У меня без проблем работало на диапазоне ядер с 2.6.26 до 2.6.30, на обычных одиночных системах, в xen-виртуалках, в kvm-виртуалках...

Share this post


Link to post
Share on other sites

Домен у вас HVM? Интерфейс отдан гостевому домену через VT-d?

Share this post


Link to post
Share on other sites
Странно это. У меня без проблем работало на диапазоне ядер с 2.6.26 до 2.6.30, на обычных одиночных системах, в xen-виртуалках, в kvm-виртуалках...

Ну может и правда не из-за него. Там непонятно было, xentop говорил 100% и система не откликалась никак - не отвечала на пинги и на нажатия клавиш в консоли. Когда убрал ipt-netflow, вроде бы прошло.

 

А раз вы пробовали снимать netflow с xen-виртуалок, там наверное, был и трафик серьезный? Не было проблем с прерываниями на каждый пакет, как у меня?

Share this post


Link to post
Share on other sites
Домен у вас HVM? Интерфейс отдан гостевому домену через VT-d?
Нет, паравиртуализация. Интерфейс отдан гостевому домену через bridge. То есть в конфиге написано

vif = [ 'bridge=eth0' ]

где eth0 - это мост, куда входит физическая сетевуха peth0.

 

Через VT-d я не имею пока возможности отдать, т.к. на сервере сетевуха всего одна, а виртуальная машина с бордером - не единственная. Конечно, если это поможет, можно поставить доп. сетевуху и прокинуть через VT-d, но это требует HVM, а я читал, что это _гораздо_ медленнее паравиртуализации. У меня на соседнем xen-сервере windows xp крутится в hvm, тормозит жутко, так что я верю :)

Share this post


Link to post
Share on other sites

ИМХО получить более-менее пристойную скорость io-операций в гостевом домене можно только отдав ему в монопольное пользование устройство

 

PS садить пограничник в vm тот еще экстрим :)

Share this post


Link to post
Share on other sites
Странно это. У меня без проблем работало на диапазоне ядер с 2.6.26 до 2.6.30, на обычных одиночных системах, в xen-виртуалках, в kvm-виртуалках...

Ну может и правда не из-за него. Там непонятно было, xentop говорил 100% и система не откликалась никак - не отвечала на пинги и на нажатия клавиш в консоли. Когда убрал ipt-netflow, вроде бы прошло.

 

А раз вы пробовали снимать netflow с xen-виртуалок, там наверное, был и трафик серьезный? Не было проблем с прерываниями на каждый пакет, как у меня?

Нет, мегабит по 40 на виртуалку. Это были pptp-сервера, которые жили на разных хост-системах. Но в последнее время все равно перевожу такие сервера на физические машины, на виртуалках оставляю то, что требует дублирования и изоляции - СУБД, почта и прочее.

Share this post


Link to post
Share on other sites

имеет смысл держать vpn сервера в виртуалках? Я использую vmware esx для кластера виртуалок, почта, база, сайты - в виртуалках, впн сервера на сейчас - физические машины. Но их у меня 10 ;). Вот сижу и думаю, стоит попробовать увести их в виртуалку, или не надо....

Share this post


Link to post
Share on other sites

имеет смысл держать vpn сервера в виртуалках? Я использую vmware esx для кластера виртуалок, почта, база, сайты - в виртуалках, впн сервера на сейчас - физические машины. Но их у меня 10 ;). Вот сижу и думаю, стоит попробовать увести их в виртуалку, или не надо....

Системы, выполняющие сложные функции, живут в виртуалках с реплицированием корня каждой машины по drbd, дабы при смерти одной хост-системы можно было бы быстро завести их на другой. А ВПН-сервера взаимозаменяемы по определению и друг от друга в принципе не отличаются, поэтому при падении одного пользователи пойдут на другой. Имхо, единственный плюс впн-серверов в виртуалках - возможность живой миграции между хост-системами. Хотя на самом деле мне это пригодилось всего один-два раза, что не оправдывает издержек виртуализации на такие машинки.

Share this post


Link to post
Share on other sites

Да, сторадж для esx кластера собран на двух машинах с 5-мы рейдами и drbd репликацией.

Для меня плюс в впн на виртуалках - быстрое наращивание их количества. Хотя тут другой вопрос. 10 физических впн серверов тянут скажем 5-6к коннектов. Если на этом же железе подниму 20 впн серверов - количество коннектов увеличится? ;)

PS. Вопрос в применении accel-pptpd не стоит, меня устраивает обычный pptpd, по крайней мере пока.

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