diff options
author | glebius <glebius@FreeBSD.org> | 2013-04-08 19:10:45 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2013-04-08 19:10:45 +0000 |
commit | 7f9db020a246190e72c9b9656997403221c48a3a (patch) | |
tree | aadd654864cd16caea405f5ff2772f2fcd665103 /contrib/diff/lib/hard-locale.c | |
parent | 4312ec3f0dd92a3dedf58a28ebc6f4ae3a1a7672 (diff) | |
download | FreeBSD-src-7f9db020a246190e72c9b9656997403221c48a3a.zip FreeBSD-src-7f9db020a246190e72c9b9656997403221c48a3a.tar.gz |
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.
Diffstat (limited to 'contrib/diff/lib/hard-locale.c')
0 files changed, 0 insertions, 0 deletions