<div><div dir="auto">Hi John<br></div><div dir="auto"><br></div><div dir="auto">Thanks for clarifying the fact that sendfile call being synchronous (maybe this info should be be added to the doc).</div><div dir="auto"><br></div><div dir="auto">Switching from prim_file:sendfile to file:pread + gen_tcp:send (per @Max Lapshin suggestion) gave me a different landscape in term of locks:</div><div dir="auto"><a href="https://gist.github.com/frankmullerl/d9e8379b8250d84c5b170577c2ad3b89" target="_blank">https://gist.github.com/frankmullerl/d9e8379b8250d84c5b170577c2ad3b89</a></div><div dir="auto"><br></div><div dir="auto">Tail latency (+99%ile) is still high and the throughput more a less the same.</div><div dir="auto"><br></div><div dir="auto">How can I interpret these new LCNT info to improve things?</div><div dir="auto"><br></div><div dir="auto">Best</div></div><div><div><div dir="auto">/Frank</div></div><div dir="auto"><br></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Tue 7 janv. 2020 at 13:05, John Högberg <<a href="mailto:john@erlang.org" target="_blank">john@erlang.org</a>> wrote :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="text-align:left;direction:ltr;word-wrap:break-word;line-break:after-white-space"><div>What you're seeing is caused by how we're using the `sendfile(2)` system call. Like all other file operations it's impossible to make it non-blocking on Linux, and since it's used from the output callback in the inet driver it will block the scheduler until completion (while the port lock is held, hence its visibility with `lcnt`). Fixing this is non-trivial so we might force it to use the read/send fallback in a patch.</div></div><div style="text-align:left;direction:ltr;word-wrap:break-word;line-break:after-white-space"><div><br></div><div>/John</div><div><br></div><div>On Sat, 2020-01-04 at 11:39 +0100, Frank Muller wrote:</div><blockquote type="cite" style="margin:0 0 0 .8ex;border-left:2px #729fcf solid;padding-left:1ex"><div><div dir="auto">Gonna update my design, test and report back </div></div><div dir="auto"><br></div><div dir="auto">/Frank</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Sat. 4 janv. 2020 at 09:30, Max Lapshin <<a href="mailto:max.lapshin@gmail.com" target="_blank">max.lapshin@gmail.com</a>> wrote :<br></div><blockquote type="cite" style="margin:0 0 0 .8ex;border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr">Yes.<div>And we repack from mp4 to mpegts on fly.  We cannot do sendfile due to this requirement and it happened that we do not need to do it.</div><div><br></div><div>So 10 gbps is an absolutely normal load for E5.</div><div><br></div><div>But of course you need to be not green =)  Disable all powersave.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jan 4, 2020 at 10:59 AM Frank Muller <<a href="mailto:frank.muller.erl@gmail.com" target="_blank">frank.muller.erl@gmail.com</a>> wrote:<br></div><blockquote type="cite" style="margin:0 0 0 .8ex;border-left:2px #729fcf solid;padding-left:1ex"><div><div dir="auto">Hi Max</div></div><div dir="auto"><br></div><div dir="auto">Those numbers are amazing. Can you please elaborate more?</div><div dir="auto"><br></div><div dir="auto">So, you read data from disk with file:pread/3 and send it out using gen_tcp:send/2. Am I right?</div><div dir="auto"><br></div><div dir="auto">/Frank </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Sat. 4 janv. 2020 at 08:32, Max Lapshin <<a href="mailto:max.lapshin@gmail.com" target="_blank">max.lapshin@gmail.com</a>> wrote :<br></div><blockquote type="cite" style="margin:0 0 0 .8ex;border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr">I advise to try to refuse from sendfile and use pread/write<div><br></div><div>Our Flussonic can serve 10-20 gigabits per second. We have removed all  "optimisations"  like mmap and so on and left with</div><div>old plain read/write.</div></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>
</div>