Masiku ano, pali njira zokonzekera (zaumwini) zowunikira mitsinje ya IP (TS), mwachitsanzo.
Mwachidule kwambiri za TSDuck
TSDuck ndi pulogalamu yotseguka (2-Clause BSD license) pulogalamu (zothandizira zotonthoza ndi laibulale yopangira zida kapena mapulagini) pakuwongolera mitsinje ya TS. Monga cholowetsa, imatha kugwira ntchito ndi IP (multicast/unicast), http, hls, dvb tuners, dektec dvb-asi demodulator, pali jenereta yamkati ya TS-stream ndikuwerenga kuchokera pamafayilo. Kutulutsa kumatha kukhala kulembera fayilo, IP (multicast/unicast), hls, dektec dvb-asi ndi HiDes modulators, osewera (mplayer, vlc, xine) ndi dontho. Ma processor osiyanasiyana amatha kuphatikizidwa pakati pazolowetsa ndi zotulutsa, mwachitsanzo, kukonzanso kwa PID, kukwapula / kugwetsa, kusanthula kauntala kwa CC, kuwerengera kwa bitrate, ndi zina zomwe zimachitika pamitsinje ya TS.
M'nkhaniyi, mitsinje ya IP (multicast) idzagwiritsidwa ntchito ngati cholowetsa, ma processor bitrate_monitor (kuchokera ku dzina likuwonekeratu kuti ndi chiyani) ndi kupitiriza (kusanthula ma counters CC) amagwiritsidwa ntchito. Mutha kusintha mosavuta IP multicast ndi mtundu wina wolowetsa wothandizidwa ndi TSDuck.
Likupezeka
Kenako, mtundu wa TSDuck 3.19-1520 umagwiritsidwa ntchito, Linux imagwiritsidwa ntchito ngati OS (debian 10 idagwiritsidwa ntchito pokonzekera yankho, CentOS 7 idagwiritsidwa ntchito kwenikweni)
Kukonzekera TSDuck ndi OS
Musanayambe kuyang'anira kuyenda kwenikweni, muyenera kuonetsetsa kuti TSDuck ikugwira ntchito molondola ndipo palibe madontho pa intaneti khadi kapena OS (socket). Izi zimafunika kuti musamaganize pambuyo pake pomwe madontho adagwera - pamaneti kapena "mkati mwa seva". Mutha kuyang'ana madontho pamlingo wamakhadi a netiweki ndi lamulo la ethtool -S ethX, kukonza kumachitika ndi ethtool yomweyo (nthawi zambiri, muyenera kukulitsa buffer ya RX (-G) ndipo nthawi zina kuletsa zotsitsa zina (-K)). Monga malingaliro ambiri, atha kulangizidwa kuti agwiritse ntchito doko losiyana kuti alandire magalimoto omwe amawunikidwa, ngati n'kotheka, izi zimachepetsa zolakwa zabodza zomwe zimagwirizanitsidwa ndi mfundo yakuti dontho linachitika ndendende pa doko la analyzer chifukwa cha kupezeka kwa magalimoto ena. Ngati izi sizingatheke (mini-kompyuta / NUC yokhala ndi doko limodzi imagwiritsidwa ntchito), ndiye kuti ndizofunikira kwambiri kukhazikitsa patsogolo kwa magalimoto omwe akuwunikidwa pokhudzana ndi zina zonse pa chipangizo chomwe analyzer amalumikizidwa. Ponena za malo enieni, apa muyenera kusamala ndikupeza madontho a paketi kuyambira pa doko lakuthupi ndikumaliza ndi kugwiritsa ntchito mkati mwa makina enieni.
Mbadwo ndi kulandila kwa mtsinje mkati mwa olandira
Monga gawo loyamba pokonzekera TSDuck, tidzapanga ndikulandila magalimoto mkati mwa gulu limodzi logwiritsa ntchito maukonde.
Kukonzekera chilengedwe:
ip netns add P #ΡΠΎΠ·Π΄Π°ΡΠΌ netns P, Π² Π½ΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π°Π½Π°Π»ΠΈΠ· ΡΡΠ°ΡΠΈΠΊΠ°
ip link add type veth #ΡΠΎΠ·Π΄Π°ΡΠΌ veth-ΠΏΠ°ΡΡ - veth0 ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π² netns ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π² ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°ΡΠΈΠΊ)
ip link set dev veth1 netns P #veth1 - ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² netns P (Π½Π° ΡΡΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠΌ ΡΡΠ°ΡΠΈΠΊΠ°)
ip netns exec P ifconfig veth1 192.0.2.1/30 up #ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ IP Π½Π° veth1, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ
ip netns exec P ip ro add default via 192.0.2.2 #Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΌΠ°ΡΡΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²Π½ΡΡΡΠΈ nents P
sysctl net.ipv6.conf.veth0.disable_ipv6=1 #ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΠΌ IPv6 Π½Π° veth0 - ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π² ΡΡΡΡΡΠΈΠΊ TX Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π» ΠΏΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΌΡΡΠΎΡ
ifconfig veth0 up #ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ veth0
ip route add 239.0.0.1 dev veth0 #ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΌΠ°ΡΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΠ‘ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ»Π° ΡΡΠ°ΡΠΈΠΊ ΠΊ 239.0.0.1 Π² ΡΡΠΎΡΠΎΠ½Ρ veth0
Chilengedwe chakonzeka. Timayambira traffic analyzer:
ip netns exec P tsp --realtime -t
-I ip 239.0.0.1:1234
-P continuity
-P bitrate_monitor -p 1 -t 1
-O drop
pomwe "-p 1 -t 1" zikutanthauza kuti muyenera kuwerengera bitrate sekondi iliyonse ndikuwonetsa zambiri za bitrate sekondi iliyonse.
Timayamba jenereta yamagalimoto ndi liwiro la 10Mbps:
tsp -I craft
-P regulate -b 10000000
-O ip -p 7 -e --local-port 6000 239.0.0.1:1234
kumene "-p 7 -e" amatanthauza kuti muyenera kunyamula mapaketi 7 TS mu 1 IP paketi ndi kuchita molimba (-e), i.e. nthawi zonse dikirani mapaketi a 7 TS kuchokera ku purosesa yomaliza musanatumize paketi ya IP.
Analyzer akuyamba kutulutsa mauthenga omwe akuyembekezeredwa:
* 2020/01/03 14:55:44 - bitrate_monitor: 2020/01/03 14:55:44, TS bitrate: 9,970,016 bits/s
* 2020/01/03 14:55:45 - bitrate_monitor: 2020/01/03 14:55:45, TS bitrate: 10,022,656 bits/s
* 2020/01/03 14:55:46 - bitrate_monitor: 2020/01/03 14:55:46, TS bitrate: 9,980,544 bits/s
Tsopano onjezani madontho:
ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP
ndipo mauthenga ngati awa akuwoneka:
* 2020/01/03 14:57:11 - continuity: packet index: 80,745, PID: 0x0000, missing 7 packets
* 2020/01/03 14:57:11 - continuity: packet index: 83,342, PID: 0x0000, missing 7 packets
zomwe zikuyembekezeka. Letsani kutayika kwa paketi (ip netns exec P iptables -F) ndikuyesera kuonjezera bitrate ya jenereta ku 100Mbps. Analyzer amafotokoza zolakwika zambiri za CC ndi pafupifupi 75 Mbps m'malo mwa 100. Tikuyesera kudziwa yemwe ali ndi mlandu - jenereta ilibe nthawi kapena vuto siliri mmenemo, chifukwa ichi timayamba kupanga chiwerengero chokhazikika cha mapaketi (700000 TS mapaketi = 100000 IP mapaketi):
# ifconfig veth0 | grep TX
TX packets 151825460 bytes 205725459268 (191.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# tsp -I craft -c 700000 -P regulate -b 100000000 -P count -O ip -p 7 -e --local-port 6000 239.0.0.1:1234
* count: PID 0 (0x0000): 700,000 packets
# ifconfig veth0 | grep TX
TX packets 151925460 bytes 205861259268 (191.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Monga mukuwonera, ndendende 100000 mapaketi a IP adapangidwa (151925460-151825460). Kotero ife tikuwona zomwe zikuchitika ndi analyzer, kuti tichite izi timayang'ana ndi RX counter pa veth1, ndiyofanana kwambiri ndi TX counter pa veth0, ndiye timayang'ana zomwe zikuchitika pazitsulo:
# ip netns exec P cat /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
133: 010000EF:04D2 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 72338 2 00000000e0a441df 24355
Pano mukhoza kuona chiwerengero cha madontho = 24355. Mu mapaketi a TS, izi ndi 170485 kapena 24.36% ya 700000, kotero tikuwona kuti 25% yomweyi ya bitrate yotayika ndi madontho mu socket ya udp. Kutsika mu socket ya UDP nthawi zambiri kumachitika chifukwa cha kusowa kwa buffer, yang'anani kukula kwa socket buffer ndi kukula kwa socket buffer:
# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992
Chifukwa chake, ngati mapulogalamu sakufunsani kukula kwa buffer, sockets amapangidwa ndi buffer ya 208 KB, koma ngati apempha zambiri, sangalandirebe zomwe zapemphedwa. Popeza mutha kuyika kukula kwa bafa mu tsp pakulowetsa kwa IP (-buffer-size), sitikhudza kukula kwa socket, koma kungoyika kukula kwa socket buffer ndikulongosola kukula kwa bafa momveka bwino kudzera mu mikangano ya tsp:
sysctl net.core.rmem_max=8388608
ip netns exec P tsp --realtime -t -I ip 239.0.0.1:1234 -b 8388608 -P continuity -P bitrate_monitor -p 1 -t 1 -O drop
Ndikukonzekera uku kwa socket buffer, tsopano bitrate yomwe yanenedwa ili pafupi 100Mbps, palibe zolakwika za CC.
Malinga ndi kugwiritsa ntchito kwa CPU kwa tsp application yokha. Zogwirizana ndi core i5-4260U CPU @ 1.40GHz, 10Mbps flow analysis ifunika 3-4% CPU, 100Mbps - 25%, 200Mbps - 46%. Mukayika % Packet Loss, katundu pa CPU samawonjezeka (koma akhoza kuchepa).
Pazida zopanga zambiri, zinali zotheka kupanga ndi kusanthula mitsinje yopitilira 1Gb / s popanda vuto lililonse.
Kuyesa pa makhadi enieni amtaneti
Pambuyo poyesa pa veth peyala, muyenera kutenga makamu awiri kapena madoko awiri a khamu limodzi, kugwirizanitsa madoko kwa wina ndi mzake, kuyendetsa jenereta pa imodzi, ndi analyzer pa chachiwiri. Panalibe zodabwitsa apa, koma kwenikweni zonse zimadalira hardware, zofooka ndizo, ndizosangalatsa kwambiri pano.
Kugwiritsa ntchito zomwe zalandilidwa ndi njira yowunikira (Zabbix)
tsp ilibe API yowerengeka ndi makina ngati SNMP kapena yofananira. Mauthenga a CC ayenera kuphatikizidwa kwa mphindi imodzi (ndi kuchuluka kwa paketi kutayika, pakhoza kukhala mazana / zikwi / makumi a zikwi pa sekondi iliyonse, kutengera bitrate).
Chifukwa chake, kuti musunge zidziwitso zonse ndikujambula ma graph pazolakwa za CC ndi bitrate ndikupanga ngozi zamtundu wina, pangakhale izi:
- Phatikizani ndikuphatikiza (ndi CC) zotsatira za tsp, i.e. sinthani kukhala mawonekedwe omwe mukufuna.
- Malizitsani tsp yokha ndi / kapena mapulagini a purosesa bitrate_monitor ndi kupitiriza kotero kuti zotsatira zake zimaperekedwa mu mawonekedwe owerengeka ndi makina oyenera kuwunikira.
- Lembani pulogalamu yanu pamwamba pa laibulale ya tsduck.
Mwachiwonekere, kusankha 1 ndikosavuta kwambiri pakuchita khama, makamaka poganizira kuti tsduck yokha imalembedwa m'chinenero chochepa (ndi zamakono) chinenero (C ++)
Chitsanzo chosavuta cha bash parser + aggregator chinawonetsa kuti pamtsinje wa 10Mbps ndi 50% kutayika kwa paketi (zoipa kwambiri), ndondomeko ya bash idadya nthawi 3-4 CPU kuposa momwe tsp ndondomeko yokha. Izi ndizosavomerezeka. Kwenikweni chidutswa cha chitsanzo ichi pansipa
Zakudyazi pamwamba
#!/usr/bin/env bash
missingPackets=0
ccErrorSeconds=0
regexMissPackets='^* (.+) - continuity:.*missing ([0-9]+) packets$'
missingPacketsTime=""
ip netns exec P tsp --realtime -t -I ip -b 8388608 "239.0.0.1:1234" -O drop -P bitrate_monitor -p 1 -t 1 -P continuity 2>&1 |
while read i
do
#line example:* 2019/12/28 23:41:14 - continuity: packet index: 6,078, PID: 0x0100, missing 5 packets
#line example 2: * 2019/12/28 23:55:11 - bitrate_monitor: 2019/12/28 23:55:11, TS bitrate: 4,272,864 bits/s
if [[ "$i" == *continuity:* ]]
then
if [[ "$i" =~ $regexMissPackets ]]
then
missingPacketsTimeNew="${BASH_REMATCH[1]}" #timestamp (seconds)
if [[ "$missingPacketsTime" != "$missingPacketsTimeNew" ]] #new second with CC error
then
((ccErrorSeconds += 1))
fi
missingPacketsTime=$missingPacketsTimeNew
packets=${BASH_REMATCH[2]} #TS missing packets
((missingPackets += packets))
fi
elif [[ "$i" == *bitrate_monitor:* ]]
then
: #...
fi
done
Kuphatikiza pa kukhala wodekha mosagwirizana, palibe ulusi wabwinobwino mu bash, ntchito za bash ndizosiyana ndipo ndimayenera kulemba mtengo wa missingPackets kamodzi sekondi imodzi kumbali (polandira mauthenga a bitrate omwe amabwera sekondi iliyonse). Zotsatira zake, bash adasiyidwa yekha ndipo adasankhidwa kuti alembe chopukutira (parser + aggregator) mu golang. Kugwiritsa ntchito kwa CPU kwa code ya golang yofanana ndi nthawi 4-5 kuposa momwe tsp ndondomeko yokha. Kuthamanga kwa wrapper chifukwa cha kusintha kwa bash ndi golang kunakhala pafupifupi nthawi 16 ndipo zotsatira zake ndizovomerezeka (CPU pamwamba pa 25% pazovuta kwambiri). Fayilo ya golang source ilipo
Kuyambitsa wrapper
Kukhazikitsa wrapper, template yosavuta ya serviced idapangidwa (
Kuti mupange chitsanzo cha ntchitoyo, muyenera kuyendetsa systemctl enable command [imelo ndiotetezedwa]:1234, ndiye thamangani ndi systemctl start [imelo ndiotetezedwa]: 1234.
Kupeza kuchokera ku Zabbix
Kuti zabbix athe kupeza ntchito zomwe zikuyenda, zachitika
Zabbix template
Mndandanda wachidule (chabwino, bwanji ngati wina asankha kuugwiritsa ntchito)
- Onetsetsani kuti tsp sichiponya mapaketi pansi pa "zabwino" (jenereta ndi analyzer zimagwirizana mwachindunji), ngati pali madontho, onani ndime 2 kapena malemba a nkhaniyi pankhaniyi.
- Pangani kukonza socket buffer (net.core.rmem_max=8388608).
- Lembani tsduck-stat.go (pitani kumanga tsduck-stat.go).
- Ikani template ya utumiki mu /lib/systemd/system.
- Yambitsani ntchito ndi systemctl, onetsetsani kuti zowerengera zayamba kuwoneka (grep "" /dev/shm/tsduck-stat/*). Chiwerengero cha ntchito potengera kuchuluka kwa ma streams owulutsa ambiri. Apa mungafunike kupanga njira yopita ku gulu la multicast, mwina kuletsa rp_filter kapena kupanga njira yopita ku gwero ip.
- Thamangani discovery.sh, onetsetsani kuti ikupanga json.
- Onjezani zabbix agent config, yambitsaninso wothandizira zabbix.
- Kwezani template ku zabbix, igwiritseni ntchito kwa wolandirayo yemwe akuyang'aniridwa ndipo wothandizira zabbix aikidwa, dikirani pafupi maminiti a 5, muwone ngati pali zinthu zatsopano, ma grafu ndi zoyambitsa.
chifukwa
Pantchito yozindikira kutayika kwa paketi, ndi pafupifupi kokwanira, ndikwabwino kuposa kusawunika.
Zowonadi, "kutayika" kwa CC kumatha kuchitika pophatikiza zidutswa zamavidiyo (monga momwe ndikudziwira, umu ndi momwe zoyikamo zimapangidwira kumalo ochezera a TV ku Russian Federation, i.e. popanda kuwerengeranso kauntala ya CC), izi ziyenera kukumbukiridwa. Mayankho aumwini amalepheretsa pang'ono vutoli pozindikira zilembo za SCTE-35 (ngati ziwonjezedwa ndi jenereta).
Pankhani yowunikira khalidwe lamayendedwe, pali kusowa kwa jitter monitoring (IAT). Zida za TV (zikhale zosinthira kapena zida zomaliza) zili ndi zofunikira pazigawozi ndipo sizotheka nthawi zonse kukulitsa jitbuffer kuti ikhale yopanda malire. Ndipo jitter imatha kuyandama pomwe zida zokhala ndi ma buffer akulu zikugwiritsidwa ntchito podutsa ndipo QoS sinasanjidwe kapena yosakonzedwa bwino kuti itumize kuchuluka kwanthawi yeniyeni yotere.
Source: www.habr.com