nuttx-apps/testing/libc
Justin Hammond d4fd491f5a testing/libc/arch_libc: Add a throughput benchmark.
The existing speed checks time one call at one size, 128 bytes, with both
operands aligned.  A machine implementation usually takes its wide path
only when the pointers satisfy some alignment condition, so that single
point reports the best case and says nothing about the rest of the input
space.

Measure the same functions across a size sweep and every source and
destination alignment pair instead, plus strlcpy.  On rv64 the difference
this exposes is not marginal:

  strcpy    32768 B  s+0/d+0     2938.0 MB/s
  strcpy    32768 B  s+1/d+1     2942.0 MB/s
  strcpy    32768 B  s+1/d+2      626.0 MB/s
  memcmp    32768 B  s+0/d+0      412.4 MB/s
  memcmp    32768 B  s+1/d+2       41.0 MB/s

Two pointers misaligned by the same amount run at the aligned rate;
misaligned by different amounts they fall to a tenth of it.  Neither
number is visible from an aligned measurement alone.

A function with no machine implementation reports the same rate at every
alignment, so the sweep also shows which of them a machine directory
actually covers.

Each result reports MB/s, which compares across machines, and cycles per
byte where perf_gettime() is reachable from an application, both from one
timed loop.  strcat starts from an empty destination on each turn, since
appending to the last result would grow it without bound, so its figure
includes that store.

It sits behind TESTING_ARCH_LIBC_BENCH, default n, because a measurement
runs for a fixed interval and a full sweep takes about a minute.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Justin Hammond <justin@dynam.ac>
2026-08-18 15:27:07 -03:00
..
arch_libc testing/libc/arch_libc: Add a throughput benchmark. 2026-08-18 15:27:07 -03:00
atomic apps/testing:fix uclibc atomic make.defs error 2025-03-03 16:03:13 +01:00
crctest crctest: Test the CRC library that the E2E depends on. 2026-01-22 19:51:51 +08:00
fmemopen apps/testing:move arch_libc, fmemopen, scanftest folders to the new lib folder 2025-01-22 17:18:30 +08:00
fopencookie testing/libc/fopencookie/fopencookie.c: fix spellcheck 2026-06-29 12:29:42 +02:00
open_memstream testing: Move crypto/setest to drivers and open_memstream to libc 2025-01-26 07:32:53 +01:00
popen testing/libc/popen: add popen/dpopen test for shell and no-shell modes 2026-06-02 23:35:28 +08:00
scanftest !testing/libc/scanftest: drop CONFIG_LIBC_LONG_LONG from help text 2026-05-11 17:38:32 +08:00
stdbit testing/libc: add stdbit test 2026-06-27 19:28:34 +08:00
wcstombs testing/libc/wcstombs: Add testing application for wcstombs 2025-02-06 23:41:31 +01:00
.gitignore apps/testing:move arch_libc, fmemopen, scanftest folders to the new lib folder 2025-01-22 17:18:30 +08:00
CMakeLists.txt apps/testing:move arch_libc, fmemopen, scanftest folders to the new lib folder 2025-01-22 17:18:30 +08:00
Make.defs apps/testing:move arch_libc, fmemopen, scanftest folders to the new lib folder 2025-01-22 17:18:30 +08:00
Makefile apps/testing:move arch_libc, fmemopen, scanftest folders to the new lib folder 2025-01-22 17:18:30 +08:00