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

msd Lite - тестируем Замена udpxy если у кого оно ещё осталось

1 час назад, demi сказал:

Что может вызывать кратковременное рассыпание областей (особенно динамичных мест) на картинке?

Увеличьте размер буферов под udp.

Share this post


Link to post
Share on other sites
14 часов назад, taf_321 сказал:

Увеличьте размер буферов под udp.

rcvBuf = 2048 маловато? 

 

Не совсем понятно, как он на linux соотносится с rcvLowat и как им управлять, если он игнорируется ядром? Что значит : данный параметр реализован в программе ...

 

Где можно пожробнее прочитать рпо кольцевой буфер?

rcvBuf

Максимальный размер буфера для приёма (SO_RCVBUF).

rcvLowat

Минимальный размер данных в буфере сокета для начала считывания в кольцевой буфер и анализа (если задан флаг fMPEG2TSAnalyzing) (SO_RCVLOWAT).
На Linux данный параметр игнорируется ядром и чтение для udp осуществляется по пакетно, что ощутимо повышает нагрузку.
Для tcp чтение осуществляется по мере поступления данных.
Для Linux данный параметр реализован в программе, что позволило немножко сэкономить ресурсы процессора.

Share this post


Link to post
Share on other sites

Речь немного нее про это. Я имел в виду параметр ядра net.ipv4.udp_mem какое сейчас у него значение?

Share this post


Link to post
Share on other sites
24 минуты назад, taf_321 сказал:

Речь немного нее про это. Я имел в виду параметр ядра net.ipv4.udp_mem какое сейчас у него значение?

sysctl -p | grep mem
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65535 16777216
 

sysctl -p | grep udp
 

Share this post


Link to post
Share on other sites

Очень странно, что параметр не нашелся по первому grep. Настройки у моего стримера с 10G портами:


 

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.udp_mem = 8388608 16777216 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432

 

Share this post


Link to post
Share on other sites

Msd_lite не пишет в Ramdisk, почему-то открывает файлы в /tmp на hdd

 

root@iptvunicaster2:~# /etc/init.d/msd_lite status
root@iptvunicaster2:~# lsof /tmp
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
atopacctd 7100 root  cwd    DIR  254,3     4096    2 /tmp
root@iptvunicaster2:~# lsof /mnt/ramdisk/
root@iptvunicaster2:~# lsof /tmp
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
atopacctd  7100 root  cwd    DIR  254,3     4096    2 /tmp
msd_lite  17623 root  DEL-W  REG  254,3            11 /tmp/msd-17623-4435664b198f55f876bf17089e78647b.tmp
msd_lite  17623 root   34uW  REG  254,3 16777216   11 /tmp/msd-17623-4435664b198f55f876bf17089e78647b.tmp (deleted)
root@iptvunicaster2:~# cat /etc/msd_lite/msd_lite.conf | grep ring
                        <ringBufSize>16384</ringBufSize> <!-- Stream receive ring buffer size. Must be multiple of sndBlockSize. -->
                        <ringBufStorePath>/mnt/ramdisk</ringBufStorePath>
root@iptvunicaster2:~#
 

root@iptvunicaster2:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           7,8G         97M        6,4G         82M        1,3G        7,4G
Swap:          8,0G          0B        8,0G
root@iptvunicaster2:~# mount | grep /mnt
tmpfs on /mnt/ramdisk type tmpfs (rw,relatime,size=2097152k)
 

Почему?

 

Share this post


Link to post
Share on other sites

Потому что:
 

        /* Create buf */
        thrpt_gettimev(str_hub->thrpt, 0, &tv_now);
        md5_get_digest_strA((char*)&tv_now, sizeof(tv_now), (char*)hash);
        snprintf(filename, (sizeof(filename) - 1), "/tmp/msd-%zu-%s.tmp",
            (size_t)getpid(), hash);
        str_hub->r_buf_fd = open(filename, (O_CREAT | O_EXCL | O_RDWR), 0600);

 

Поднимите /tmp на tempfs. Кстати, дереве исходников msd_lite параметра ringBufStorePath вообще нигде не встречается. Откуда вы его взяли?

Share this post


Link to post
Share on other sites
4 часа назад, taf_321 сказал:

Потому что:
 


        /* Create buf */
        thrpt_gettimev(str_hub->thrpt, 0, &tv_now);
        md5_get_digest_strA((char*)&tv_now, sizeof(tv_now), (char*)hash);
        snprintf(filename, (sizeof(filename) - 1), "/tmp/msd-%zu-%s.tmp",
            (size_t)getpid(), hash);
        str_hub->r_buf_fd = open(filename, (O_CREAT | O_EXCL | O_RDWR), 0600);

 

