On 2018-05-07 01:09, John Hening wrote:
<https://i.imgur.com/9lHpIfz.png>
Hello,
I am experimenting with send (from socket to socket through a loopback).
If you want to measure send, don't use loopback. It necessarily includes
receiving.
I create a flamegraph for that and measure time of execution. It seems
that is takes relatively much time. (I am not sure whether is it much
or not). In test I send a 64-byte message in a loop.
send function takes 10-15 microseconds.
1. Is it much or not?
That's a philosophical question that I'll leave to the philosophers.
2. Have you any idea how to improve it? I tried to extend send buffer
socket, doesn't help- I know that probably it couldn't help.
Don't use loopback, disable meltdown/spectre mitigation, amortize many
operations on one send(), use unix domain sockets or (better) shared
memory for IPC.
3. When it comes to a flamegraph: It looks like the kernel waits for a
response- I mean the function ip_recv and so on. What does the kernel
try to receive? AFAIK a send function doesn't wait for ACK from receiver.
The send doesn't wait, but the kernel has to serve both the send side
and the receive side, and if they happen to run on the same CPU and
possibly in the same thread, then you'll see them in the flame graph for
that CPU or thread.
In this case the kernel decided to run the receive processing
immediately, so that's what you get.
--
You received this message because you are subscribed to the Google Groups
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.