Nhasi, kune yakagadzirira-yakagadzirwa (yemuridzi) mhinduro dzekutarisa IP (TS) inoyerera, semuenzaniso.
Muchidimbu nezveTSDuck
TSDuck ndeye yakavhurika sosi (2-Clause BSD rezinesi) software (seti yezvishandiso zvekoni uye raibhurari yekugadzira yako ega ekushandisa kana plugins) yekunyengedza TS hova. Sekupinza, inogona kushanda neIP (multicast/unicast), http, hls, dvb tuners, dektec dvb-asi demodulator, pane yemukati TS rwizi jenareta uye kuverenga kubva mafaera. Iyo inobuda inogona kurekodha kufaira, IP (multicast/unicast), hls, dektec dvb-asi uye HiDes modulators, vatambi (mplayer, vlc, xine) uye kudonha. Pakati pezvakapinza uye zvinobuda, unogona kugonesa akasiyana traffic processors, semuenzaniso, kudzokorora maPID, kuita kukwenya / kudhirowa, kuongorora maCC counters, kuverenga bitrate uye mamwe maoperation akajairika kune TS hova.
Muchikamu chino, IP nzizi (multicast) ichashandiswa sekuisa, bitrate_monitor processors (kubva pazita zviri pachena kuti chii ichi) uye kuenderera (CC counter analysis) processors ichashandiswa. Pasina chero matambudziko, unogona kutsiva IP multicast neimwe mhando yekuisa inotsigirwa neTSDuck.
Available
Tevere, TSDuck vhezheni 3.19-1520 inoshandiswa, Linux inoshandiswa seOS (debian 10 yakashandiswa kugadzira mhinduro, CentOS 7 yakashandiswa kushandiswa chaiko)
Kugadzirira TSDuck uye OS
Usati watarisa kuyerera chaiko, iwe unofanirwa kuve neshuwa kuti TSDuck inoshanda nemazvo uye kuti madonhwe haaitike pane network kadhi kana OS (socket) level. Izvi zvinodikanwa kuti usazofembera gare gare kwakaitika madonhwe - pane network kana "mukati mesevha." Iwe unogona kutarisa madonhwe padanho retiweki kadhi nemirairo ethtool -S ethX, tuning inoitwa neiyo ethtool imwechete (kazhinji unoda kuwedzera RX buffer (-G) uye dzimwe nguva kudzima zvimwe zvinoburitsa (-K)). Sekurudziro yakajairika, zvinokurudzirwa kushandisa chiteshi chakasiyana kuti ugamuchire yakaongororwa traffic, kana zvichibvira, izvi zvinoderedza manyepo nekuda kwekuti kudonha kwakaitika panguva imwe chete pachiteshi che analyzer nekuda kwekuvapo kweimwe traffic. Kana izvi zvisingagoneke (uri kushandisa mini-kombuta/NUC ine chiteshi chimwe chete), zvino zvinokurudzirwa kuti ugadzirise kukosha kweiyo yakaongororwa traffic maererano neyakasara pachigadzirwa icho analyzer yakabatana. Nezvezvakatipoteredza nharaunda, pano iwe unofanirwa kungwarira uye kukwanisa kuwana madonhwe epaketi kutanga kubva pachiteshi chepanyama uye kupera nekushandisa mukati memuchina chaiwo.
Kugadzira uye kugamuchira rwizi mukati memuenzi
Sedanho rekutanga mukugadzirira TSDuck, isu tichagadzira uye nekugashira traffic mukati memuiti mumwe chete tichishandisa mambure.
Kugadzirira nharaunda:
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
Mamiriro ezvinhu akagadzirira. Tangisa 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
apo "-p 1 -t 1" zvinoreva kuti unoda kuverenga bitrate sekondi yega yega uye kuratidza ruzivo nezve bitrate sekondi yega yega.
Isu tinotangisa traffic jenareta nekumhanya kwe10 Mbit / s:
tsp -I craft
-P regulate -b 10000000
-O ip -p 7 -e --local-port 6000 239.0.0.1:1234
uko "-p 7 -e" zvinoreva kuti iwe unofanirwa kurongedza 7 TS mapaketi mu1 IP packet uye uzviite zvakaoma (-e), i.e. gara wakamirira 7 TS mapaketi kubva kune yekupedzisira processor usati watumira kuumbwa kweIP packet.
Iyo analyzer inotanga kuratidza iwo anotarisirwa mameseji:
* 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
Zvino ngatiwedzerei mamwe madonhwe:
ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP
uye mameseji akaita seaya anooneka:
* 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
zvinotarisirwa. Isu tinodzima kurasikirwa kwepaketi (ip netns exec P iptables -F) uye edza kuwedzera jenareta bitrate ku100 Mbit / s. Iyo analyzer inoshuma boka rezvikanganiso zveCC uye nezve 75 Mbit / s panzvimbo ye100. Tiri kuedza kufunga kuti ndiani ane mhosva - jenareta haisi kuchengeta kana kuti dambudziko harisi mairi, kuita izvi tinotanga kubudisa a nhamba yakatarwa yemapakiti (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
Sezvauri kuona, chaizvo 100000 IP mapaketi akagadzirwa (151925460-151825460). Saka isu tinoona zviri kuitika neanalyzer, kuti tiite izvi tinotarisa neRX counter pa veth1, yakanyatso kuenzana neTX counter pa veth0, tobva tatarisa zviri kuitika pasocket level:
# 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 iwe unogona kuona nhamba yemadonhwe = 24355. MuTS packets iyi 170485 kana 24.36% ye700000, saka tinoona kuti imwechete 25% ye bitrate yakarasika madonhwe muUDP socket. Madonhwe paUDP socket anowanzoitika nekuda kwekushaikwa kwebuffer, ngationei kuti iyo default socket buffer size uye yakakura socket buffer size ndeiyi:
# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992
Saka, kana zvikumbiro zvikasakumbira zvakajeka saizi yebhafa, masokisi anogadzirwa aine 208 KB buffer, asi kana vakakumbira zvimwe, havazogashira zvavanenge vakumbira. Sezvo mu tsp unogona kuseta saizi yebuffer yeIP yekupinda (--buffer-saizi), isu hatibatike saizi yesoketi, asi tinongoisa yakakura socket buffer saizi uye tsanangura saizi yebuffer zvakajeka kuburikidza ne tsp nharo:
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
Nekugadzirisa uku kwesocket buffer, iyo bitrate yakashumwa ikozvino inenge 100Mbps, hapana zvikanganiso zveCC.
Zvichienderana neCPU kushandiswa netsp application pachayo. Nezve imwe core i5-4260U CPU @ 1.40GHz, kuongorora kuyerera kwe10Mbit/s, 3-4% yeCPU ichadiwa, 100Mbit/s - 25%, 200Mbit/s - 46%. Pakuisa% kurasikirwa kwepaketi, iyo CPU mutoro hauwedzere (asi unogona kudzikira).
Pane zvakawanda zvinogadzira Hardware, zvaigoneka kugadzira uye kuongorora hova dzinopfuura 1Gb/s pasina matambudziko.
Kuedza pamakadhi etiweki chaiwo
Mushure mekuedza pane veth pair, iwe unofanirwa kutora mauto maviri kana maviri madoko emugadziri mumwe, batanidza zviteshi kune mumwe nemumwe, mhanyisa jenareta pane imwe, uye analyzer pane yechipiri. Pakanga pasina zvinoshamisa pano, asi chaizvoizvo zvose zvinoenderana ne hardware, iyo isina simba iyo, iyo inonyanya kufadza ichava pano.
Kushandisa iyo data yakagamuchirwa neyekutarisa system (Zabbix)
tsp haina chero muchina-inoverengeka API seSNMP kana yakafanana. CC meseji inoda kuunganidzwa kanokwana 1 sekondi panguva (ine yakakwira muzana yekurasikirwa kwepaketi, panogona kuita mazana / zviuru / makumi ezviuru pasekondi, zvichienderana ne bitrate).
Saka, kuitira kuchengetedza ruzivo uye kudhirowa magirafu eCC zvikanganiso uye bitrate uye kuita imwe mhando yetsaona mberi, panogona kuve neanotevera sarudzo:
- Parse uye aggregate (neCC) iyo tsp inobuda, i.e. kuchishandura kuita fomu yaunoda.
- Wedzera iyo tsp pachayo uye / kana iyo bitrate_monitor uye yekuenderera mberi processor plugins kuitira kuti mhedzisiro yacho ibude mumuchina-inoverengeka fomu yakakodzera kune yekutarisa sisitimu.
- Nyora chikumbiro chako pamusoro peraibhurari yetsduck.
Zviripachena, maererano nemari yebasa, sarudzo 1 ndiyo yakapfava, kunyanya tichifunga kuti tsduck pachayo yakanyorwa mune yakaderera-nhanho (nemazuva ano maitiro) mutauro (C ++)
A simple prototype of parser + aggregator in bash yakaratidza kuti pakuyerera kwe10 Mbit/s uye 50% packet loss (yakaipisisa nyaya), bash process yakapedza 3-4 times more CPU pane tsp process pachayo. Mamiriro ezvinhu aya haatenderwi. Chaizvoizvo chidimbu cheiyo prototype chiri pazasi
Noodles pa basha
#!/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
Pamusoro pekuti izvi zvinoshanda zvisingagamuchirwe zvishoma nezvishoma, hapana akajairwa tambo mubash, bash mabasa akazvimiririra maitiro uye ndaifanira kunyora yakarasikaPackets kukosha kamwechete sekondi padivi mhedzisiro (pakugamuchira bitrate meseji inouya yega sekondi). Nekuda kweizvozvo, bash yakasiiwa yega uye zvakasarudzwa kunyora wrapper (parser + aggregator) mugolang. Iyo CPU kushandiswa kwekodhi yakafanana mugolang ndeye 4-5 nguva shoma pane iyo tsp maitiro pachayo. Kukwidziridzwa kwekuputira nekutsiva bash negolang kwaive ka16 uye zvakazara mhedzisiro inogamuchirwa (CPU pamusoro ne25% mune yakaipisisa kesi). Iyo golang source file iripo
Kuvhura wrapper
Kuvhura iyo wrapper, iri nyore sevhisi template ye systemd yakagadzirwa (
Kuti ugadzire sevhisi yemuenzaniso unofanirwa kumhanya iyo systemctl inogonesa command [email inodzivirirwa]:1234, wobva wamhanya nesystemctl kutanga [email inodzivirirwa]: 1234.
Kuwanikwa kubva kuZabbix
Kuti zabbix iwane kuwanikwa kwekumhanya masevhisi,
Zabbix template
Rondedzero pfupi (ko kana mumwe munhu afunga kuishandisa)
- Ita shuwa kuti tsp haidonhedze mapaketi pasi pe "yakanaka" mamiriro (jenereta uye analyzer yakabatana zvakananga), kana paine madonhwe, ona pfungwa 2 kana chinyorwa chechinyorwa panyaya iyi.
- Ita tuning yeiyo yakanyanya socket buffer (net.core.rmem_max=8388608).
- Nyora tsduck-stat.go (enda unovaka tsduck-stat.go).
- Isa iyo sevhisi template mukati /lib/systemd/system.
- Tanga masevhisi uchishandisa systemctl, tarisa kuti zviverengero zvatanga kuoneka (grep "" /dev/shm/tsduck-stat/*). Huwandu hwemasevhisi zvichienderana nenhamba yekutepfenyura akawanda. Pano ungangoda kugadzira nzira yekuenda kuboka remulticast, pamwe kudzima rp_filter kana kugadzira nzira inoenda kunobva ip.
- Mhanya discovery.sh, ita shuwa kuti inogadzira json.
- Isa iyo zabbix mumiriri config, tangazve zabbix mumiriri.
- Isa iyo template ku zabbix, ishandise kune iyo inoitisa iyo yekutarisa uye yabbix-agent inoiswa, mirira anenge maminetsi mashanu, ona kuti zvinhu zvitsva zve data, magirafu uye zvinokonzeresa zvinoonekwa.
mugumisiro
Kune iro basa rekuona kurasikirwa kwepaketi, rinenge rakakwana, zvirinani zviri nani pane kusatarisisa.
Muchokwadi, CC "kurasikirwa" kunogona kuitika kana splicing mavhidhiyo zvimedu (sezvandinoziva, iyi ndiyo nzira yekuisirwa kunoitwa munzvimbo dzeterevhizheni munzvimbo muRussian Federation, i.e. pasina kuverengera CC counter), izvi zvinofanirwa kuyeukwa. Mune mhinduro dzevaridzi, dambudziko iri rakatenderedzwa zvishoma nekuona SCTE-35 ma tag (kana akawedzerwa nejenareta rerukova).
Kubva pakuona kwekutarisa kwemhando yekufambisa, jitter monitoring (IAT) haina kukwana, nekuti Midziyo yeTV (ingave ma modulator kana ekupedzisira) ine zvinodikanwa zveiyi parameter uye hazvigoneke nguva dzose kupinza jitbuffer nekusingaperi. Uye jitter inogona kuyangarara kana chekufambisa chichishandisa michina ine mabhafa mahombe uye QoS haina kugadzirwa kana kuti haina kugadzirwa zvakanaka kuti itumire yakadaro realtime traffic.
Source: www.habr.com