Поднимите /tmp на tempfs. Кстати, дереве исходников msd_lite параметра ringBufStorePath вообще нигде не встречается. Откуда вы его взяли?

Взял его от сюда: http://www.netlab.linkpc.net/wiki/ru:software:msd:config

Share this post


Link to post
Share on other sites
Только что, taf_321 сказал:

Это конфиг от платной версии. Лучше возьмите конфиг из исходников msd_lite.

А где его взять?

Share this post


Link to post
Share on other sites
В 05.05.2019 в 12:22, demi сказал:

Msd_lite не пишет в Ramdisk, почему-то открывает файлы в /tmp на hdd

Почему то у вас /tmp на диск смонтирован :)

Share this post


Link to post
Share on other sites
6 часов назад, Ivan_83 сказал:

Почему то у вас /tmp на диск смонтирован :)

Никак нет:

root@iptvunicaster2:~# mount | grep /tmp
tmpfs on /tmp type tmpfs (rw,relatime)
root@iptvunicaster2:~#
 

Share this post


Link to post
Share on other sites

Тогда и файлы открываемые в /tmp не могут быть на hdd.

Share this post


Link to post
Share on other sites
1 час назад, Ivan_83 сказал:

Тогда и файлы открываемые в /tmp не могут быть на hdd.

Не в этом дело. Человек прописал настройку для фичи из платной версии, и удивился что работает не по конфигу.

Share this post


Link to post
Share on other sites

@Ivan_83, подскажите, а оно при изменении переменной congestionControl на bbr заработает, если в системе есть поддержка? В плане алгоритм прозрачно выбирается или нужно еще что-то делать, чтобы на него перейти.

Share this post


Link to post
Share on other sites
On 5/5/2019 at 11:30 AM, demi said:

sysctl -p

А как сделать на debian 9 on boot?

Share this post


Link to post
Share on other sites

Имеется большая проблема на связке msd_lite+nginx proxy_pass, связанных через lo. В этом случае msd шлет пакеты размером 32767 байт. Которые, разумеется, потом фрагментируются. Проявляется это в виде рассыпания картинки на приставках Eltex. С udpxy таких проблем не обнаружено. VLC показывает при этом нормально.

 

пакеты на входе имеют длину 1316 байт

Share this post


Link to post
Share on other sites

Вообще, реализация mpegts@http у eltex nv100 очень кривая. 301-302 кодов не знает, потерянные пакеты перезапрашивать не умеет. Как ни странно, если передать ей заголовок content leght 999999999999999999999999999999999, то никаких проблем с просмотром больше нет, но крайне долго(более 10 секунд) переключается канал

Share this post


Link to post
Share on other sites
В 22.08.2019 в 16:45, vurd сказал:

подскажите, а оно при изменении переменной congestionControl на bbr заработает, если в системе есть поддержка? В плане алгоритм прозрачно выбирается или нужно еще что-то делать, чтобы на него перейти.

Да, фишка в том, что ты можешь указывать на разных биндингах разные tcp cc и оно реально per socket будет разным, если конечно ядерный модуль с таким именем загружен.

Share this post


Link to post
Share on other sites

Доброго времени суток.

С недавних пор стал падать msd_lite каждый день примерно в одно и тоже время в ЧНН.

В логах следующее:

