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

Иванов Денис

Пользователи
  • Публикации

    68
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Иванов Денис


  1. конечно! а что?

    на серваке приводов нету... пробовал подключать USB что то глухо вообще на него не реагирует... пытался поставить FreeNAS

    А что мешает на время подключить привод к материнской плате? Стойка?

    Попробуйте воспользоваться другими утилитами для подготовки флешки, например Linux Live USB

  2. # modprobe netconsole

    FATAL: Error inserting netconsole (/lib/modules/2.6.35-22-generic/kernel/drivers/net/netconsole.ko): Operation not permitted

    Убедитесь что выполняете команду с привилегиями root.

    Попробуйте sudo modprobe netconsole ...

  3. Значит логи бесполезны. Как уже было сказано выше: нужно собрать все сообщения, которые ядро выплёвывает на экран.

    В статье по ссылке описаны два метода сбора сообщений ядра: через COM-порт и средствами модуля netconsole. Какой выбрали?

  4. 16 суток - полёт нормальный... :)

     

    До того как обновить версию igb, мы сделали клон бриджа.

    Патч помог обоим :

    bridge1: kernel 2.6.33.20 + патч + igb 3.3.6

    bridge2: kernel 2.6.33.20 + патч + igb 3.1.16

     

    Всем огромное спасибо! Вопрос закрыт.

  5. Нагуглившись начитавшись о сабже и различных его реализациях, решил попробовать поиграться c адаптивным HLS.

    В перспективе хотелось бы применить технологию для публикации изображения с камеры на веб страничке, и чтобы была возможность просмотра с мобильных устройств на Android и iOS.

    Если верить википедии, то HLS работает в Android 3/4 и iOS 4.3/5

    Рекомендованные форматы: для Android, для iOS

     

    C iOS всё просто:

    <html>
       <head>
           <title>Apple Test</title>
           <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
       </head>
       <body style="background-color:#FFFFFF; ">
           <center>
               <video src="index.m3u8" controls autoplay ></video>
           </center>
       </body>
    </html>
    

     

    Но вот с Android уже не так просто.

    Если на Android установить Adobe Flash 11, то будет работать плеер основанный на OSMF, но его еще предстоит найти или написать.

    Смог нагуглить только два бесплатных плеера:

    1) бета версия JWPlayer

    2) плагин для MediaCore, который я так и не смог установить. Никаких инструкций по установке плагина тоже не нашёл.

     

    Ну чтож, выбора особо нет... Встроил jwplayer в страничку:

    <html>
    <head>
       <script type="text/javascript" src="player.js"></script>
    </head>
    <body>
       <div id="player">You need Flash to play this</div>
    
       <script type="text/javascript">
           jwplayer("player").setup({
               file: 'high.m3u8',
               flashplayer: 'player.swf',
               provider:'adaptiveProvider.swf',
               width: 300,
               height: 200,
           });
           function loadStream(url) {
               jwplayer("player").load({file: url,provider: 'adaptiveProvider.swf'});
               jwplayer("player").play();
               return false;
           }
       </script>
    </body>
    </html>
    

     

    Денег конечно же нет, поэтому пришлось установить vlc 2 + apache2 на Ubuntu 11.10 amd64

    По умолчанию vlc подтянул обычный libavcodec, но позже я заменил его на libavcodec-extra

     

    Первая попытка:

    vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \
       --sout='#std{access=livehttp{seglen=10, \
                                    numsegs=3, \
                                    index=/var/www/index.m3u8, \
                                    index-url=http://mysite.org/segment-#.mts}, \
                    mux=ts{use-key-frames}, \
                    dst=/var/www/segment-#.mts}'
    

    Камера уже отдаёт H264 (AVC+AAC), поэтому без транскодинга.

    jwplayer проиграл первый сегмент и остановился издав несколько звуков похожих на щелчки.

     

    Попробовал отключить звук на камере и в vlc

    vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \
       --sout='#transcoding{acodec=none}:std{access=livehttp{seglen=10, \
                                                             numsegs=3, \
                                                             index=/var/www/index.m3u8, \
                                                             index-url=http://mysite.org/segment-#.mts}, \
                                             mux=ts{use-key-frames}, \
                                             dst=/var/www/segment-#.mts}'
    

    Не помогло.

     

    Попробовал с транскодингом звука:

    vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \
       --sout='#transcoding{acodec=aac}:std{access=livehttp{seglen=10, \
                                                            numsegs=3, \
                                                            index=/var/www/index.m3u8, \
                                                            index-url=http://mysite.org/segment-#.mts}, \
                                            mux=ts{use-key-frames},
                                            dst=/var/www/segment-#.mts}'
    

    Не помогло.

     

    Попробовал с транскодингом и звука и видео:

    vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \
       --sout='#transcoding{vcodec=h264,acodec=aac}:std{access=livehttp{seglen=10, \
                                                                        numsegs=3, \
                                                                        index=/var/www/index.m3u8, \
                                                                        index-url=http://mysite.org/segment-#.mts},
                                                        mux=ts{use-key-frames},
                                                        dst=/var/www/segment-#.mts}'
    

    jwplayer не останвливается, но картинка очень сильно рассыпается - смотреть невозможно.

     

    Позже нашёл причину остановки jwplayer на форуме longtailvideo.com

    Получилось забирать H264 с камеры и транскодить только звук:

    vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \
       --sout='#transcoding{aenc=ffmpeg{aac-profile=low},acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=livehttp{seglen=10, \
                                                                                                                             numsegs=3, \
                                                                                                                             index=/var/www/index.m3u8, \
                                                                                                                             index-url=http://mysite.org/segment-#.mts}, \
                                                                                                             mux=ts{use-key-frames}, \
                                                                                                             dst=/var/www/segment-#.mts}'
    

    Показывает отлично.

     

    Далее попробовал разбить поток на два: первый оригинальный - high.m3u8, а второй с заниженными разрешением, частотой кадров и битрейтом - low.m3u8

    Указал их в общем index.m3u8

    #EXTM3U
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=3000000
    high.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=50000
    low.m3u8
    

    vlc -I dummy -R rtsp://login:password@mycamera.org/live.sdp \
       --sout='#transcoding{aenc=ffmpeg{aac-profile=low},acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=livehttp{seglen=10, \
                                                                                                                             numsegs=3, \
                                                                                                                             index=/var/www/high.m3u8, \
                                                                                                                             index-url=http://mysite.org/high-#.mts}, \
                                                                                                             mux=ts{use-key-frames}, \
                                                                                                             dst=/var/www/high-#.mts}' \
       --sout='#transcoding{vcodec=h264,width=174,height=144,fps=12,vb=50,aenc=ffmpeg{aac-profile=low},acodec=mp4a,ab=128,channels=2,samplerate=44100}:std{access=livehttp{seglen=10, \
                                                                                                                                                                           numsegs=3, \
                                                                                                                                                                           index=/var/www/low.m3u8, \
                                                                                                                                                                           index-url=http://mysite.org/low-#.mts}, \
                                                                                                                                                           mux=ts{use-key-frames},
                                                                                                                                                           dst=/var/www/low-#.mts}'
    

    Как работает "адаптивность" проверять не стал, т.к. в low.m3u8 рассыпается картинка. :(

    Проверял с разными источниками видео (камерами, файлами со статическим видео) - сыпется.

     

    Боюсь что сам не справлюсь с рассыпанием картинки, поэтому прошу помощи... :)

  6. В 3х случаях из 4х время kernel panic совпало с временем выполнения cron'ом элементарного сценария архивирования конфигов:

    #!/bin/bash
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    DEVREGEXP="/var$"
    MINAVAIL=1
    
    cd /scripts/backup/tars/
    
    # удалить старые архивы
    while [ "`df -g | grep $DEVREGEXP | awk '{ print $4 }'`" -le "$MINAVAIL" ]; do
     LIST=`ls -tr`
     rm `echo $LIST | awk '{print $1}'`
    done
    
    # сформировать имя файла архива: годмесяцденьчасминута-bridge.tar
    NAME=`date +%Y%m%d%H%M-linbridge.tar`
    
    # добавить в архив директории
    # /etc /root /usr/local/etc /usr/local/www /var/spool/cron/crontabs /scripts
    # исключая директории
    # /root/tmp /scripts/backup/tars
    cd /scripts/backup/tars/
    tar vcpf $NAME --exclude /root/tmp --exclude /scripts/backup/tars /etc /root /usr/local/etc /var/spool/cron/crontabs /scripts
    
    # передать архив в хранилище
    lftp <<End-Of-Session
    open xxx.xxx.xxx.xxx
    user linbridge ********
    put $NAME
    bye
    End-Of-Session
    

    Размер архива ~70МБ.

  7. Проработал неделю и наконец упал. :)

    Снимок.png

    [484747.917726] BUG: unable to handle kernel paging request at ffffc90012167000
    [484747.917763] IP: [<ffffffff8124a2c3>] dev_queue_xmit+0x248/0x425
    [484747.917794] PGD bf020067 PUD bf021067 PMD bd95a067 PTE 0
    [484747.917820] Oops: 0000 [#1] SMP 
    [484747.917839] last sysfs file: /sys/module/configfs/initstate
    [484747.917858] CPU 2 
    [484747.917875] Pid: 0, comm: swapper Not tainted 2.6.33.20 #1 SABERTOOTH X58/System Product Name
    [484747.917907] RIP: 0010:[<ffffffff8124a2c3>]  [<ffffffff8124a2c3>] dev_queue_xmit+0x248/0x425
    [484747.917941] RSP: 0018:ffff880001a43710  EFLAGS: 00010202
    [484747.917960] RAX: ffff8800beeb2000 RBX: ffff8800b10f04e8 RCX: 0000000000000001
    [484747.917990] RDX: ffff8800b0e10008 RSI: 0000000000010000 RDI: ffff8800b10f04e8
    [484747.918020] RBP: ffff8800bb97e000 R08: 0000000080000000 R09: 0000000000000000
    [484747.918050] R10: ffff8800b6c0d050 R11: 0000000000000000 R12: ffffc90012167000
    [484747.918080] R13: ffff880037cac680 R14: 000000001ce20b03 R15: 0000000000001800
    [484747.918110] FS:  0000000000000000(0000) GS:ffff880001a40000(0000) knlGS:0000000000000000
    [484747.918142] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    [484747.918160] CR2: ffffc90012167000 CR3: 00000000b78ea000 CR4: 00000000000006e0
    [484747.918191] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [484747.918221] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    [484747.918251] Process swapper (pid: 0, threadinfo ffff8800beebe000, task ffff8800bee85340)
    [484747.918282] Stack:
    [484747.918296]  ffff8800b10f04e8 ffffffff812705cf ffff8800a5bb3a80 ffff8800b10f04e8
    [484747.918322] <0> 0000000000000000 ffff8800b0e1250c 000000001ce20b03 ffffffff81271022
    [484747.918360] <0> 0000000001a437d0 0000000001a437d0 0000000080000000 ffff8800bd860c00
    [484747.918410] Call Trace:
    [484747.918425]  <IRQ> 
    [484747.918442]  [<ffffffff812705cf>] ? ip_finish_output2+0x1c2/0x20f
    [484747.918462]  [<ffffffff81271022>] ? ip_queue_xmit+0x2e5/0x346
    [484747.918482]  [<ffffffff812823db>] ? tcp_transmit_skb+0x6f9/0x737
    [484747.918502]  [<ffffffff81284974>] ? tcp_write_xmit+0x80c/0x8fc
    [484747.918524]  [<ffffffffa037792c>] ? br_nf_post_routing+0x1a4/0x1b7 [bridge]
    [484747.918546]  [<ffffffff81284ab7>] ? __tcp_push_pending_frames+0x22/0x4e
    [484747.918566]  [<ffffffff8127e384>] ? tcp_data_snd_check+0x21/0xea
    [484747.918586]  [<ffffffff812814d6>] ? tcp_rcv_state_process+0x8b0/0x8ee
    [484747.918607]  [<ffffffff8128747f>] ? tcp_v4_do_rcv+0x2dc/0x33c
    [484747.918626]  [<ffffffff8128837a>] ? tcp_v4_rcv+0x40d/0x665
    [484747.918646]  [<ffffffff8126714a>] ? nf_hook_slow+0x62/0xc3
    [484747.918666]  [<ffffffff8126d4e6>] ? ip_local_deliver_finish+0x0/0x1ae
    [484747.918686]  [<ffffffff8126d623>] ? ip_local_deliver_finish+0x13d/0x1ae
    [484747.918707]  [<ffffffff8126d0c3>] ? ip_rcv_finish+0x31f/0x34b
    [484747.918727]  [<ffffffff8126d35a>] ? ip_rcv+0x26b/0x2a6
    [484747.918746]  [<ffffffffa03738e6>] ? br_handle_frame_finish+0x112/0x14d [bridge]
    [484747.918778]  [<ffffffffa037752c>] ? br_nf_pre_routing_finish+0x258/0x27a [bridge]
    [484747.918809]  [<ffffffff8126714a>] ? nf_hook_slow+0x62/0xc3
    [484747.918829]  [<ffffffffa03772d4>] ? br_nf_pre_routing_finish+0x0/0x27a [bridge]
    [484747.918862]  [<ffffffff8100e996>] ? read_tsc+0x5/0x16
    [484747.918882]  [<ffffffffa03781ad>] ? br_nf_pre_routing+0x534/0x553 [bridge]
    [484747.918905]  [<ffffffff810df7ca>] ? get_partial_node+0x15/0x82
    [484747.918925]  [<ffffffff812670a4>] ? nf_iterate+0x43/0x87
    [484747.918945]  [<ffffffffa03737d4>] ? br_handle_frame_finish+0x0/0x14d [bridge]
    [484747.918975]  [<ffffffff8126714a>] ? nf_hook_slow+0x62/0xc3
    [484747.918995]  [<ffffffffa03737d4>] ? br_handle_frame_finish+0x0/0x14d [bridge]
    [484747.919028]  [<ffffffffa03a6731>] ? igb_alloc_rx_buffers+0x121/0x310 [igb]
    [484747.919049]  [<ffffffff8100e1b4>] ? nommu_map_page+0x0/0x9c
    [484747.919070]  [<ffffffffa0373ad4>] ? br_handle_frame+0x1b3/0x1db [bridge]
    [484747.919091]  [<ffffffff8124915f>] ? netif_receive_skb+0x340/0x45e
    [484747.919111]  [<ffffffff81249533>] ? dev_gro_receive+0xd5/0x223
    [484747.919131]  [<ffffffff812493aa>] ? napi_skb_finish+0x1c/0x31
    [484747.919151]  [<ffffffffa03a7020>] ? igb_poll+0x700/0xb70 [igb]
    [484747.919171]  [<ffffffff8100e996>] ? read_tsc+0x5/0x16
    [484747.919190]  [<ffffffff812498ca>] ? net_rx_action+0xa9/0x1cb
    [484747.919210]  [<ffffffff8108fe01>] ? __rcu_process_callbacks+0xb4/0x278
    [484747.919232]  [<ffffffff810499e6>] ? __do_softirq+0xe0/0x1a2
    [484747.919252]  [<ffffffff8101cf7b>] ? lapic_next_event+0x18/0x1d
    [484747.919273]  [<ffffffff8108c1e4>] ? handle_IRQ_event+0x55/0x109
    [484747.919293]  [<ffffffff8100991c>] ? call_softirq+0x1c/0x30
    [484747.919312]  [<ffffffff8100b03f>] ? do_softirq+0x3f/0x79
    [484747.919331]  [<ffffffff81049847>] ? irq_exit+0x36/0x79
    [484747.919350]  [<ffffffff8100a7a2>] ? do_IRQ+0xa3/0xb9
    [484747.919369]  [<ffffffff812f6093>] ? ret_from_intr+0x0/0x11
    [484747.919387]  <EOI> 
    [484747.919404]  [<ffffffff8100fd62>] ? mwait_idle+0x6d/0x78
    [484747.919423]  [<ffffffff8100fd14>] ? mwait_idle+0x1f/0x78
    [484747.919444]  [<ffffffff81007b7f>] ? cpu_idle+0xa3/0xdd
    [484747.919462] Code: ab a8 00 00 00 45 89 ed 66 8b 83 a6 00 00 00 49 c1 e5 07 4c 03 ad 00 03 00 00 80 e4 cf 80 cc 20 4d 8b 65 08 66 89 83 a6 00 00 00 <49> 83 3c 24 00 0f 84 d2 00 00 00 4d 8d 84 24 9c 00 00 00 4c 89 
    [484747.919627] RIP  [<ffffffff8124a2c3>] dev_queue_xmit+0x248/0x425
    [484747.919649]  RSP <ffff880001a43710>
    [484747.919665] CR2: ffffc90012167000
    [484747.919863] ---[ end trace d69d3035353cd75c ]---
    [484747.919903] Kernel panic - not syncing: Fatal exception in interrupt
    [484747.919947] Pid: 0, comm: swapper Tainted: G      D    2.6.33.20 #1
    [484747.919990] Call Trace:
    [484747.920028]  <IRQ>  [<ffffffff812f3e3a>] ? panic+0x78/0x13d
    [484747.920097]  [<ffffffff81044b13>] ? kmsg_dump+0xa1/0x145
    [484747.920139]  [<ffffffff812f6eaf>] ? oops_end+0xa9/0xb6
    [484747.920182]  [<ffffffff8102b36a>] ? no_context+0x1f4/0x201
    [484747.920226]  [<ffffffff812f6375>] ? page_fault+0x25/0x30
    [484747.920271]  [<ffffffff8124a2c3>] ? dev_queue_xmit+0x248/0x425
    [484747.920314]  [<ffffffff812705cf>] ? ip_finish_output2+0x1c2/0x20f
    [484747.920358]  [<ffffffff81271022>] ? ip_queue_xmit+0x2e5/0x346
    [484747.920401]  [<ffffffff812823db>] ? tcp_transmit_skb+0x6f9/0x737
    [484747.920445]  [<ffffffff81284974>] ? tcp_write_xmit+0x80c/0x8fc
    [484747.920490]  [<ffffffffa037792c>] ? br_nf_post_routing+0x1a4/0x1b7 [bridge]
    [484747.920534]  [<ffffffff81284ab7>] ? __tcp_push_pending_frames+0x22/0x4e
    [484747.920579]  [<ffffffff8127e384>] ? tcp_data_snd_check+0x21/0xea
    [484747.920623]  [<ffffffff812814d6>] ? tcp_rcv_state_process+0x8b0/0x8ee
    [484747.920669]  [<ffffffff8128747f>] ? tcp_v4_do_rcv+0x2dc/0x33c
    [484747.920712]  [<ffffffff8128837a>] ? tcp_v4_rcv+0x40d/0x665
    [484747.920755]  [<ffffffff8126714a>] ? nf_hook_slow+0x62/0xc3
    [484747.920797]  [<ffffffff8126d4e6>] ? ip_local_deliver_finish+0x0/0x1ae
    [484747.920842]  [<ffffffff8126d623>] ? ip_local_deliver_finish+0x13d/0x1ae
    [484747.920887]  [<ffffffff8126d0c3>] ? ip_rcv_finish+0x31f/0x34b
    [484747.920930]  [<ffffffff8126d35a>] ? ip_rcv+0x26b/0x2a6
    [484747.920972]  [<ffffffffa03738e6>] ? br_handle_frame_finish+0x112/0x14d [bridge]
    [484747.921029]  [<ffffffffa037752c>] ? br_nf_pre_routing_finish+0x258/0x27a [bridge]
    [484747.921084]  [<ffffffff8126714a>] ? nf_hook_slow+0x62/0xc3
    [484747.921128]  [<ffffffffa03772d4>] ? br_nf_pre_routing_finish+0x0/0x27a [bridge]
    [484747.921182]  [<ffffffff8100e996>] ? read_tsc+0x5/0x16
    [484747.923851]  [<ffffffffa03781ad>] ? br_nf_pre_routing+0x534/0x553 [bridge]
    [484747.923895]  [<ffffffff810df7ca>] ? get_partial_node+0x15/0x82
    [484747.923938]  [<ffffffff812670a4>] ? nf_iterate+0x43/0x87
    [484747.923981]  [<ffffffffa03737d4>] ? br_handle_frame_finish+0x0/0x14d [bridge]
    [484747.924036]  [<ffffffff8126714a>] ? nf_hook_slow+0x62/0xc3
    [484747.924079]  [<ffffffffa03737d4>] ? br_handle_frame_finish+0x0/0x14d [bridge]
    [484747.924134]  [<ffffffffa03a6731>] ? igb_alloc_rx_buffers+0x121/0x310 [igb]
    [484747.924179]  [<ffffffff8100e1b4>] ? nommu_map_page+0x0/0x9c
    [484747.924224]  [<ffffffffa0373ad4>] ? br_handle_frame+0x1b3/0x1db [bridge]
    [484747.924268]  [<ffffffff8124915f>] ? netif_receive_skb+0x340/0x45e
    [484747.924311]  [<ffffffff81249533>] ? dev_gro_receive+0xd5/0x223
    [484747.924354]  [<ffffffff812493aa>] ? napi_skb_finish+0x1c/0x31
    [484747.924399]  [<ffffffffa03a7020>] ? igb_poll+0x700/0xb70 [igb]
    [484747.924441]  [<ffffffff8100e996>] ? read_tsc+0x5/0x16
    [484747.924483]  [<ffffffff812498ca>] ? net_rx_action+0xa9/0x1cb
    [484747.924526]  [<ffffffff8108fe01>] ? __rcu_process_callbacks+0xb4/0x278
    [484747.924570]  [<ffffffff810499e6>] ? __do_softirq+0xe0/0x1a2
    [484747.924614]  [<ffffffff8101cf7b>] ? lapic_next_event+0x18/0x1d
    [484747.924657]  [<ffffffff8108c1e4>] ? handle_IRQ_event+0x55/0x109
    [484747.924699]  [<ffffffff8100991c>] ? call_softirq+0x1c/0x30
    [484747.924742]  [<ffffffff8100b03f>] ? do_softirq+0x3f/0x79
    [484747.924785]  [<ffffffff81049847>] ? irq_exit+0x36/0x79
    [484747.924827]  [<ffffffff8100a7a2>] ? do_IRQ+0xa3/0xb9
    [484747.924869]  [<ffffffff812f6093>] ? ret_from_intr+0x0/0x11
    [484747.924911]  <EOI>  [<ffffffff8100fd62>] ? mwait_idle+0x6d/0x78
    [484747.925023]  [<ffffffff81007b7f>] ? cpu_idle+0xa3/0xdd
    

  8. Благодарю! Не надеялся получить столько ответов. :)

    Ждём очередной kernel panic чтобы получить полный backtrace, затем пробуем свежие драйвера igb (3.3.6), отключить "засыпание CPU" и GRO.

    Если не поможет, то будем разбираться с предложенными патчами и другими ядрами.

  9. Приветствую, уважаемые! Может кто-то сталкивался с такой ситуацией:

     

    Имеется бридж, который по совместительству еще и шейпер (LARTC: HTB+U32+SFQ). Пропускает до 2Гбит.

    Раз в несколько дней падает в kernel panic. Обычно падает не в пики активности, а тихо так - часов в 5 утра.

     

    Красными полосками отметил моменты сбоев на графике:

    Снимок.png

     

    Снимки экранов: (практически одинаковые)

    post-8-0-39896300-1332750168.jpg

    post-83-0-32704400-1332826808.jpg

    post-83-0-41062100-1332741348.jpg

     

    Debian 6.0.4 x86_64 с ядром 2.6.33.20 собранным из исходников от kernel.org и драйвером igb 3.1.16 от Intel.

    В .config исходников ядра только одно изменение:

    # CONFIG_HZ_100 is not set
    # CONFIG_HZ_250 is not set
    # CONFIG_HZ_300 is not set
    CONFIG_HZ_1000=y
    CONFIG_HZ=1000
    

    igb:

    rmmod igb
    modprobe igb IntMode=2,2,2,2 InterruptThrottleRate=5000,5000,5000,5000 RSS=4,4,4,4 QueuePairs=1,1,1,1 LLIPort=80
    service networking restart
    

    (только что заметил по ошибке скопипащенную опцию LLIPort=80 - уберу после очередной kernel panic :) )

     

    Организован бондинг:

              br0
             /   \
        bond0     bond1
       /   \       /   \
    eth0   eth1   eth2  eth3
    

    modprobe bonding max_bonds=2 mode=4 downdelay=200 updelay=200 xmit_hash_policy=layer2+3
    

    # /etc/network/interfaces
    auto eth0
    iface eth0 inet manual
    bond-master bond0
    
    auto eth1
    iface eth1 inet manual
    bond-master bond0
    
    auto eth2
    iface eth2 inet manual
    bond-master bond1
    
    auto eth3
    iface eth3 inet manual
    bond-master bond1
    
    auto bond0
    allow-hotplug bond0
    iface bond0 inet manual
       bond_mode 802.3ad
       bond_miimon 100
       bond_downdelay 200
       bond_updelay 200
       bond_primary eth0 eth1
    
    auto bond1
    allow-hotplug bond1
    iface bond1 inet manual
       bond_mode 802.3ad
       bond_miimon 100
       bond_downdelay 200
       bond_updelay 200
       bond_primary eth2 eth3
    
    auto br0
    allow-hotplug br0
    iface br0 inet static
       address xxx.xxx.xxx.xxx
       netmask xxx.xxx.xxx.xxx
       network xxx.xxx.xxx.xxx
       broadcast xxx.xxx.xxx.xxx
       gateway xxx.xxx.xxx.xxx
       bridge_ports bond0 bond1
       bridge_maxwait 0
    

     

    Тюнинг интерфейсов:

    # привязка очередей к ядрам CPU
    echo 1  > /proc/irq/`cat /proc/interrupts | grep 'eth0-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 2  > /proc/irq/`cat /proc/interrupts | grep 'eth0-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 4  > /proc/irq/`cat /proc/interrupts | grep 'eth0-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 8  > /proc/irq/`cat /proc/interrupts | grep 'eth0-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    
    echo 10 > /proc/irq/`cat /proc/interrupts | grep 'eth1-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 20 > /proc/irq/`cat /proc/interrupts | grep 'eth1-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 40 > /proc/irq/`cat /proc/interrupts | grep 'eth1-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 80 > /proc/irq/`cat /proc/interrupts | grep 'eth1-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    
    echo 80 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 40 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 20 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 10 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    
    echo 8  > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 4  > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 2  > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    echo 1  > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
    
    # изменение размеров буферов
    ethtool -G eth0 rx 2048
    ethtool -G eth0 tx 2048
    ethtool -G eth1 rx 2048
    ethtool -G eth1 tx 2048
    ethtool -G eth2 rx 2048
    ethtool -G eth2 tx 2048
    ethtool -G eth3 rx 2048
    ethtool -G eth3 tx 2048
    
    # отключение flow control
    ethtool -A eth0 autoneg off rx off tx off
    ethtool -A eth1 autoneg off rx off tx off
    ethtool -A eth2 autoneg off rx off tx off
    ethtool -A eth3 autoneg off rx off tx off
    
    # изменение размера очереди передаваемых пакетов
    ifconfig eth0 txqueuelen 10000
    ifconfig eth1 txqueuelen 10000
    ifconfig eth2 txqueuelen 10000
    ifconfig eth3 txqueuelen 10000
    
    # установка параметров STP
    brctl stp br0 on
    brctl setfd br0 4
    brctl setmaxage br0 6
    brctl setbridgeprio br0 0
    

     

    В iptables самые обычные правила, но используется ipset (из дистрибутива), conntrack выключен:

    rmmod iptable_nat
    rmmod nf_nat
    rmmod nf_conntrack_ipv4
    rmmod nf_defrag_ipv4
    rmmod nf_conntrack
    

    # cat /proc/net/ip_conntrack
    cat: /proc/net/ip_conntrack: Нет такого файла или каталога
    

     

    /etc/sysctl.conf

    # Controls source route verification
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0
    
    # Do not accept source routing
    net.ipv4.conf.default.accept_source_route = 0
    
    # Controls the System Request debugging functionality of the kernel
    kernel.sysrq = 0
    
    # Controls whether core dumps will append the PID to the core filename
    # Useful for debugging multi-threaded applications
    kernel.core_uses_pid = 1
    
    # Controls the use of TCP syncookies
    net.ipv4.tcp_syncookies = 1
    
    # Controls the maximum size of a message, in bytes
    kernel.msgmnb = 65536
    
    # Controls the default maxmimum size of a mesage queue
    kernel.msgmax = 65536
    
    # Controls the maximum shared segment size, in bytes
    kernel.shmmax = 68719476736
    
    # Controls the maximum number of shared memory segments, in pages
    kernel.shmall = 4294967296
    
    
    net.core.wmem_default = 4194394
    net.core.rmem_default = 8388608
    net.core.wmem_max = 16777216
    net.core.rmem_max = 16777216
    net.ipv4.tcp_rmem = 8192 8388608 16777216
    net.ipv4.tcp_wmem = 8192 4194394 16777216
    net.ipv4.tcp_no_metrics_save = 1
    net.core.netdev_max_backlog = 1000
    net.core.somaxconn = 262144
    net.ipv4.tcp_max_tw_buckets = 1440000
    

     

    Как организован шейпер уже писал тут: http://forum.nag.ru/forum/index.php?showtopic=73649&view=findpost&p=695955

     

     

    Клонировали эту систему на новую машину: ничего не изменилось.

     

    Отключили бы шейпер, но это может затянуться на несколько суток.

     

    В данный момент собираем сообщения ядра средствами netconsole и ждём очередной kernel panic...

  10. NiTr0, благодарю за отклик! :)

     

    Вы в результате получите 3 класса, с лимитами по каждому классу, и эта скорость класса будет распределяться между всеми адресами, попавшими в этот класс.

    Действительно, это совсем не то что нам нужно.

     

    Либо - уже готовый скрипт sc

    К сожалению SC не дружит с большим количеством подсетей, поэтому нам не подходит.

     

    Стройте хеш-таблицы правил, и соответственно фильтры.

    Попробовал хеш-фильтр и производительность увеличилась в разы. Спасибо, за отличный совет! :)

     

    Пример для 4х сетей, в которых по 254 абонента: 10.0.0.0/24 10.0.1.0/24 10.0.2.0/24 10.0.3.0/24

    #!/bin/bash
    
    # сетевой интерфейс
    DEV='bond1'
    
    # скорость по умолчанию
    DEFAULT_RATE='2000mbit'
    
    # сброс
    tc q d dev $DEV root handle 1: htb
    
    # корневые дисциплина и класс
    tc q a dev $DEV root handle 1: htb default ffff
    tc c a dev $DEV parent 1: classid 1:1 htb rate $DEFAULT_RATE
    
    # хеш-фильтр
    tc f a dev $DEV parent 1:0 prio 5 protocol ip u32
    tc f a dev $DEV parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 10.0.0.0/8 hashkey mask 0x000000ff at 16 link 2:
    
    # краевые класс и дисиплина по умолчанию
    tc c a dev $DEV parent 1:1 classid 1:ffff htb rate $DEFAULT_RATE
    tc q a dev $DEV parent 1:ffff handle 2: sfq perturb 10
    
    
    # краевые классы, фильтры и дисциплины для ключа 1
    tc c a dev $DEV parent 1:1 classid 1:2 htb rate 10mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:1: match ip src 10.0.0.1 flowid 1:2
    tc q a dev $DEV parent 1:2 handle 3: sfq perturb 10
    
    tc c a dev $DEV parent 1:1 classid 1:3 htb rate 5mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:1: match ip src 10.0.1.1 flowid 1:3
    tc q a dev $DEV parent 1:3 handle 4: sfq perturb 10
    
    tc c a dev $DEV parent 1:1 classid 1:4 htb rate 20mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:1: match ip src 10.0.2.1 flowid 1:4
    tc q a dev $DEV parent 1:4 handle 5: sfq perturb 10
    
    tc c a dev $DEV parent 1:1 classid 1:5 htb rate 1mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:1: match ip src 10.0.3.1 flowid 1:5
    tc q a dev $DEV parent 1:5 handle 6: sfq perturb 10
    
    # ... еще 252 аналогичных блока ...
    
    # ... для ключа 254 (0xFE)
    tc c a dev $DEV parent 1:1 classid 1:100 htb rate 50mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:fe: match ip src 10.0.0.254 flowid 1:100
    tc q a dev $DEV parent 1:100 handle 101: sfq perturb 10
    
    tc c a dev $DEV parent 1:1 classid 1:101 htb rate 8mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:fe: match ip src 10.0.1.254 flowid 1:101
    tc q a dev $DEV parent 1:101 handle 102: sfq perturb 10
    
    tc c a dev $DEV parent 1:1 classid 1:102 htb rate 1mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:fe: match ip src 10.0.2.254 flowid 1:102
    tc q a dev $DEV parent 1:102 handle 103: sfq perturb 10
    
    tc c a dev $DEV parent 1:1 classid 1:103 htb rate 20mbit
    tc f a dev $DEV protocol ip parent 1:0 prio 5 u32 ht 2:fe: match ip src 10.0.3.254 flowid 1:103
    tc q a dev $DEV parent 1:103 handle 104: sfq perturb 10
    

  11. Господа, прошу помочь советом. :)

    Имеется бридж, который производит шейпинг входящего трафика нескольких тысяч абонентов.

    Всё это реализовано средствами Linux Traffic Control (tc).

     

    Т.к. приходится создавать тысячи классов и фильтров, была организована иерархия классов дисциплины HTB.

    Таким образом для каждого пакета может производится не от 1 до тысяч проверок, а от 3 до нескольких сотен (для нашей сети).

                  10.1.0.0/16
                  /         \
                 /           \ 
        10.1.2.0/24         10.1.3.0/24
         /     \             /     \
        /       \           /       \ 
    10.1.2.3   10.1.2.4  10.1.3.4   10.1.3.5
    

     

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

    Средствами ipset для каждого тарифа создаётся iphash таблица. В таблицы добавляются IP адреса абонентов с соответствующими тарифами.

    ipset -N 8mbit
    ipset -A 10.1.2.123
    # ... и т.д. ... 
    
    ipset -N 50mbit
    ipset -A 10.1.2.124 
    # ... и т.д. ...
    
    ipset -N 2mbit
    ipset -A 10.10.9.234 
    # ... и т.д. ...
    

    Средствами iptables на внешнем интерфейсе пакеты маркируются идентификаторами тарифов.

    iptables -t mangle -A PREROUTING -i bond0 -m set --set 8mbit dst -j MARK --set-mark 8
    iptables -t mangle -A PREROUTING -i bond0 -m set --set 50mbit dst -j MARK --set-mark 50
    iptables -t mangle -A PREROUTING -i bond0 -m set --set 2mbit dst -j MARK --set-mark 2
    

    А для tc остаётся создать несколько простых дисциплин, классов и фильтров:

    # внутренний сетевой интерфейс
    DEV='bond1'
    
    # скорость по умолчанию
    DEFAULT_RATE='100mbit'
    
    # сброс
    tc qdisc del dev $DEV root handle 1: htb
    
    # корневые дисциплина и класс
    tc qdisc add dev $DEV root handle 1: htb default 9999
    tc class add dev $DEV parent 1: classid 1:1 htb rate $DEFAULT_RATE
    
    # краевые классы, фильтры и дисциплины для каждого тарифа:
    tc class add dev $DEV parent 1:1 classid 1:8 htb rate 8mbit
    tc filter add dev $DEV protocol ip parent 1:0 handle 8 flowid 1:8
    
    tc class add dev $DEV parent 1:1 classid 1:50 htb rate 50mbit
    tc filter add dev $DEV protocol ip parent 1:0 handle 50 flowid 1:50
    
    tc class add dev $DEV parent 1:1 classid 1:2 htb rate 2mbit
    tc filter add dev $DEV protocol ip parent 1:0 handle 2 flowid 1:2
    
    # краевые класс и дисиплина по умолчанию
    tc class add dev $DEV parent 1:1 classid 1:9999 htb rate $DEFAULT_RATE
    tc qdisc add dev $DEV parent 1:9999 handle 2: sfq perturb 10
    

     

    Стоит попробовать, или лучше сразу смотреть в сторону других решений?

     

     

     

    На всякий случай, пример текущей реализации без iptables и ipset:

    # сетевой интерфейс
    DEV='bond1'
    
    # скорость по умолчанию
    DEFAULT_RATE='100mbit'
    
    # сброс
    tc qdisc del dev $DEV root handle 1: htb
    
    # корневые дисциплина и класс
    tc qdisc add dev $DEV root handle 1: htb default 9999
    tc class add dev $DEV parent 1: classid 1:1 htb rate $DEFAULT_RATE
    
    
    
    # классы и фильтры для 10-и сетей /16
    tc class add dev $DEV parent 1:1 classid 1:2 htb rate $DEFAULT_RATE
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.1.0.0/16 flowid 1:2
    
    tc class add dev $DEV parent 1:1 classid 1:3 htb rate $DEFAULT_RATE
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.2.0.0/16 flowid 1:3
    
    # ... и т.д. ...
    
    tc class add dev $DEV parent 1:1 classid 1:11 htb rate $DEFAULT_RATE
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.10.0.0/16 flowid 1:11
    
    # краевые класс и дисиплина по умолчанию
    tc class add dev $DEV parent 1:1 classid 1:9999 htb rate $DEFAULT_RATE
    tc qdisc add dev $DEV parent 1:9999 handle 2: sfq perturb 10
    
    
    
    # классы и фильтры для 100-а сетей /24
    tc class add dev $DEV parent 1:2 classid 1:12 htb rate $DEFAULT_RATE
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.1.0.0/24 flowid 1:12
    
    tc class add dev $DEV parent 1:2 classid 1:13 htb rate $DEFAULT_RATE
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.1.1.0/24 flowid 1:13
    
    # ... и т.д. ...
    
    tc class add dev $DEV parent 1:11 classid 1:112 htb rate $DEFAULT_RATE
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.10.9.0/24 flowid 1:112
    
    
    
    # краевые классы, фильтры и дисциплины для пары тысяч абонентов
    tc class add dev $DEV parent 1:5 classid 1:113 htb rate 8mbit
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.1.2.123 flowid 1:113
    tc qdisc add dev $DEV parent 1:113 handle 3: sfq perturb 10
    
    tc class add dev $DEV parent 1:5 classid 1:114 htb rate 50mbit
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.1.2.124 flowid 1:114
    tc qdisc add dev $DEV parent 1:114 handle 4: sfq perturb 10
    
    # ... и т.д. ...
    
    tc class add dev $DEV parent 1:112 classid 1:2345 htb rate 2mbit
    tc filter add dev $DEV protocol ip parent 1:0 u32 match ip dst 10.10.9.234 flowid 1:2345
    tc qdisc add dev $DEV parent 1:2345 handle 2232: sfq perturb 10
    

  12. Вопрос любителям Exim4:

    Очень хочется использовать Exim4 в качестве прозрачного SMTP прокси. Возможно ли это?

     

    Знаю что можно настроить его как открытый релей:

    (Ubuntu 8.04.4 LTS и Exim4 version 4.69-2ubuntu0.1)

    $ cat /etc/exim4/update-exim4.conf.conf 
    # /etc/exim4/update-exim4.conf.conf 
    # 
    # Edit this file and /etc/mailname by hand and execute update-exim4.conf 
    # yourself or use 'dpkg-reconfigure exim4-config' 
    # 
    # Please note that this is _not_ a dpkg-conffile and that automatic changes 
    # to this file might happen. The code handling this will honor your local 
    # changes, so this is usually fine, but will break local schemes that mess 
    # around with multiple versions of the file. 
    # 
    # update-exim4.conf uses this file to determine variable values to generate 
    # exim configuration macros for the configuration file. 
    # 
    # Most settings found in here do have corresponding questions in the 
    # Debconf configuration, but not all of them. 
    # 
    # This is a Debian specific file 
    
    dc_eximconfig_configtype='internet' 
    dc_other_hostnames='-e false' 
    dc_local_interfaces='' 
    dc_readhost='' 
    dc_relay_domains='*' 
    dc_minimaldns='true' 
    dc_relay_nets='локальная сеть' 
    dc_smarthost='' 
    CFILEMODE='644' 
    dc_use_split_config='true' 
    dc_hide_mailname='' 
    dc_mailname_in_oh='true' 
    dc_localdelivery='mail_spool' 
    MAIN_TLS_ENABLE='true'

    Но этого не достаточно, т.к. некоторые почтовые клиенты (например Mozilla Thunderbird) с настроенной аутентификацией не могут отправлять почту.

    Объяснять абонентам о том что в почтовых клиентах нужно отключить аутентификацию - не самый лучший выход из ситуации.