Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

serving pppoe to many vlans

2011-07-15
2013-03-27
  • Производительность сервера падает при увеличении числа вланов, в которых отдаем пппое. Замечено при увеличении числа обслуживаемых вланов с 150 до 1000 - трафик через сервер упал минимум вдвое.
    Разумна ли идея запилить ноду, аналогичную ng_pppoe,  но с внутренней обработкой тегов вланов?

    Server efficiency lowers when increasing number of vlan interfaces to which pppoe is served.
    I observe the traffic rate halved with increase from 150 to 1000 vlans served.

    Does the idea of making node analogous to ng_pppoe but with internal processing of vlan tags look sensible?

     
  • Я не уверен что это может дать. Только что посмотрел на реализацию if_valn - там так-же как в ng_pppoe применяются хеши, тоесть производительность должна по большей части сохраняться при увеличении числа VLAN'ов. Как эксперимент, можеш попробовать собрать ядро с options VLAN_ARRAY. Это заменит хеш списков на массив указателей. Ценой чуть большего потребления памяти это может поднять производтельнось. Хотя согласно комментарию в коде это может быть и не дать эффекта.

    Еще вопрос: когда именно меняется производительность: при добавлении vlan'ов, при слушании их mpd, при перераспределении клиентов на другие vlan'ы? На что именно ростет нагрузка: прерывания сетевух, user-level mpd, что-то другое?

     
  • roysbike
    roysbike
    2012-12-06

    уже 2 недели мучаюсь с такой проблемой. используем MPD 5.6  PPPoE. Карты Intel 82576 2-х портовые 2 шт. Никого NAT'a , просто шейпинг и терминация.   Одна смотри в строну uplink igb0 igb1 объединены в lagg0. Другая карты смотри в сеть igb2 и igb3 (на каждом vlan'ы )  в сумме 100 штук.(раньше был lagg1  распилил поровну были ошибки на порту из за lagg..) Суть проблемы . В первый день старта сервера прерывания равны . Он хоть 1500 мбит прокачает и 3К сессий . Загрузка по прерываниям будет макс 50 процентов. Как только проходят сутки и выше . Прерывания которые отвечают на igb2 и igb3 начинают расти. В два раза больше чем igb0 и igb1.  Соответственно , что уже на 700 мбит 1500 сессий прерывания достигают 100 процентов. Каждый irq прибит к процессору .  Может это нормально ?

    pppoe2# sysctl -a | grep hw.model
    hw.model: Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz

    uname -a

    FreeBSD 9.1-PRERELEASE #1 r243569:
    

    top -SHPI

    last pid: 63028;  load averages:  1.88,  1.82,  1.70                                                                                                       up 5+02:22:52  13:15:46
    155 processes: 7 running, 110 sleeping, 38 waiting
    CPU 0:  0.0% user,  0.0% nice,  0.0% system,  8.2% interrupt, 91.8% idle #igb0lagg0
    CPU 1:  0.0% user,  0.0% nice,  0.7% system, 12.9% interrupt, 86.4% idle# igb1
    CPU 2:  0.0% user,  0.0% nice,  0.0% system, 59.9% interrupt, 40.1% idle #igb2
    CPU 3:  0.0% user,  0.0% nice,  0.0% system, 51.0% interrupt, 49.0% idle #igb3
    Mem: 190M Active, 655M Inact, 778M Wired, 622M Buf, 4305M Free
    Swap: 4096M Total, 4096M Free
      PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
       11 root     155 ki31     0K    64K CPU1    1 100.5H 97.75% idle{idle: cpu1}
       11 root     155 ki31     0K    64K RUN     0  98.2H 90.58% idle{idle: cpu0}
       12 root     -92    -     0K   640K CPU2    2  45.7H 65.67% intr{irq266: igb2:que}
       12 root     -92    -     0K   640K CPU3    3  37.5H 55.66% intr{irq271: igb3:que}
       11 root     155 ki31     0K    64K RUN     3  81.6H 47.75% idle{idle: cpu3}
       11 root     155 ki31     0K    64K RUN     2  74.7H 38.57% idle{idle: cpu2}
    10497 root      23    0 37596K  9992K select  1 304:17  2.59% snmpd
       12 root     -92    -     0K   640K WAIT    0 356:36  2.49% intr{irq256: igb0:que}
       12 root     -92    -     0K   640K WAIT    1 292:06  1.86% intr{irq261: igb1:que}
       12 root     -92    -     0K   640K WAIT    0 278:03  1.86% intr{irq258: igb0:que}
    11960 root      21    0   279M   209M select  0 194:39  1.76% mpd5{mpd5}
       12 root     -92    -     0K   640K WAIT    0 271:17  1.56% intr{irq257: igb0:que}
       12 root     -92    -     0K   640K WAIT    1 260:21  1.56% intr{irq262: igb1:que}
       12 root     -92    -     0K   640K WAIT    0 273:13  1.37% intr{irq259: igb0:que}
       12 root     -92    -     0K   640K WAIT    1 265:37  1.27% intr{irq263: igb1:que}
       12 root     -92    -     0K   640K WAIT    1 269:57  0.98% intr{irq264: igb1:que}
       12 root     -92    -     0K   640K WAIT    0  47:06  0.29% intr{irq272: igb3:que}
       12 root     -92    -     0K   640K WAIT    3  55:25  0.20% intr{irq267: igb2:que}
    

    netstat -w1 -h

    input        (Total)           output
       packets  errs idrops      bytes    packets  errs      bytes colls
          139k     0     0       101M       143k     0       123M     0
          153k     0     0       114M       157k     0       139M     0
          144k     0     0       105M       148k     0       127M     0
          143k     0     0       107M       146k     0       128M     0
    

    vmstat -z

    pppoe2# vmstat -z
    ITEM                   SIZE  LIMIT     USED     FREE      REQ FAIL SLEEP
    UMA Kegs:               208,      0,     100,       2,     100,   0,   0
    UMA Zones:              896,      0,     100,       0,     100,   0,   0
    UMA Slabs:              568,      0,   27618,     655,  291701,   0,   0
    UMA RCntSlabs:          568,      0,   35549,       4,   35549,   0,   0
    UMA Hash:               256,      0,       1,      14,       4,   0,   0
    16 Bucket:              152,      0,     139,      11,     139,   0,   0
    32 Bucket:              280,      0,     189,       7,     189,   0,   0
    64 Bucket:              536,      0,     199,       4,     199, 107,   0
    128 Bucket:            1048,      0,    2236,       2,    2236,1232,   0
    VM OBJECT:              232,      0,   72493,     611,31062651,   0,   0
    MAP:                    232,      0,       7,      25,       7,   0,   0
    KMAP ENTRY:             120, 227044,     156,     774, 3293681,   0,   0
    MAP ENTRY:              120,      0,   11169,   11120,480120237,   0,   0
    fakepg:                 120,      0,       0,       0,       0,   0,   0
    mt_zone:               4112,      0,     301,      10,     301,   0,   0
    16:                      16,      0,    4362,    1518,331092433,   0,   0
    32:                      32,      0,    7938,    6909,17269744102,   0,   0
    64:                      64,      0,   15925,    3395,274525647,   0,   0
    128:                    128,      0,   52003,   66172,103933367,   0,   0
    256:                    256,      0,   52869,    7881,14406725,   0,   0
    512:                    512,      0,    4702,    2564, 2853387,   0,   0
    1024:                  1024,      0,      68,     228,14047587,   0,   0
    2048:                  2048,      0,    6132,    1266,41751100,   0,   0
    4096:                  4096,      0,    2420,    4378, 4083441,   0,   0
    Files:                   80,      0,     310,     500,170160080,   0,   0
    TURNSTILE:              136,      0,     532,      48,     532,   0,   0
    rl_entry:                40,      0,     144,     276,     144,   0,   0
    umtx pi:                 96,      0,       0,       0,       0,   0,   0
    MAC labels:              40,      0,       0,       0,       0,   0,   0
    PROC:                  1184,      0,      47,     115, 2061555,   0,   0
    THREAD:                1160,      0,     270,     261, 1727074,   0,   0
    SLEEPQUEUE:              80,      0,     532,      48,     532,   0,   0
    VMSPACE:                392,      0,      28,     152, 2061535,   0,   0
    cpuset:                  72,      0,     127,     223,     166,   0,   0
    audit_record:           960,      0,       0,       0,       0,   0,   0
    mbuf_packet:            256,      0,   66140,    4772,30424223652,   0,   0
    mbuf:                   256,      0,       7,    4351,41559393521,   0,   0
    mbuf_cluster:          2048, 262144,   70912,       6,   70912,   0,   0
    mbuf_jumbo_page:       4096, 262144,       0,      90,     648,   0,   0
    mbuf_jumbo_9k:         9216, 262144,       0,       0,       0,   0,   0
    mbuf_jumbo_16k:       16384, 262144,       0,       0,       0,   0,   0
    mbuf_ext_refcnt:          4,      0,       0,       0,       0,   0,   0
    NetGraph items:          72,  65540,       0,     406,90129821,   0,   0
    NetGraph data items:     72,  65540,       1,    1188,30508820690,   0,   0
    g_bio:                  232,      0,       0,    6608, 4356822,   0,   0
    ttyinq:                 160,      0,     180,     156,     660,   0,   0
    ttyoutq:                256,      0,      95,      70,     351,   0,   0
    ata_request:            328,      0,       0,     192, 1452317,   0,   0
    ata_composite:          336,      0,       0,       0,       0,   0,   0
    VNODE:                  504,      0,  105070,     218, 5100632,   0,   0
    VNODEPOLL:              112,      0,       1,      65,       1,   0,   0
    NAMEI:                 1024,      0,       0,      96,23547704,   0,   0
    S VFS Cache:            108,      0,   82898,   28972, 3970146,   0,   0
    STS VFS Cache:          148,      0,       0,       0,       0,   0,   0
    L VFS Cache:            328,      0,   24254,   20014, 1258293,   0,   0
    LTS VFS Cache:          368,      0,       0,       0,       0,   0,   0
    DIRHASH:               1024,      0,    5996,      36,    5996,   0,   0
    NCLNODE:                568,      0,       0,       0,       0,   0,   0
    pipe:                   728,      0,       7,      98, 1567341,   0,   0
    Mountpoints:            792,      0,       2,       8,       2,   0,   0
    ksiginfo:               112,      0,     151,     905,   79499,   0,   0
    itimer:                 344,      0,       0,       0,       0,   0,   0
    pfsrctrpl:              152,      0,       0,       0,       0,   0,   0
    pfrulepl:               936,      0,       0,       0,       0,   0,   0
    pfstatepl:              288,  10010,       0,       0,       0,   0,   0
    pfstatekeypl:           288,      0,       0,       0,       0,   0,   0
    pfstateitempl:          288,      0,       0,       0,       0,   0,   0
    pfaltqpl:               240,      0,       0,       0,       0,   0,   0
    pfpooladdrpl:            88,      0,       0,       0,       0,   0,   0
    pfrktable:             1296,      0,       0,       0,       0,   0,   0
    pfrkentry:              160,      0,       0,       0,       0,   0,   0
    pfrkcounters:            64,      0,       0,       0,       0,   0,   0
    pffrent:                 32,   5050,       0,       0,       0,   0,   0
    pffrag:                  80,      0,       0,       0,       0,   0,   0
    pffrcache:               80,  10035,       0,       0,       0,   0,   0
    pffrcent:                24,  50022,       0,       0,       0,   0,   0
    pfstatescrub:            40,      0,       0,       0,       0,   0,   0
    pfiaddrpl:              120,      0,       0,       0,       0,   0,   0
    pfospfen:               112,      0,       0,       0,       0,   0,   0
    pfosfp:                  40,      0,       0,       0,       0,   0,   0
    KNOTE:                  128,      0,       7,     399,  910554,   0,   0
    socket:                 680, 262146,     236,    4030,157232219,   0,   0
    ipq:                     56,   8253,       0,     189,       9,   0,   0
    udp_inpcb:              392, 262150,       3,     277,149146550,   0,   0
    udpcb:                   16, 262248,       3,    1005,149146550,   0,   0
    tcp_inpcb:              392, 262150,      29,    4191,  646810,   0,   0
    tcpcb:                  976, 262144,      12,     308,  646810,   0,   0
    tcptw:                   72,  27800,      17,    4333,  264180,   0,   0
    syncache:               152, 102400,       0,     225,  314885,   0,   0
    hostcache:              136,  15372,       3,     165,     261,   0,   0
    tcpreass:                40,  16464,       0,     336,    3847,   0,   0
    sackhole:                32,      0,       0,     606,     259,   0,   0
    ripcb:                  392, 262150,       0,      90,    8941,   0,   0
    unpcb:                  240, 262144,      12,     180, 7347769,   0,   0
    rtentry:                200,      0,    8998,    6924,  411720,   0,   0
    pfsync:                  88,      0,       0,       0,       0,   0,   0
    IPFW dynamic rule:      120,      0,       0,     341,  350841,   0,   0
    selfd:                   56,      0,     634,     941,8864864262,   0,   0
    SWAPMETA:               288, 758797,       0,       0,       0,   0,   0
    FFS inode:              168,      0,  105041,     229, 5100488,   0,   0
    FFS1 dinode:            128,      0,       0,       0,       0,   0,   0
    FFS2 dinode:            256,      0,  105041,     304, 5100488,   0,   0
    

    loader.conf

    #Bucket
    kern.ipc.nmbclusters=262144  # Maximum number of mbuf clusters allowed // netstat -m
    kern.ipc.nmbjumbop=262144    # Maximum number of mbuf page size jumbo clusters allowed. pagesize(4k/8k)
    kern.ipc.nmbjumbo9=262144    # Maximum number of mbuf 9k jumbo clusters allowed
    kern.ipc.nmbjumbo16=262144   # Maximum number of mbuf 16k jumbo clusters allowed
    #for MC
    kern.maxfiles="25000"
    #Tuning NIC
    net.graph.maxdata=65536
    net.graph.maxalloc=65536
    hw.igb.rxd=4096
    hw.igb.txd=4096
    hw.igb.max_interrupt_rate=16000
    net.inet.tcp.syncache.hashsize=1024
    net.inet.tcp.syncache.bucketlimit=100
    net.inet.tcp.tcbhashsize=4096
    kern.ipc.nsfbufs=10240
    

    sysctl.conf

    net.graph.maxdgram=8388608
    net.graph.recvspace=8388608
    kern.ipc.maxsockbuf=83886080
    net.inet.ip.fastforwarding=1
    dev.igb.2.rx_processing_limit=8192
    dev.igb.3.rx_processing_limit=8192
    kern.random.sys.harvest.ethernet=0
    kern.random.sys.harvest.point_to_point=0
    kern.random.sys.harvest.interrupt=0
    

    systat -vm 1

      1 users    Load  1.47  1.60  1.63                  Dec  6 13:20
    Mem:KB    REAL            VIRTUAL                       VN PAGER   SWAP PAGER
            Tot   Share      Tot    Share    Free           in   out     in   out
    Act  245256    6988   813432     8512 4408300  count
    All  381552    7868 1074837k    16860          pages
    Proc:                                                            Interrupts
      r   p   d   s   w   Csw  Trp  Sys  Int  Sof  Flt        cow   58728 total
                 27      104k   15  932  54k   92    3        zfod        atkbd0 1
                                                              ozfod     2 atapci0+
     0.6%Sys  29.7%Intr  0.4%User  0.0%Nice 69.3%Idle        %ozfod       uhci2 ehci
    |    |    |    |    |    |    |    |    |    |    |       daefr  1129 cpu0:timer
    +++++++++++++++                                           prcfr 13551 igb0:que 0
                                            20 dtbuf        8 totfr  2643 igb0:que 1
    Namei     Name-cache   Dir-cache    174740 desvn          react  2784 igb0:que 2
       Calls    hits   %    hits   %    105070 numvn          pdwak  2457 igb0:que 3
           5       5 100                 43684 frevn          pdpgs       igb0:link
                                                              intrn  2985 igb1:que 0
    Disks  ada0   cd0 pass0 pass1                      796484 wire   2568 igb1:que 1
    KB/t   8.00  0.00  0.00  0.00                      194608 act    2560 igb1:que 2
    tps       2     0     0     0                      670276 inact  2983 igb1:que 3
    MB/s   0.02  0.00  0.00  0.00                             cache       igb1:link
    %busy     0     0     0     0                     4408300 free   5834 igb2:que 0
                                                       636608 buf    4472 igb2:que 1
                                                                        6 igb2:que 2
                                                                        4 igb2:que 3
                                                                          igb2:link
                                                                     6202 igb3:que 0
                                                                     5146 igb3:que 1
                                                                        3 igb3:que 2
                                                                        5 igb3:que 3
                                                                          igb3:link
                                                                        7 bge0 276
                                                                     1129 cpu2:timer
                                                                     1129 cpu1:timer
                                                                     1129 cpu3:timer
    
     
  • Попробуй вообще убрать с этой машины firewall. Из ядра.

    В крайнем случае поиграйся c net.inet.ip.fastforwarding и net.isr.direct

    Я по крайней мере вижу аномальный по сравнению с остальными счетчик "13551 igb0:que 0"
    Есть ли возможность узнать, на прием или отдачу работает queue 0 на igb0

    В моей практике был случай, когда обнаружилось повреждение какеля косвенным методом: через физический интерфейс проходило в одном направлении трафика раза в два больше, чем через логические интерфейсы (vlan'ы)  на нем.

     
  • P.S.
    Погляди вывод sysctl dev.igb.X на предмет потери пакетов, ошибок CRC и т.п.

     
  • roysbike
    roysbike
    2012-12-06

    Я по крайней мере вижу аномальный по сравнению с остальными счетчик "13551 igb0:que 0"
    Есть ли возможность узнать, на прием или отдачу работает queue 0 на igb0

    Да, есть анамалия , может lacp криво работает
    igb 0
    RX-200 Мбит
    TX-150 Мбит
    два порта смотрят в dgs-3627 .Firmware: Build 2.84.B42
    на DGS настроен lacp (Link Aggregation Algorithm = IP-Source-Dest)
    Group ID      : 2
    Type          : LACP
    Master Port   : 2
    Member Port   : 2-3
    Active Port   : 2-3
    Status        : Enabled
    Flooding Port : 2

    igb 1
    RX-200
    TX-можно сказать по нулям
    Видимо исх бежит через igb0 . Какае-то кривая балансировка

    pppoe2# sysctl dev.igb. | grep errs
    dev.igb.0.mac_stats.recv_errs: 0
    dev.igb.0.mac_stats.crc_errs: 0
    dev.igb.0.mac_stats.alignment_errs: 0
    dev.igb.0.mac_stats.coll_ext_errs: 0
    dev.igb.1.mac_stats.recv_errs: 0
    dev.igb.1.mac_stats.crc_errs: 0
    dev.igb.1.mac_stats.alignment_errs: 0
    dev.igb.1.mac_stats.coll_ext_errs: 0
    dev.igb.2.mac_stats.recv_errs: 0
    dev.igb.2.mac_stats.crc_errs: 0
    dev.igb.2.mac_stats.alignment_errs: 0
    dev.igb.2.mac_stats.coll_ext_errs: 0
    dev.igb.3.mac_stats.recv_errs: 0
    dev.igb.3.mac_stats.crc_errs: 0
    dev.igb.3.mac_stats.alignment_errs: 0
    dev.igb.3.mac_stats.coll_ext_errs: 0
    
     
  • roysbike
    roysbike
    2012-12-06

    Попробуй вообще убрать с этой машины firewall. Из ядра.

    В крайнем случае поиграйся c net.inet.ip.fastforwarding и net.isr.direct

    К сожалению firewall не могу убрать, так как на уровне таблиц блокируются абоненты с отриц балансом, затем их заварачиает на web сервер. я пробывал разрешать все, закрывал udp , думал может кто то фигашит. На сервер просто вланы и pppoe слушает их.
    с fast и direct игрался. С директом еще хуже , ваще не справляется. Завтра буду втрой сервер в lacp делать и посмотрю как он себя поведет. Просто я думаю нагрузка смешная для такого сервера , самое что забавное , почему прерывания растут , хотя  трафик и pps тот же , даже меньше сделал оп сессиям

     
  • На DGS-3627 посмотри "show error ports X"

     
  • roysbike
    roysbike
    2012-12-07

    смотрел ) забыл написать , ошибки есть на всех портах куда включены PPPoE брасы.

    DGS-3426:5#show error ports  3
    Command: show error ports 3

    Port number : 3     
                        RX Frames                                  TX Frames
                        ------                                  ------
    CRC Error          0                    Excessive Deferral    0       
    Undersize          0                    CRC Error             0       
    Oversize           0                    Late Collision        0       
    Fragment           0                    Excessive Collision   0       
    Jabber             0                    Single Collision      0       
    Drop Pkts          4037399              Collision             0       
    Symbol Error       0       
    Buffer Full Drop   0        
    ACL Drop           2       
    Multicast Drop     0       
    VLAN Ingress Drop  0       

     
  • roysbike
    roysbike
    2012-12-07

    но только Drop Pkts

     
  • roysbike
    roysbike
    2012-12-07

    uptime 6 дней, вот что натекло

    [] sh mem
       Type                              Count      Total
       ----                              -----      -----
       AUTH                              11365    1038958
       BUND                                868    7212104
       CMD                                   4         72
       CMDL                                 12        348
       COMP                                  1         72
       CONSOLE                               3       5220
       CONSOLE.buckets                       1        248
       CONSOLE.gent                          1         16
       CRYPT                                 1         56
       EVENT                              1946     219640
       IFACE                                23       1388
       LINK                               1836    3576416
       PHYS                               1072     528384
       PHYS.buckets                          3        744
       RADIUS                                4         97
       RADSRV                               21        496
       WEB                                   3        360
       http_server                           1        112
       http_server.server_name               1         15
       http_server.vhosts                    1        216
       http_server.vhosts.buck               1        248
       http_server.vhosts.gent               1         16
       http_servlet_hook                     1         80
       http_virthost                         1         24
       http_virthost.host                    1          1
       typed_mem_stats                       1        832
                                         -----      -----
       Totals                            17173   12586163
    
     
  • roysbike
    roysbike
    2012-12-07

    да и еще mpd сожрал 242М памяти, макс клиентов 1500 . НО, исползьуется ipfw table , узеры добавляются и удаляются. через CoA происходит плокирования на уровне ipfw , то есть юзера не сбрасывают
    last pid: 87560;  load averages:  2.17,  2.15,  2.47                                up 6+11:42:07  22:35:01
    35 processes:  1 running, 34 sleeping
    CPU:  0.2% user,  0.0% nice,  0.5% system, 38.8% interrupt, 60.5% idle
    Mem: 228M Active, 669M Inact, 776M Wired, 622M Buf, 4254M Free
    Swap: 4096M Total, 4096M Free

      PID USERNAME  THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
    10497 root        1  22    0 37596K  9992K select  2 372:57  2.29% snmpd
    11960 root        2  27    0   312M   242M select  2 250:20  0.78% mpd5
    28879 root        1  20    0 12184K  1632K select  1   0:56  0.00% syslogd
    10604 www         1  20    0 18900K  3356K kqread  0   0:29  0.00% nginx
    9086 root        1  20    0 10372K  3476K select  1   0:17  0.00% devd
    11050 nagios      1  20    0 12148K  1648K select  2   0:17  0.00% nrpe2

     
  • Попробуй вместо "ipfw table" использовать внешние скрипты поднятия и опускания интерфейса.
    И посмотри, будет ли расти используемая память.

     
  • roysbike
    roysbike
    2012-12-10

    я не совсем понял вашу идею. В ipfw table через CoA я занушу IP , если у клиента закончились деньги. Т.е. на сервере он висит, просто блокируется доступ в мир

     
  • Можно увидеть кусок логов mpd, где приходят CoA запросы? А так же логи, где запускается ipfw

     
  • roysbike
    roysbike
    2012-12-16

    в ipfw table заносятся , Framed-IP . Через CoA атртибут mpd-table-static и номер таблицы.  через CoA только отправляется только mpd-table-static , динамической смены скорости нет. в rc.firewall описание таблицы номер 2 .
    #no money

    ${fwcmd} add fwd 127.0.0.1,8888 ip from 'table(2)' to any dst-port 80,8080,8081 via ng*
    ${fwcmd} add allow tcp from any 80,8080,8081   to 'table(2)' via ng*
    ${fwcmd} add deny all from any to 'table(2)' via ng*
    ${fwcmd} add deny all  from 'table(2)' to any via ng*

    Логи завтра пришлю