[2019-10-14 20:34:22] http_srv_new_conn_cb, line 892: error 9: Bad file descriptor client ip: 127.0.0.1:33266
...
[2019-10-14 20:34:23] http_srv_new_conn_cb, line 892: error 9: Bad file descriptor client ip: 127.0.0.1:33270
...
[2019-10-14 20:34:27] str_hub_create_int, line 510: io_task_notify_create() error 9: Bad file descriptor
[2019-10-14 20:34:34]: Multi stream daemon lite 1.08: started
[2019-10-14 20:34:34]: Build: Oct 25 2017 11:40:33, Release
[2019-10-14 20:34:34]: CPU count: 16
[2019-10-14 20:34:34]: descriptor table size: 1024 (max files)
[2019-10-14 20:34:34]: Thread 1 started...
[2019-10-14 20:34:34]: Thread 3 started...
[2019-10-14 20:34:34]: Bind thread 3 to CPU 3
[2019-10-14 20:34:34]: Bind thread 1 to CPU 1
[2019-10-14 20:34:34]: Thread 5 started...
[2019-10-14 20:34:34]: Thread 4 started...
[2019-10-14 20:34:34]: Thread 2 started...
[2019-10-14 20:34:34]: Thread 10 started...
[2019-10-14 20:34:34]: Thread 11 started...
[2019-10-14 20:34:34]: Thread 7 started...
[2019-10-14 20:34:34]: Thread 14 started...
[2019-10-14 20:34:34]: Thread 8 started...
[2019-10-14 20:34:34]: Bind thread 4 to CPU 4
[2019-10-14 20:34:34]: Thread 9 started...
[2019-10-14 20:34:34]: Bind thread 2 to CPU 2
[2019-10-14 20:34:34]: Bind thread 9 to CPU 9
[2019-10-14 20:34:34]: Bind thread 5 to CPU 5
[2019-10-14 20:34:34]: Bind thread 10 to CPU 10
[2019-10-14 20:34:34]: Thread 12 started...
[2019-10-14 20:34:34]: Thread 13 started...
[2019-10-14 20:34:34]: Bind thread 11 to CPU 11
[2019-10-14 20:34:34]: Bind thread 12 to CPU 12
[2019-10-14 20:34:34]: Bind thread 7 to CPU 7
[2019-10-14 20:34:34]: Thread 15 started...
[2019-10-14 20:34:34]: Bind thread 14 to CPU 14
[2019-10-14 20:34:34]: hostname: *
[2019-10-14 20:34:34]: Thread 6 started...
[2019-10-14 20:34:34]: Bind thread 8 to CPU 8
[2019-10-14 20:34:34]: Bind thread 6 to CPU 6
[2019-10-14 20:34:34]: bind 127.0.0.1:4022, backlog = 2048, cc_name = htcp
[2019-10-14 20:34:34]: Thread 0 started...
[2019-10-14 20:34:34]: Bind thread 13 to CPU 13
[2019-10-14 20:34:34]: Bind thread 0 to CPU 0
[2019-10-14 20:34:34]: Bind thread 15 to CPU 15

Подскажите где что посмотреть, судя по логам что то с дескрипторами файлов, но

параметры max files, open files и тд везде увеличивать пробовали, не помогает.

И почему descriptor table size: 1024

Share this post


Link to post
Share on other sites
9 часов назад, cyb3r_ang31 сказал:

И почему descriptor table size: 1024

1. limit или limits смотрите

2. конфиг самого msd_lite проверьте

Share this post


Link to post
Share on other sites

Собрал новый сервер. Система Ubuntu 18.04. По началу текли дрова сетевой ixgbe. Обновил до последней версии. Сейчас периодически в ЧНН начинает сыпаться картинка на всех каналах. Помогает перезапуск msd_lite.

 

Сетевая карта X520-DA2. Два порты собраны в лаг. Тюнинг сетевого стека

sysctl -w net.core.rmem_default=8388608
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_default=8388608
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="8192 87380 8388608"
sysctl -w net.ipv4.tcp_wmem="8192 87380 8388608"
sysctl -w net.ipv4.tcp_mem="8388608 12582912 16777216"
sysctl -w net.ipv4.udp_mem="8388608 12582912 16777216"
sysctl -w net.ipv4.udp_rmem_min=16384
sysctl -w net.ipv4.udp_wmem_min=16384

ethtool -G enp7s0f0 rx 4096 tx 4096
ethtool -A enp7s0f0 autoneg off rx off tx off

ethtool -G enp7s0f1 rx 4096 tx 4096
ethtool -A enp7s0f1 autoneg off rx off tx off

msd_lite запускаю с помощью systemd. Юнит запуска

[Unit]
Description=MSD Lite
After=network.target

[Service]
LimitNOFILE=262144
WorkingDirectory=/opt/msd
ExecStart=/opt/msd/msd_lite -c msd_lite.conf
ExecStop=/bin/kill -9 $MAINPID
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Все потоки пишутся в /tmp, которая является tmpfs.

 

Пока замечено, что проблема появляется когда кол-во клиентов приближается к 2 тыс. Трафика при этом 6-7 Гбит. На этом же серваке выжимали из msd_lite 15 Гбит, но система крякнулась в один прекрасный момент и потребовалась переустановка.

 

PS На всякий случай включил запись логов, чтобы можно было посмотреть в момент проблемы.

Share this post


Link to post
Share on other sites

Сколько каналов? И сколько с них в сумме входящий?

Сыпет - скорее всего с получением проблемы.

Share this post


Link to post
Share on other sites
2 часа назад, Ivan_83 сказал:

Сколько каналов? И сколько с них в сумме входящий?

Сыпет - скорее всего с получением проблемы.

@Ivan_83 , разобрался с проблемой. Сам виноват. Причина рассыпаний была в том, что в процессах висел irqbalance, который раскидал прерывания таким образом по ядрам, что в ЧНН одно ядро в 100% улетало в soft irq. Вырубил irqbalance. Раскидал прерывания скриптом.

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