diff options
author | Alexander Motin <mav@FreeBSD.org> | 2021-07-29 01:18:50 +0000 |
---|---|---|
committer | Alexander Motin <mav@FreeBSD.org> | 2021-07-29 02:00:29 +0000 |
commit | aefe0a8c32d370f2fdd0d0771eb59f8845beda17 (patch) | |
tree | 27afafabe2d1c41df94233241336df76c938dfa0 /sys/sys/_stdint.h | |
parent | 7cbf1de38e06663c76f4f075db31ea25f429f1b3 (diff) | |
download | src-aefe0a8c32d370f2fdd0d0771eb59f8845beda17.tar.gz src-aefe0a8c32d370f2fdd0d0771eb59f8845beda17.zip |
Refactor/optimize cpu_search_*().
Remove cpu_search_both(), unused for many years. Without it there is
less sense for the trick of compiling common cpu_search() into separate
cpu_search_lowest() and cpu_search_highest(), so split them completely,
making code more readable. While there, split iteration over children
groups and CPUs, complicating code for very small deduplication.
Stop passing cpuset_t arguments by value and avoid some manipulations.
Since MAXCPU bump from 64 to 256, what was a single register turned
into 32-byte memory array, requiring memory allocation and accesses.
Splitting struct cpu_search into parameter and result parts allows to
even more reduce stack usage, since the first can be passed through
on recursion.
Remove CPU_FFS() from the hot paths, precalculating first and last CPU
for each CPU group in advance during initialization. Again, it was
not a problem for 64 CPUs before, but for 256 FFS needs much more code.
With these changes on 80-thread system doing ~260K uncached ZFS reads
per second I observe ~30% reduction of time spent in cpu_search_*().
MFC after: 1 month
Diffstat (limited to 'sys/sys/_stdint.h')
0 files changed, 0 insertions, 0 deletions