diff options
author | Eric Blake <eblake@redhat.com> | 2023-04-03 19:40:47 -0500 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2023-04-04 08:13:15 -0500 |
commit | f1426881a827a6d3f31b65616c4a8db1e9e7c45e (patch) | |
tree | 09331cfb2a8ad67cc10dee0970c258dd05493d0d | |
parent | 51a6dc9d394098e8f4141fad869a1ee9585f54f8 (diff) |
nbd/server: Request TCP_NODELAY
Nagle's algorithm adds latency in order to reduce network packet
overhead on small packets. But when we are already using corking to
merge smaller packets into transactional requests, the extra delay
from TCP defaults just gets in the way (see recent commit bd2cd4a4).
For reference, qemu as an NBD client already requests TCP_NODELAY (see
nbd_connect() in nbd/client-connection.c); as does libnbd as a client
[1], and nbdkit as a server [2]. Furthermore, the NBD spec recommends
the use of TCP_NODELAY [3].
[1] https://gitlab.com/nbdkit/libnbd/-/blob/a48a1142/generator/states-connect.c#L39
[2] https://gitlab.com/nbdkit/nbdkit/-/blob/45b72f5b/server/sockets.c#L430
[3] https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md#protocol-phases
CC: Florian Westphal <fw@strlen.de>
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20230404004047.142086-1-eblake@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
-rw-r--r-- | nbd/server.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/nbd/server.c b/nbd/server.c index 848836d414..3d8d0d81df 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -2758,6 +2758,7 @@ void nbd_client_new(QIOChannelSocket *sioc, } client->tlsauthz = g_strdup(tlsauthz); client->sioc = sioc; + qio_channel_set_delay(QIO_CHANNEL(sioc), false); object_ref(OBJECT(client->sioc)); client->ioc = QIO_CHANNEL(sioc); object_ref(OBJECT(client->ioc)); |