Re: Patch to regulate network output
Jean-Paul Saman <[email protected]>
| Newsgroups | gmane.comp.video.videolan.vls.devel |
|---|---|
| Message-ID | <[email protected]> |
Marian Durkovic wrote: > Hi all, Hi, Thanks for sending us a patch. It is well written and clean. > > > in order to solve the problem with large packet bursts I've modified the > netoutput.cpp to ensure that appropriate gap is inserted after each packet > sent to the network. The gap is calculated from the new config parameter > MaxMbps assuming that 10 Mbps stream needs to send 1000 packets/s > (gap = 1 milisecond). When this parameter is unset, no traffic averaging > is performed. > Unfortunatley I do not think this is the way to resolve that issue. This is more a workaround without solving the *real* problem. Netoutput directly writes the packets (an entire UDP packet, with 7 TS packets) to the network stack. At this moment the UDP packet is handled by the kernel. So when the kernel has time it will send the packet to the network card. On a stock Linux kernel (even with most distributions) this might take 200 ms (worst case). This depends on kernel locks. So when a lock is active nothing other can be done and the packets will have to wait. To solve this issue a preemptive kernel with the lockbreaking patches will be needed. This will give the kernel a IRQ latency of 1.5ms and will solve the 200 ms worst case. VLS does an approximation of the original bitrate through extrapolation upon the PCR's found in the stream. To correctly reproduce the original bitrate VLS should do intrapolation of the PCR's instead of extrapolation. This should solve the bursty behaviour when sending packets. The *offending* code is in /src/server/tsstreamer.cpp, functions AdjustClock(), WaitSendDate(). These should be fixed. > One issue related to this is that the standard nanosleep() on Linux > typically sleeps for minimum 20 miliseconds (!) so in order to have this > functionality, we need the high-resolution-timers compiled into the kernel > - see http://sourceforge.net/projects/high-res-timers/ Also VLS uses nanosleep to do timing so it will benefit from the high-resolution-timers too. Also a preemptive kernel with lockbreaking patches is needed (http://sourceforge.net/kpreempt and http://www.tech9.net/rml/linux/) Greetings, Jean-Paul Saman. -- This is the vls-devel mailing-list, see http://www.videolan.org/streaming/ To unsubscribe, please read http://developers.videolan.org/lists.html If you are in trouble, please contact <[email protected]>