aboutsummaryrefslogtreecommitdiff
path: root/sys/sparc64
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2013-04-08 19:10:45 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2013-04-08 19:10:45 +0000
commitad97af7ebdd3833d5b5803324c3c460606a0c626 (patch)
treeaadd654864cd16caea405f5ff2772f2fcd665103 /sys/sparc64
parentdad14216507bfff12693742399c3540722178263 (diff)
downloadsrc-ad97af7ebdd3833d5b5803324c3c460606a0c626.tar.gz
src-ad97af7ebdd3833d5b5803324c3c460606a0c626.zip
Merge from projects/counters: UMA_ZONE_PCPU zones.
These zones have slab size == sizeof(struct pcpu), but request from VM enough pages to fit (uk_slabsize * mp_ncpus). An item allocated from such zone would have a separate twin for each CPU in the system, and these twins are at a distance of sizeof(struct pcpu) from each other. This magic value of distance would allow us to make some optimizations later. To address private item from a CPU simple arithmetics should be used: item = (type *)((char *)base + sizeof(struct pcpu) * curcpu) These arithmetics are available as zpcpu_get() macro in pcpu.h. To introduce non-page size slabs a new field had been added to uma_keg uk_slabsize. This shifted some frequently used fields of uma_keg to the fourth cache line on amd64. To mitigate this pessimization, uma_keg fields were a bit rearranged and least frequently used uk_name and uk_link moved down to the fourth cache line. All other fields, that are dereferenced frequently fit into first three cache lines. Sponsored by: Nginx, Inc.
Notes
Notes: svn path=/head/; revision=249264
Diffstat (limited to 'sys/sparc64')
0 files changed, 0 insertions, 0 deletions