From 6ae17400b5e338eef3862a555e4960ebc31706bd Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Tue, 23 Jul 2024 18:45:59 +0200 Subject: [PATCH 1/7] Avoid read-ahead for packet mode ssl_tls --- erts/emulator/drivers/common/inet_drv.c | 175 ++++++++++++++++-------- 1 file changed, 120 insertions(+), 55 deletions(-) diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index f10820653cc5..ac4bd0a72a2f 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -12428,6 +12428,24 @@ static int tcp_recv_error(tcp_descriptor* desc, int err) +static int packet_header_length(tcp_descriptor *desc) { + /* XXX RaNi. Here we shall decide whether to read as short as possible, + * or to fill the buffer as much as possible. + * + * Return 0 when we shall read ahead, and > 0 for the amount of byte + * we need to deduce the packet length. + */ + + switch (desc->inet.htype) { + case TCP_PB_SSL_TLS: + /* Return the minimal length to not read ahead */ + return 5; + default: + return 0; /* Read ahead as much as is comfortable */ + } +} + + /* ** Calculate number of bytes that remain to read before deliver ** Assume buf, ptr_start, ptr has been setup @@ -12437,8 +12455,9 @@ static int tcp_recv_error(tcp_descriptor* desc, int err) ** < 0 on error ** ** if return value == 0 then *len will hold the length of the first packet -** return value > 0 then if *len == 0 then value means upperbound -** *len > 0 then value means exact +** return value > 0 then +** if *len == 0 then value means what to read next: upperbound or minimum +** *len > 0 then value means exactly what is missing for a packet ** */ static int tcp_remain(tcp_descriptor* desc, int* len) @@ -12449,7 +12468,7 @@ static int tcp_remain(tcp_descriptor* desc, int* len) int n = desc->i_ptr - ptr; /* number of bytes read */ int tlen; - tlen = packet_get_length(desc->inet.htype, ptr, n, + tlen = packet_get_length(desc->inet.htype, ptr, n, desc->inet.psize, desc->i_bufsz, desc->inet.delimiter, &desc->http_state); @@ -12471,10 +12490,20 @@ static int tcp_remain(tcp_descriptor* desc, int* len) } } else if (tlen == 0) { /* need unknown more */ + int nread; + *len = 0; - if (nsz == 0) { - if (nfill == n) { + nread = packet_header_length(desc); + if (nread != 0) + return nread; + + if (nsz == 0) { /* No remaining space - buffer is full */ + if (nfill == n) { /* The current packet itself fills the buffer */ if (desc->inet.psize != 0 && desc->inet.psize > nfill) { + /* There is a max packet size that is larger than + * the current buffer - expand the buffer + * to max packet size + */ if (tcp_expand_buffer(desc, desc->inet.psize) < 0) return -1; return desc->inet.psize; @@ -12483,12 +12512,17 @@ static int tcp_remain(tcp_descriptor* desc, int* len) goto error; } DEBUGF((" => restart more=%d\r\n", nfill - n)); + /* Return the unused buffer space before desc->i_ptr_start, + * XXX RaNi. Is there a missing copy down here? + * Won't the sock_recv that follows overwrite + * the buffer end...??? + */ return nfill - n; } else { DEBUGF((" => more=%d \r\n", nsz)); - return nsz; - } + return nsz; /* Remaining buffer space */ + } } error: @@ -12513,7 +12547,8 @@ static int tcp_deliver(tcp_descriptor* desc, int len) if ((n = tcp_remain(desc, &len)) != 0) { if (n < 0) /* packet error */ return n; - if (len > 0) /* more data pending */ + /* Packet incomplete */ + if (len > 0) /* This is what is missing */ desc->i_remain = len; return 0; } @@ -12589,8 +12624,9 @@ static int tcp_deliver(tcp_descriptor* desc, int len) static int tcp_recv(tcp_descriptor* desc, int request_len) { - int n; - int len; + /* request_len is 0 unless called from TCP_REQ_RECV, and then + * inet.htype == TCP_PB_RAW and inet.active is INET_PASSIVE (false). + */ int nread; if (desc->i_buf == NULL) { /* allocate a read buffer */ @@ -12604,14 +12640,24 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) desc->i_bufsz = sz; /* use i_bufsz not i_buf->orig_size ! */ desc->i_ptr_start = desc->i_buf->orig_bytes; desc->i_ptr = desc->i_ptr_start; - nread = sz; + if (request_len > 0) { + nread = sz; /* Read ahead */ + desc->i_remain = request_len; + } + else { + nread = packet_header_length(desc); + if (nread == 0) + nread = sz; /* Read ahead */ + desc->i_remain = 0; + } if (request_len > 0) desc->i_remain = request_len; else desc->i_remain = 0; } else if (request_len > 0) { /* we have a data in buffer and a request */ - n = desc->i_ptr - desc->i_ptr_start; + int n = desc->i_ptr - desc->i_ptr_start; + if (n >= request_len) return tcp_deliver(desc, request_len); else if (tcp_expand_buffer(desc, request_len) < 0) @@ -12620,6 +12666,8 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) desc->i_remain = nread = request_len - n; } else if (desc->i_remain == 0) { /* poll remain from buffer data */ + int len; + if ((nread = tcp_remain(desc, &len)) < 0) return tcp_recv_error(desc, EMSGSIZE); else if (nread == 0) @@ -12628,53 +12676,70 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) desc->i_remain = len; /* set remain */ } else /* remain already set use it */ + /* XXX RaNi. I think there is a race here... + * If the packet mode is changed between desc->i_remain is set + * and remaining data is read, then when the packet is delivered; + * packet_parse() is called with the new packet mode (desc->inet.htype) + * which is wrong for that packet. + */ nread = desc->i_remain; - - DEBUGF(("tcp_recv(%p): s=%d about to read %d bytes...\r\n", - desc->inet.port, desc->inet.s, nread)); - n = sock_recv(desc->inet.s, desc->i_ptr, nread, 0); + for (;;) { + int n; - if (IS_SOCKET_ERROR(n)) { - int err = sock_errno(); - if (err == ECONNRESET) { - DEBUGF((" => detected close (connreset)\r\n")); - if (desc->tcp_add_flags & TCP_ADDF_SHOW_ECONNRESET) - return tcp_recv_error(desc, err); - else - return tcp_recv_closed(desc); - } - if (err == ERRNO_BLOCK) { - DEBUGF((" => would block\r\n")); - return 0; - } - else { - DEBUGF((" => error: %d\r\n", err)); - return tcp_recv_error(desc, err); - } - } - else if (n == 0) { - DEBUGF((" => detected close\r\n")); - return tcp_recv_closed(desc); - } + DEBUGF(("tcp_recv(%p): s=%d about to read %d bytes...\r\n", + desc->inet.port, desc->inet.s, nread)); - DEBUGF((" => got %d bytes\r\n", n)); - desc->i_ptr += n; - if (desc->i_remain > 0) { - desc->i_remain -= n; - if (desc->i_remain == 0) - return tcp_deliver(desc, desc->i_ptr - desc->i_ptr_start); - } - else { - nread = tcp_remain(desc, &len); - if (nread < 0) - return tcp_recv_error(desc, EMSGSIZE); - else if (nread == 0) - return tcp_deliver(desc, len); - else if (len > 0) - desc->i_remain = len; /* set remain */ - } - return 0; + n = sock_recv(desc->inet.s, desc->i_ptr, nread, 0); + + if (IS_SOCKET_ERROR(n)) { + int err = sock_errno(); + if (err == ECONNRESET) { + DEBUGF((" => detected close (connreset)\r\n")); + if (desc->tcp_add_flags & TCP_ADDF_SHOW_ECONNRESET) + return tcp_recv_error(desc, err); + else + return tcp_recv_closed(desc); + } + if (err == ERRNO_BLOCK) { + DEBUGF((" => would block\r\n")); + return 0; + } + else { + DEBUGF((" => error: %d\r\n", err)); + return tcp_recv_error(desc, err); + } + } + else if (n == 0) { + DEBUGF((" => detected close\r\n")); + return tcp_recv_closed(desc); + } + ASSERT(nread >= n); + + DEBUGF((" => got %d bytes\r\n", n)); + desc->i_ptr += n; + if (desc->i_remain > 0) { + desc->i_remain -= n; + if (desc->i_remain == 0) + return tcp_deliver(desc, desc->i_ptr - desc->i_ptr_start); + else + /* We just tried to read the whole packet, + * no point in trying again immediately + */ + return 0; + } + else { + int len; + + nread = tcp_remain(desc, &len); + if (nread < 0) + return tcp_recv_error(desc, EMSGSIZE); + else if (nread == 0) + return tcp_deliver(desc, len); + else if (len > 0) /* nread > 0 */ + desc->i_remain = len; /* What is missing for this packet */ + } + } /* for (;;) */ } From 42190545cecfb2727881511a3d1deddebda3cc31 Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Wed, 24 Jul 2024 11:03:44 +0200 Subject: [PATCH 2/7] Fix possible bug for packet type change --- erts/emulator/drivers/common/inet_drv.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index ac4bd0a72a2f..9d772dc193f9 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -7754,8 +7754,16 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) /* XXX: UDP sockets could also trigger immediate read here NIY */ if ((desc->stype==SOCK_STREAM) && desc->active) { - if (!old_active || (desc->htype != old_htype)) { - /* passive => active change OR header type change in active mode */ + if (! old_active) { + /* passive => active change */ + return 1; + } + if (desc->htype != old_htype) { + tcp_descriptor *tdesc = (tcp_descriptor *) desc; + /* Header type change in active mode. + * Invalidate the calculated packet remaining length. + */ + tdesc->i_remain = 0; return 1; } @@ -12676,12 +12684,6 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) desc->i_remain = len; /* set remain */ } else /* remain already set use it */ - /* XXX RaNi. I think there is a race here... - * If the packet mode is changed between desc->i_remain is set - * and remaining data is read, then when the packet is delivered; - * packet_parse() is called with the new packet mode (desc->inet.htype) - * which is wrong for that packet. - */ nread = desc->i_remain; for (;;) { From 7cb3eb7b74738071a86b1ab7f96ad29a932c7344 Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Thu, 25 Jul 2024 13:45:28 +0200 Subject: [PATCH 3/7] Implement option for inet_drv read_ahead --- erts/emulator/drivers/common/inet_drv.c | 150 +++++++++++++++++------- erts/preloaded/ebin/prim_inet.beam | Bin 102496 -> 102576 bytes erts/preloaded/src/prim_inet.erl | 3 + lib/kernel/src/inet.erl | 4 +- lib/kernel/src/inet_int.hrl | 3 +- 5 files changed, 116 insertions(+), 44 deletions(-) diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 9d772dc193f9..6776ab2f1ecc 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -839,6 +839,7 @@ static size_t my_strnlen(const char *s, size_t maxlen) #define TCP_ADDF_SHUTDOWN_WR_DONE 256 /* A shutdown(sock, SHUT_WR) or SHUT_RDWR was made */ #define TCP_ADDF_LINGER_ZERO 512 /* Discard driver queue on port close */ #define TCP_ADDF_SENDFILE 1024 /* Send from an fd instead of the driver queue */ +#define TCP_ADDF_NO_READ_AHEAD 2048 /* Don't read ahead in packet modes */ /* *_REQ_* replies */ #define INET_REP_ERROR 0 @@ -896,6 +897,7 @@ static size_t my_strnlen(const char *s, size_t maxlen) #define INET_OPT_TTL 46 /* IP_TTL */ #define INET_OPT_RECVTTL 47 /* IP_RECVTTL ancillary data */ #define TCP_OPT_NOPUSH 48 /* super-Nagle, aka TCP_CORK */ +#define INET_LOPT_TCP_READ_AHEAD 49 /* Read ahead of packet data */ #define INET_LOPT_DEBUG 99 /* Enable/disable DEBUG for a socket */ /* SCTP options: a separate range, from 100: */ @@ -7082,6 +7084,21 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len) } continue; + case INET_LOPT_TCP_READ_AHEAD: + DDBG(desc, + ("INET-DRV-DBG[%d][" SOCKET_FSTR ",%T] " + "inet_set_opts(read_ahead) -> %d (%s)\r\n", + __LINE__, + desc->s, driver_caller(desc->port), ival, B2S(ival)) ); + if (desc->sprotocol == IPPROTO_TCP) { + tcp_descriptor* tdesc = (tcp_descriptor*) desc; + if (! ival) + tdesc->tcp_add_flags |= TCP_ADDF_NO_READ_AHEAD; + else + tdesc->tcp_add_flags &= ~TCP_ADDF_NO_READ_AHEAD; + } + continue; + case INET_LOPT_LINE_DELIM: DDBG(desc, ("INET-DRV-DBG[%d][" SOCKET_FSTR ",%T] " @@ -9043,6 +9060,17 @@ static ErlDrvSSizeT inet_fill_opts(inet_descriptor* desc, } continue; + case INET_LOPT_TCP_READ_AHEAD: + if (desc->sprotocol == IPPROTO_TCP) { + tcp_descriptor* tdesc = (tcp_descriptor*) desc; + *ptr++ = opt; + ival = !(tdesc->tcp_add_flags & TCP_ADDF_NO_READ_AHEAD); + put_int32(ival, ptr); + } else { + TRUNCATE_TO(0,ptr); + } + continue; + case INET_OPT_PRIORITY: #ifdef SO_PRIORITY type = SO_PRIORITY; @@ -11275,8 +11303,9 @@ static void inet_input_count(inet_descriptor* desc, ErlDrvSizeT len) /* ** Set new size on buffer, used when packet size is determined -** and the buffer is to small. -** buffer must have a size of at least len bytes (counting from ptr_start!) +** and the buffer is to small. Expand the buffer to len bytes +** from ptr_start, don't move ptr_start's position and +** keep the content before ptr_start. */ static int tcp_expand_buffer(tcp_descriptor* desc, int len) { @@ -11465,7 +11494,8 @@ static tcp_descriptor* tcp_inet_copy(tcp_descriptor* desc,SOCKET s, copy_desc->send_timeout_close = desc->send_timeout_close; copy_desc->tcp_add_flags = desc->tcp_add_flags - & (TCP_ADDF_SHOW_ECONNRESET | TCP_ADDF_LINGER_ZERO); + & (TCP_ADDF_SHOW_ECONNRESET | TCP_ADDF_LINGER_ZERO | + TCP_ADDF_NO_READ_AHEAD); /* The new port will be linked and connected to the original caller */ port = driver_create_port(port, owner, "tcp_inet", (ErlDrvData) copy_desc); @@ -12435,22 +12465,61 @@ static int tcp_recv_error(tcp_descriptor* desc, int err) } - +/* To be called after packet_get_length() has returned that + * more bytes are needed (or when we know that it would). + */ static int packet_header_length(tcp_descriptor *desc) { - /* XXX RaNi. Here we shall decide whether to read as short as possible, - * or to fill the buffer as much as possible. - * - * Return 0 when we shall read ahead, and > 0 for the amount of byte - * we need to deduce the packet length. - */ + int n, hlen; + + if (! (desc->tcp_add_flags & TCP_ADDF_NO_READ_AHEAD)) + return 0; /* Read ahead */ switch (desc->inet.htype) { - case TCP_PB_SSL_TLS: - /* Return the minimal length to not read ahead */ - return 5; + case TCP_PB_RAW: + return 0; + + /* Return how many more bytes we should read to make + * packet_get_length() return the packet length. + * + * Set hlen to the minimal header bytes, for starters. + */ + case TCP_PB_1: hlen = 1; break; + case TCP_PB_2: hlen = 2; break; + case TCP_PB_4: hlen = 4; break; + case TCP_PB_RM: hlen = 4; break; + case TCP_PB_ASN1: hlen = 2; break; + case TCP_PB_SSL_TLS: hlen = 5; break; + case TCP_PB_CDR: hlen = 12; break; + case TCP_PB_FCGI: hlen = sizeof(struct fcgi_head); break; + case TCP_PB_TPKT: hlen = 4; break; default: - return 0; /* Read ahead as much as is comfortable */ + /* We should always be able to read another byte + * to see if we then can deduce the packet length. + * Note that for line mode packet formats, + * not a length in a header, this is very inefficient, + * but there is no other way to not read ahead. + * For TCP_PB_ASN1 it is also inefficient, but we + * would have to re-implement quite some decoding rules + * here to figure out a better value that probably isn't + * that much better since some field have to be read one byte + * at the time to find the end of the field. + * + * Just don't combine TCP_ADDF_NO_READ_AHEAD + * with non-suitable packet types. + */ + return 1; } + n = desc->i_ptr - desc->i_ptr_start; + ASSERT(n >= 0); + + if (hlen > n) + return hlen - n; + else + /* Since packet_get_length() couldn't return a length + * and since the minimal header size above apprently isn't enough + * we need at least another byte + */ + return 1; } @@ -12458,15 +12527,17 @@ static int packet_header_length(tcp_descriptor *desc) { ** Calculate number of bytes that remain to read before deliver ** Assume buf, ptr_start, ptr has been setup ** -** return > 0 if more to read -** = 0 if holding complete packet -** < 0 on error -** -** if return value == 0 then *len will hold the length of the first packet -** return value > 0 then -** if *len == 0 then value means what to read next: upperbound or minimum -** *len > 0 then value means exactly what is missing for a packet -** +** return == 0 if we have a complete packet. *len holds the packet length. +** > 0 is how many bytes to read. +** *len is the packet's length. +** == 0 if we don't know, then the return value is either +** the minimum bytes to read to figure out the packet's +** length or the maximum bytes to read which avoids +** numerous calls to sock_recv(), depending on +** TCP_ADDF_NO_READ_AHEAD. +** > 0 Implies that the return value is +** exactly what's missing. +** < 0 if there is a decode error */ static int tcp_remain(tcp_descriptor* desc, int* len) { @@ -12484,17 +12555,18 @@ static int tcp_remain(tcp_descriptor* desc, int* len) desc->inet.port, desc->inet.s, n, nfill, nsz, tlen)); if (tlen > 0) { + *len = tlen; if (tlen <= n) { /* got a packet */ - *len = tlen; DEBUGF((" => nothing remain packet=%d\r\n", tlen)); return 0; } else { /* need known more */ + int nread; if (tcp_expand_buffer(desc, tlen) < 0) return -1; - *len = tlen - n; - DEBUGF((" => remain=%d\r\n", *len)); - return *len; + nread = tlen - n; + DEBUGF((" => remain=%d\r\n", nread)); + return nread; } } else if (tlen == 0) { /* need unknown more */ @@ -12514,17 +12586,14 @@ static int tcp_remain(tcp_descriptor* desc, int* len) */ if (tcp_expand_buffer(desc, desc->inet.psize) < 0) return -1; - return desc->inet.psize; + return desc->inet.psize - n;; } else goto error; } DEBUGF((" => restart more=%d\r\n", nfill - n)); - /* Return the unused buffer space before desc->i_ptr_start, - * XXX RaNi. Is there a missing copy down here? - * Won't the sock_recv that follows overwrite - * the buffer end...??? - */ + tcp_clear_input(desc); /* Move the data to buffer start */ + /* Return the unused buffer space before desc->i_ptr_start */ return nfill - n; } else { @@ -12556,8 +12625,8 @@ static int tcp_deliver(tcp_descriptor* desc, int len) if (n < 0) /* packet error */ return n; /* Packet incomplete */ - if (len > 0) /* This is what is missing */ - desc->i_remain = len; + if (len > 0) + desc->i_remain = n; /* This is what is missing */ return 0; } } @@ -12621,7 +12690,7 @@ static int tcp_deliver(tcp_descriptor* desc, int len) return n; tcp_restart_input(desc); if (len > 0) - desc->i_remain = len; + desc->i_remain = n; len = 0; } } @@ -12663,15 +12732,14 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) else desc->i_remain = 0; } - else if (request_len > 0) { /* we have a data in buffer and a request */ + else if (request_len > 0) { /* we have data in buffer and a request */ int n = desc->i_ptr - desc->i_ptr_start; if (n >= request_len) return tcp_deliver(desc, request_len); else if (tcp_expand_buffer(desc, request_len) < 0) return tcp_recv_error(desc, ENOMEM); - else - desc->i_remain = nread = request_len - n; + desc->i_remain = nread = request_len - n; } else if (desc->i_remain == 0) { /* poll remain from buffer data */ int len; @@ -12681,7 +12749,7 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) else if (nread == 0) return tcp_deliver(desc, len); else if (len > 0) - desc->i_remain = len; /* set remain */ + desc->i_remain = nread; /* set remain */ } else /* remain already set use it */ nread = desc->i_remain; @@ -12739,7 +12807,7 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) else if (nread == 0) return tcp_deliver(desc, len); else if (len > 0) /* nread > 0 */ - desc->i_remain = len; /* What is missing for this packet */ + desc->i_remain = nread; /* What is missing for this packet */ } } /* for (;;) */ } diff --git a/erts/preloaded/ebin/prim_inet.beam b/erts/preloaded/ebin/prim_inet.beam index 960065c0d80fbc4fad95a24b3a58ea346df0401a..73d42afa17440230e211d1805739d93e0580ad21 100644 GIT binary patch delta 77256 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%0DCz~)#tdins)t+>j+mf1$uV%>~s-g*SJt;3+* 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 delta 76888 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 ?INET_LOPT_TCP_SHOW_ECONNRESET; enc_opt(line_delimiter) -> ?INET_LOPT_LINE_DELIM; enc_opt(raw) -> ?INET_OPT_RAW; enc_opt(bind_to_device) -> ?INET_OPT_BIND_TO_DEVICE; +enc_opt(read_ahead) -> ?INET_LOPT_TCP_READ_AHEAD; enc_opt(debug) -> ?INET_OPT_DEBUG; % Names of SCTP opts: enc_opt(sctp_rtoinfo) -> ?SCTP_OPT_RTOINFO; @@ -1647,6 +1648,7 @@ dec_opt(?INET_LOPT_TCP_SHOW_ECONNRESET) -> show_econnreset; dec_opt(?INET_LOPT_LINE_DELIM) -> line_delimiter; dec_opt(?INET_OPT_RAW) -> raw; dec_opt(?INET_OPT_BIND_TO_DEVICE) -> bind_to_device; +dec_opt(?INET_LOPT_TCP_READ_AHEAD) -> read_ahead; dec_opt(?INET_OPT_DEBUG) -> debug; dec_opt(I) when is_integer(I) -> undefined. @@ -1759,6 +1761,7 @@ type_opt_1(read_packets) -> uint; type_opt_1(netns) -> binary; type_opt_1(show_econnreset) -> bool; type_opt_1(bind_to_device) -> binary; +type_opt_1(read_ahead) -> bool; type_opt_1(debug) -> bool; %% %% SCTP options (to be set). If the type is a record type, the corresponding diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index f6efbea077ad..0008a1304870 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -999,7 +999,7 @@ connect_options() -> header, active, packet, packet_size, buffer, mode, deliver, line_delimiter, exit_on_close, high_watermark, low_watermark, high_msgq_watermark, low_msgq_watermark, send_timeout, send_timeout_close, delay_send, raw, - show_econnreset, bind_to_device]. + show_econnreset, bind_to_device, read_ahead]. connect_options(Opts, Mod) -> BaseOpts = @@ -1089,7 +1089,7 @@ listen_options() -> header, active, packet, buffer, mode, deliver, backlog, ipv6_v6only, exit_on_close, high_watermark, low_watermark, high_msgq_watermark, low_msgq_watermark, send_timeout, send_timeout_close, delay_send, - packet_size, raw, show_econnreset, bind_to_device]. + packet_size, raw, show_econnreset, bind_to_device, read_ahead]. listen_options(Opts, Mod) -> BaseOpts = diff --git a/lib/kernel/src/inet_int.hrl b/lib/kernel/src/inet_int.hrl index 2f50f2c23cbd..76b3f3ce023c 100644 --- a/lib/kernel/src/inet_int.hrl +++ b/lib/kernel/src/inet_int.hrl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2022. All Rights Reserved. +%% Copyright Ericsson AB 1997-2024. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -167,6 +167,7 @@ -define(INET_OPT_TTL, 46). -define(INET_OPT_RECVTTL, 47). -define(TCP_OPT_NOPUSH, 48). +-define(INET_LOPT_TCP_READ_AHEAD, 49). -define(INET_OPT_DEBUG, 99). % Specific SCTP options: separate range: -define(SCTP_OPT_RTOINFO, 100). From 113428448a098ae302fbfbabfa6d97513938e44c Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Thu, 25 Jul 2024 17:51:36 +0200 Subject: [PATCH 4/7] Use read_ahead in SSL for KTLS --- lib/ssl/src/inet_tls_dist.erl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/ssl/src/inet_tls_dist.erl b/lib/ssl/src/inet_tls_dist.erl index c93bb2759634..fddf17bddb19 100644 --- a/lib/ssl/src/inet_tls_dist.erl +++ b/lib/ssl/src/inet_tls_dist.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2011-2023. All Rights Reserved. +%% Copyright Ericsson AB 2011-2024. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -233,7 +233,8 @@ listen(Name, Host) -> fam_listen(Family, Name, Host) -> ForcedOptions = - [Family, {active, false}, {packet, 4}, {nodelay, true}], + [Family, {active, false}, {packet, 4}, + {read_ahead, false}, {nodelay, true}], ListenFun = fun (First, Last, ListenOptions) -> listen_loop( @@ -640,7 +641,8 @@ do_setup( inet_tcp_dist:merge_options( ConnectOptions, get_ssl_options(client)), - [Family, binary, {active, false}, {packet, 4}, {nodelay, true}], + [Family, binary, {active, false}, {packet, 4}, + {read_ahead, false}, {nodelay, true}], [{server_name_indication, Host}]), KTLS = proplists:get_value(ktls, Opts, false), dist_util:reset_timer(Timer), From 69f9884acca57e51d16eea3496a70cbaea28f537 Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Wed, 14 Aug 2024 13:43:22 +0200 Subject: [PATCH 5/7] Fix NULL pointer to memmove in tcp_deliver --- erts/emulator/drivers/common/inet_drv.c | 78 ++++++++++++------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 6776ab2f1ecc..28c46bd26954 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -11402,9 +11402,15 @@ static void tcp_clear_output(tcp_descriptor* desc) /* Move data so that ptr_start point at buf->orig_bytes */ static void tcp_restart_input(tcp_descriptor* desc) { + ASSERT( desc->i_buf != NULL ); + if (desc->i_ptr_start != desc->i_buf->orig_bytes) { - int n = desc->i_ptr - desc->i_ptr_start; + int n; + ASSERT( (desc->i_ptr_start != NULL) && + (desc->i_buf->orig_bytes != NULL) ); + + n = desc->i_ptr - desc->i_ptr_start; DEBUGF(("tcp_restart_input: move %d bytes\r\n", n)); sys_memmove(desc->i_buf->orig_bytes, desc->i_ptr_start, n); desc->i_ptr_start = desc->i_buf->orig_bytes; @@ -12592,12 +12598,13 @@ static int tcp_remain(tcp_descriptor* desc, int* len) goto error; } DEBUGF((" => restart more=%d\r\n", nfill - n)); - tcp_clear_input(desc); /* Move the data to buffer start */ + tcp_restart_input(desc); /* Move the data to buffer start */ /* Return the unused buffer space before desc->i_ptr_start */ return nfill - n; } else { DEBUGF((" => more=%d \r\n", nsz)); + tcp_restart_input(desc); /* Move the data to buffer start */ return nsz; /* Remaining buffer space */ } } @@ -12609,7 +12616,7 @@ static int tcp_remain(tcp_descriptor* desc, int* len) /* ** Deliver all packets ready -** if len == 0 then check start with a check for ready packet +** if len == 0 then start with a check for ready packet */ static int tcp_deliver(tcp_descriptor* desc, int len) { @@ -12621,14 +12628,13 @@ static int tcp_deliver(tcp_descriptor* desc, int len) /* empty buffer or waiting for more input */ if ((desc->i_buf == NULL) || (desc->i_remain > 0)) return 0; - if ((n = tcp_remain(desc, &len)) != 0) { - if (n < 0) /* packet error */ - return n; - /* Packet incomplete */ - if (len > 0) - desc->i_remain = n; /* This is what is missing */ - return 0; - } + if ((n = tcp_remain(desc, &len)) < 0) /* Packet error */ + return n; + else if (0 < n) { /* Packet incomplete */ + if (0 < len) /* We know n bytes are missing */ + desc->i_remain = n; + return 0; + } } while (len > 0) { @@ -12676,24 +12682,24 @@ static int tcp_deliver(tcp_descriptor* desc, int len) } count++; - len = 0; - if (!desc->inet.active) { + if (! desc->inet.active) { cancel_multi_timer(desc, INETP(desc)->port, &tcp_inet_recv_timeout); sock_select(INETP(desc),(FD_READ|FD_CLOSE),0); if (desc->i_buf != NULL) tcp_restart_input(desc); + len = 0; } - else if (desc->i_buf != NULL) { - if ((n = tcp_remain(desc, &len)) != 0) { - if (n < 0) /* packet error */ - return n; - tcp_restart_input(desc); - if (len > 0) - desc->i_remain = n; - len = 0; - } - } + else if (desc->i_buf == NULL) { + len = 0; + } + else if ((n = tcp_remain(desc, &len)) < 0) /* Packet error */ + return n; + else if (0 < n) { /* Packet incomplete */ + if (0 < len) /* We know n bytes are missing */ + desc->i_remain = n; + len = 0; + } } return count; } @@ -12718,8 +12724,7 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) desc->i_ptr_start = desc->i_buf->orig_bytes; desc->i_ptr = desc->i_ptr_start; if (request_len > 0) { - nread = sz; /* Read ahead */ - desc->i_remain = request_len; + nread = desc->i_remain = request_len; } else { nread = packet_header_length(desc); @@ -12727,10 +12732,6 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) nread = sz; /* Read ahead */ desc->i_remain = 0; } - if (request_len > 0) - desc->i_remain = request_len; - else - desc->i_remain = 0; } else if (request_len > 0) { /* we have data in buffer and a request */ int n = desc->i_ptr - desc->i_ptr_start; @@ -12744,12 +12745,12 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) else if (desc->i_remain == 0) { /* poll remain from buffer data */ int len; - if ((nread = tcp_remain(desc, &len)) < 0) + if ((nread = tcp_remain(desc, &len)) < 0) /* Packet error */ return tcp_recv_error(desc, EMSGSIZE); - else if (nread == 0) - return tcp_deliver(desc, len); - else if (len > 0) - desc->i_remain = nread; /* set remain */ + else if (nread == 0) /* We have a complete packet */ + return tcp_deliver(desc, len); + else if (0 < len) /* We know nread bytes are missing */ + desc->i_remain = nread; } else /* remain already set use it */ nread = desc->i_remain; @@ -12801,13 +12802,12 @@ static int tcp_recv(tcp_descriptor* desc, int request_len) else { int len; - nread = tcp_remain(desc, &len); - if (nread < 0) + if ((nread = tcp_remain(desc, &len)) < 0) /* Packet error */ return tcp_recv_error(desc, EMSGSIZE); - else if (nread == 0) + else if (nread == 0) /* We have a complete packet */ return tcp_deliver(desc, len); - else if (len > 0) /* nread > 0 */ - desc->i_remain = nread; /* What is missing for this packet */ + else if (0 < len) /* We know nread bytes are missing */ + desc->i_remain = nread; } } /* for (;;) */ } From e806202150fe50e71f765bb8f8a024c3c220e66f Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Mon, 26 Aug 2024 17:10:14 +0200 Subject: [PATCH 6/7] Use read_ahead in SSL for KTLS --- lib/ssl/src/inet_tls_dist.erl | 2 +- lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ssl/src/inet_tls_dist.erl b/lib/ssl/src/inet_tls_dist.erl index fddf17bddb19..776886e6fe32 100644 --- a/lib/ssl/src/inet_tls_dist.erl +++ b/lib/ssl/src/inet_tls_dist.erl @@ -945,7 +945,7 @@ inet_set_ktls( inet:setopts( Socket, [list, {packet, Packet}, {packet_size, PacketSize}, - {header, Header}, {active, Active}]) + {header, Header}, {read_ahead, true}, {active, Active}]) of ok -> ok; diff --git a/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl b/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl index d350cc81391a..2c06ad2fcb2a 100644 --- a/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl +++ b/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2023. All Rights Reserved. +%% Copyright Ericsson AB 2023-2024. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -57,7 +57,7 @@ listen_open(_NetAddress, Options) -> inet_epmd_dist:merge_options( Options, [{active, false}, {mode, binary}, {packet, 0}, - inet_epmd_dist:nodelay()], + {read_ahead, false}, inet_epmd_dist:nodelay()], [])}. %% ------------------------------------------------------------ @@ -111,7 +111,7 @@ connect(NetAddress, _Timer, Options) -> inet_epmd_dist:merge_options( Options, [{active, false}, {mode, binary}, {packet, 0}, - inet_epmd_dist:nodelay()], + {read_ahead, false}, inet_epmd_dist:nodelay()], []), #net_address{ address = {Ip, Port} } = NetAddress, maybe From fbafeda9f6565e4fbdfaa8ecb47b6a40376ea96f Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Fri, 30 Aug 2024 15:07:47 +0200 Subject: [PATCH 7/7] Fix NULL pointer to memmove in tcp_deliver This reverts commit 45ebcd3671a7d51aba21847f9a22a8b985185a99. --- erts/emulator/drivers/common/inet_drv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 28c46bd26954..dbdc29310e36 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -11408,6 +11408,7 @@ static void tcp_restart_input(tcp_descriptor* desc) int n; ASSERT( (desc->i_ptr_start != NULL) && + (desc->i_buf != NULL) && (desc->i_buf->orig_bytes != NULL) ); n = desc->i_ptr - desc->i_ptr_start; @@ -12580,8 +12581,10 @@ static int tcp_remain(tcp_descriptor* desc, int* len) *len = 0; nread = packet_header_length(desc); - if (nread != 0) + if (nread != 0) { + tcp_restart_input(desc); /* Move the data to buffer start */ return nread; + } if (nsz == 0) { /* No remaining space - buffer is full */ if (nfill == n) { /* The current packet itself fills the buffer */