[PATCH v2 0/5] Optimize inet_ntop

Adhemerval Zanella adhemerval.zanella@linaro.org
Wed Jun 4 20:42:39 GMT 2025


Some projects override inet_ntop because the glibc implementation
shows a significant amount of overhead [1][2].  The main culprit
is the internal sprintf, which requires a lot of internal function
calls and is quite slow.  The recent fortifying work required extra
maintenance from these projects (and worse, it might prevent us from
actually using the fortification depending on how the wrapper is
implemented).

To avoid the need to resort to such hacks, this patchset optimizes
inet_ntop.  The resulting performance should be similar to the one
from frr project (and hopefully they might stop it to use a different
implementation).

Changes from v1:
- Fixed bench-build with BENCHSET set to bench-resolv.
- Optimized put_uint8.
- Optimized inet_ntop6.
- Implemented inet_ntoa on top of inet_ntop.

Adhemerval Zanella (5):
  benchtests: Add IPv4 inet_ntop benchmark
  benchtests: Add IPv6 inet_ntop benchmark
  resolve: Proper indent resolv/inet_ntop.c
  resolv: Optimize inet_ntop
  inet: Implement inet_ntoa on top of inet_ntop

 benchtests/Makefile                |    7 +
 benchtests/inet_ntop_ipv4-inputs   | 1003 ++++++++++++++++++++++++++++
 benchtests/inet_ntop_ipv4-source.c |   10 +
 benchtests/inet_ntop_ipv6-inputs   | 1003 ++++++++++++++++++++++++++++
 benchtests/inet_ntop_ipv6-source.c |   10 +
 inet/inet_ntoa.c                   |    7 +-
 resolv/inet_ntop.c                 |  364 +++++-----
 7 files changed, 2229 insertions(+), 175 deletions(-)
 create mode 100644 benchtests/inet_ntop_ipv4-inputs
 create mode 100644 benchtests/inet_ntop_ipv4-source.c
 create mode 100644 benchtests/inet_ntop_ipv6-inputs
 create mode 100644 benchtests/inet_ntop_ipv6-source.c

-- 
2.43.0



More information about the Libc-alpha mailing list