aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/_stdint.h
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2021-07-29 01:18:50 +0000
committerAlexander Motin <mav@FreeBSD.org>2021-07-29 02:00:29 +0000
commitaefe0a8c32d370f2fdd0d0771eb59f8845beda17 (patch)
tree27afafabe2d1c41df94233241336df76c938dfa0 /sys/sys/_stdint.h
parent7cbf1de38e06663c76f4f075db31ea25f429f1b3 (diff)
downloadsrc-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