[PATCH] aarch64: MTE compatible strrchr
Alex Butler
Alex.Butler@arm.com
Tue Jun 9 16:09:36 GMT 2020
This patch adds an MTE compatible implementation of strrchr.
Please see the benchmark results for the performance uplift.
| length | alignment | uplift A72 | uplift A53 | uplift N1 |
|--------+-----------+-------------|-------------|-------------|
| 2048 | 0 | 0.91x | 0.80x | 0.98x |
| 2048 | 1 | 0.88x | 0.79x | 0.91x |
| 2048 | 0 | 0.92x | 0.80x | 1.00x |
| 2048 | 2 | 0.92x | 0.80x | 0.97x |
| 2048 | 0 | 0.93x | 0.80x | 1.01x |
| 2048 | 3 | 0.92x | 0.80x | 0.93x |
| 2048 | 0 | 0.95x | 0.80x | 1.00x |
| 2048 | 4 | 0.93x | 0.80x | 0.98x |
| 2048 | 0 | 0.95x | 0.81x | 1.03x |
| 2048 | 5 | 0.91x | 0.79x | 0.95x |
| 2048 | 0 | 0.93x | 0.80x | 0.97x |
| 2048 | 6 | 1.01x | 0.85x | 1.12x |
| 2048 | 0 | 1.27x | 0.93x | 1.40x |
| 2048 | 7 | 1.23x | 0.92x | 1.38x |
| 256 | 1 | 0.92x | 0.80x | 1.00x |
| 256 | 1 | 0.96x | 0.82x | 1.06x |
| 256 | 2 | 0.96x | 0.82x | 1.07x |
| 256 | 2 | 0.96x | 0.82x | 1.06x |
| 256 | 3 | 0.92x | 0.80x | 0.99x |
| 256 | 3 | 0.96x | 0.82x | 1.06x |
| 256 | 4 | 0.96x | 0.82x | 1.07x |
| 256 | 4 | 0.90x | 0.80x | 1.00x |
| 256 | 5 | 0.95x | 0.82x | 1.08x |
| 256 | 5 | 0.96x | 0.82x | 1.06x |
| 256 | 6 | 0.95x | 0.83x | 1.04x |
| 256 | 6 | 0.95x | 0.81x | 1.03x |
| 256 | 7 | 0.97x | 0.82x | 1.05x |
| 256 | 7 | 0.97x | 0.82x | 1.05x |
| 1 | 0 | 1.09x | 1.37x | 1.41x |
| 1 | 0 | 1.09x | 1.38x | 1.42x |
| 2 | 0 | 1.09x | 1.37x | 1.41x |
| 2 | 0 | 1.09x | 1.38x | 1.37x |
| 3 | 0 | 1.09x | 1.38x | 1.42x |
| 3 | 0 | 1.09x | 1.37x | 1.41x |
| 4 | 0 | 1.09x | 1.38x | 1.42x |
| 4 | 0 | 1.10x | 1.37x | 1.41x |
| 5 | 0 | 1.09x | 1.37x | 1.42x |
| 5 | 0 | 1.09x | 1.38x | 1.42x |
| 6 | 0 | 1.09x | 1.36x | 1.42x |
| 6 | 0 | 1.09x | 1.37x | 1.41x |
| 7 | 0 | 1.10x | 1.37x | 1.40x |
| 7 | 0 | 1.09x | 1.38x | 1.40x |
| 8 | 0 | 1.09x | 1.37x | 1.41x |
| 8 | 0 | 1.08x | 1.36x | 1.40x |
| 9 | 0 | 1.09x | 1.38x | 1.40x |
| 9 | 0 | 1.08x | 1.38x | 1.42x |
| 10 | 0 | 1.09x | 1.36x | 1.41x |
| 10 | 0 | 1.09x | 1.37x | 1.41x |
| 11 | 0 | 1.09x | 1.37x | 1.45x |
| 11 | 0 | 1.09x | 1.37x | 1.38x |
| 12 | 0 | 1.09x | 1.37x | 1.38x |
| 12 | 0 | 1.10x | 1.36x | 1.41x |
| 13 | 0 | 1.09x | 1.36x | 1.39x |
| 13 | 0 | 1.09x | 1.36x | 1.42x |
| 14 | 0 | 1.09x | 1.37x | 1.52x |
| 14 | 0 | 1.09x | 1.37x | 1.40x |
| 15 | 0 | 1.09x | 1.37x | 1.42x |
| 15 | 0 | 1.09x | 1.37x | 1.40x |
| 16 | 0 | 0.87x | 0.89x | 0.98x |
| 16 | 0 | 0.87x | 0.88x | 0.92x |
| 17 | 0 | 0.88x | 1.04x | 1.19x |
| 17 | 0 | 0.87x | 1.04x | 1.17x |
| 18 | 0 | 0.88x | 1.03x | 1.20x |
| 18 | 0 | 0.88x | 1.04x | 1.19x |
| 19 | 0 | 0.87x | 1.04x | 1.19x |
| 19 | 0 | 0.88x | 1.04x | 1.19x |
| 20 | 0 | 0.88x | 1.05x | 1.18x |
| 20 | 0 | 0.88x | 1.04x | 1.20x |
| 21 | 0 | 0.88x | 1.03x | 1.20x |
| 21 | 0 | 0.87x | 1.04x | 1.19x |
| 22 | 0 | 0.88x | 1.05x | 1.19x |
| 22 | 0 | 0.88x | 1.04x | 1.19x |
| 23 | 0 | 0.87x | 1.03x | 1.19x |
| 23 | 0 | 0.88x | 1.04x | 1.20x |
| 24 | 0 | 0.88x | 1.05x | 1.20x |
| 24 | 0 | 0.88x | 1.04x | 1.18x |
| 25 | 0 | 0.88x | 1.03x | 1.20x |
| 25 | 0 | 0.88x | 1.05x | 1.20x |
| 26 | 0 | 0.88x | 1.04x | 1.21x |
| 26 | 0 | 0.87x | 1.03x | 1.19x |
| 27 | 0 | 0.88x | 1.05x | 1.20x |
| 27 | 0 | 0.88x | 1.03x | 1.18x |
| 28 | 0 | 0.88x | 1.04x | 1.17x |
| 28 | 0 | 0.88x | 1.05x | 1.18x |
| 29 | 0 | 0.87x | 1.03x | 1.19x |
| 29 | 0 | 0.88x | 1.05x | 1.20x |
| 30 | 0 | 0.88x | 1.03x | 1.16x |
| 30 | 0 | 0.88x | 1.05x | 1.19x |
| 31 | 0 | 0.87x | 1.03x | 1.19x |
| 31 | 0 | 0.88x | 1.05x | 1.29x |
| 32 | 0 | 1.14x | 1.04x | 1.20x |
| 32 | 0 | 1.14x | 1.05x | 1.19x |
| 2048 | 0 | 1.00x | 1.05x | 1.24x |
| 2048 | 1 | 0.55x | 1.00x | 1.00x |
| 2048 | 0 | 1.16x | 0.96x | 1.11x |
| 2048 | 2 | 1.09x | 0.94x | 1.06x |
| 2048 | 0 | 1.13x | 0.82x | 1.13x |
| 2048 | 3 | 1.11x | 0.87x | 1.08x |
| 2048 | 0 | 1.15x | 0.84x | 1.13x |
| 2048 | 4 | 1.08x | 0.79x | 1.09x |
| 2048 | 0 | 0.97x | 0.80x | 1.09x |
| 2048 | 5 | 1.11x | 0.80x | 1.08x |
| 2048 | 0 | 1.12x | 0.78x | 1.07x |
| 2048 | 6 | 1.00x | 0.77x | 1.08x |
| 2048 | 0 | 1.19x | 0.76x | 1.05x |
| 2048 | 7 | 1.15x | 0.76x | 1.07x |
| 256 | 1 | 1.08x | 0.94x | 1.06x |
| 256 | 1 | 1.05x | 0.94x | 1.06x |
| 256 | 2 | 1.07x | 0.94x | 1.06x |
| 256 | 2 | 1.09x | 0.94x | 1.06x |
| 256 | 3 | 1.08x | 0.93x | 1.06x |
| 256 | 3 | 1.09x | 0.93x | 1.04x |
| 256 | 4 | 1.08x | 0.94x | 1.06x |
| 256 | 4 | 1.09x | 0.94x | 1.04x |
| 256 | 5 | 1.08x | 0.93x | 1.10x |
| 256 | 5 | 1.08x | 0.94x | 1.07x |
| 256 | 6 | 1.08x | 0.94x | 1.06x |
| 256 | 6 | 1.07x | 0.93x | 1.07x |
| 256 | 7 | 1.08x | 0.94x | 1.04x |
| 256 | 7 | 1.08x | 0.94x | 1.07x |
| 1 | 0 | 0.96x | 1.23x | 1.14x |
| 1 | 0 | 1.04x | 1.24x | 1.15x |
| 2 | 0 | 1.04x | 1.24x | 1.13x |
| 2 | 0 | 1.01x | 1.24x | 1.14x |
| 3 | 0 | 1.04x | 1.24x | 1.14x |
| 3 | 0 | 1.04x | 1.24x | 1.14x |
| 4 | 0 | 1.04x | 1.24x | 1.13x |
| 4 | 0 | 1.04x | 1.24x | 1.14x |
| 5 | 0 | 1.04x | 1.24x | 1.14x |
| 5 | 0 | 1.04x | 1.24x | 1.14x |
| 6 | 0 | 1.04x | 1.24x | 1.14x |
| 6 | 0 | 1.05x | 1.24x | 1.14x |
| 7 | 0 | 1.04x | 1.23x | 1.14x |
| 7 | 0 | 1.03x | 1.24x | 1.14x |
| 8 | 0 | 1.04x | 1.23x | 1.14x |
| 8 | 0 | 1.04x | 1.24x | 1.13x |
| 9 | 0 | 1.04x | 1.24x | 1.14x |
| 9 | 0 | 1.04x | 1.24x | 1.13x |
| 10 | 0 | 1.04x | 1.24x | 1.14x |
| 10 | 0 | 1.04x | 1.24x | 1.14x |
| 11 | 0 | 1.04x | 1.23x | 1.14x |
| 11 | 0 | 1.04x | 1.24x | 1.14x |
| 12 | 0 | 1.04x | 1.24x | 1.14x |
| 12 | 0 | 1.04x | 1.24x | 1.13x |
| 13 | 0 | 1.04x | 1.24x | 1.14x |
| 13 | 0 | 1.04x | 1.24x | 1.13x |
| 14 | 0 | 1.04x | 1.23x | 1.14x |
| 14 | 0 | 1.04x | 1.24x | 1.14x |
| 15 | 0 | 1.04x | 1.24x | 1.14x |
| 15 | 0 | 1.04x | 1.24x | 1.14x |
| 16 | 0 | 1.04x | 1.26x | 1.14x |
| 16 | 0 | 1.04x | 1.24x | 1.14x |
| 17 | 0 | 0.84x | 0.94x | 0.96x |
| 17 | 0 | 0.83x | 0.95x | 0.96x |
| 18 | 0 | 0.83x | 0.94x | 0.96x |
| 18 | 0 | 0.83x | 0.94x | 0.97x |
| 19 | 0 | 0.83x | 0.93x | 0.96x |
| 19 | 0 | 0.83x | 0.93x | 0.96x |
| 20 | 0 | 0.83x | 0.94x | 0.96x |
| 20 | 0 | 0.82x | 0.94x | 0.96x |
| 21 | 0 | 0.83x | 0.95x | 0.96x |
| 21 | 0 | 0.83x | 0.94x | 0.96x |
| 22 | 0 | 0.82x | 0.93x | 0.96x |
| 22 | 0 | 0.83x | 0.93x | 0.96x |
| 23 | 0 | 0.83x | 0.94x | 0.96x |
| 23 | 0 | 0.82x | 0.95x | 0.96x |
| 24 | 0 | 0.83x | 0.94x | 0.96x |
| 24 | 0 | 0.83x | 0.93x | 0.96x |
| 25 | 0 | 0.82x | 0.94x | 0.96x |
| 25 | 0 | 0.84x | 0.94x | 0.96x |
| 26 | 0 | 0.83x | 0.94x | 0.93x |
| 26 | 0 | 0.83x | 0.94x | 0.96x |
| 27 | 0 | 0.84x | 0.94x | 0.97x |
| 27 | 0 | 0.83x | 0.94x | 0.96x |
| 28 | 0 | 0.83x | 0.94x | 0.96x |
| 28 | 0 | 0.83x | 0.94x | 0.96x |
| 29 | 0 | 0.83x | 0.94x | 0.96x |
| 29 | 0 | 0.83x | 0.94x | 0.96x |
| 30 | 0 | 0.83x | 0.93x | 0.80x |
| 30 | 0 | 0.83x | 0.95x | 0.84x |
| 31 | 0 | 0.83x | 0.94x | 1.01x |
| 31 | 0 | 0.83x | 0.94x | 1.02x |
| 32 | 0 | 0.83x | 0.94x | 0.96x |
| 32 | 0 | 0.83x | 0.93x | 0.96x |
This patch passes the tests with no regressions.
8< --- 8< --- 8<
Add support for MTE to strrchr. Regression tested with xcheck and benchmarked
with glibc's benchtests on the Cortex-A53, Cortex-A72, and Neoverse N1.
The existing implementation assumes that any access to the pages in which the
string resides is safe. This assumption is not true when MTE is enabled. This
patch updates the algorithm to ensure that accesses remain within the bounds
of an MTE tag (16-byte chunks) and improves overall performance.
Co-authored-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-aarch64-add-MTE-compatible-strrchr.patch
Type: text/x-patch
Size: 7963 bytes
Desc: 0001-aarch64-add-MTE-compatible-strrchr.patch
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20200609/b70ab19f/attachment-0001.bin>
More information about the Libc-alpha
mailing list