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

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

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

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

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

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


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

14 часов назад, taf_321 сказал:

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

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

 

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

 

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

rcvBuf

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

rcvLowat

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

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


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

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

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


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

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
 

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


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

Очень странно, что параметр не нашелся по первому 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

 

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


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

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)
 

Почему?

 

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


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

Потому что:
 

        /* 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 вообще нигде не встречается. Откуда вы его взяли?

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


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

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

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


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

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

 

http://www.netlab.linkpc.net/wiki/ru:software:msd:lite#настройки

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


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

Только что, taf_321 сказал:

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

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

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


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

В 05.05.2019 в 12:22, demi сказал:

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

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

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


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

6 часов назад, Ivan_83 сказал:

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

Никак нет:

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

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


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

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

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


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

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

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

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

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


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

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

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


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

On 5/5/2019 at 11:30 AM, demi said:

sysctl -p

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

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


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

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

 

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

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


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

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

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


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

В 22.08.2019 в 16:45, vurd сказал:

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

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

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


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

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

С недавних пор стал падать 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

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


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

9 часов назад, cyb3r_ang31 сказал:

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

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

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

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


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

Собрал новый сервер. Система 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 На всякий случай включил запись логов, чтобы можно было посмотреть в момент проблемы.

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


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

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

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

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


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

2 часа назад, Ivan_83 сказал:

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

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

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

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


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

Join the conversation

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

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

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

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

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

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

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