From 3cf9b2e722a39962e2487cdcca1984de5a191378 Mon Sep 17 00:00:00 2001 From: leventov Date: Tue, 28 Oct 2014 06:44:38 +0300 Subject: [PATCH] Employ MemoryUnit API --- .../chronicle/map/ReplicatedChronicleMap.java | 11 +++++--- .../chronicle/map/VanillaChronicleMap.java | 27 ++++++++----------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java index 8928a6b9b..8de92f67c 100644 --- a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java @@ -25,6 +25,7 @@ import net.openhft.chronicle.common.serialization.MetaBytesInterop; import net.openhft.chronicle.common.serialization.MetaBytesWriter; import net.openhft.chronicle.common.threadlocal.ThreadLocalCopies; import net.openhft.lang.Maths; +import net.openhft.lang.MemoryUnit; import net.openhft.lang.collection.ATSDirectBitSet; import net.openhft.lang.io.Bytes; import net.openhft.lang.io.MultiStoreBytes; @@ -41,6 +42,9 @@ import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicReferenceArray; import static net.openhft.chronicle.common.serialization.Hasher.hash; +import static net.openhft.lang.MemoryUnit.BITS; +import static net.openhft.lang.MemoryUnit.BYTES; +import static net.openhft.lang.MemoryUnit.CACHE_LINES; import static net.openhft.lang.collection.DirectBitSet.NOT_FOUND; /** @@ -120,7 +124,7 @@ class ReplicatedChronicleMap, } private int assignedModIterBitSetSizeInBytes() { - return (int) align64((127 + RESERVED_MOD_ITER) / 8); + return (int) CACHE_LINES.align(BYTES.alignAndConvert(127 + RESERVED_MOD_ITER, BITS), BYTES); } @Override @@ -139,7 +143,8 @@ class ReplicatedChronicleMap, } long modIterBitSetSizeInBytes() { - return align64(bitsPerSegmentInModIterBitSet() * segments.length / 8L); + long bytes = BITS.toBytes(bitsPerSegmentInModIterBitSet() * segments.length); + return CACHE_LINES.align(bytes, BYTES); } private long bitsPerSegmentInModIterBitSet() { @@ -587,7 +592,7 @@ class ReplicatedChronicleMap, @Override void createHashLookups(long start) { hashLookupLiveAndDeleted = createMultiMap(start); - start += align64(sizeOfMultiMap() + sizeOfMultiMapBitSet()); + start += CACHE_LINES.align(sizeOfMultiMap() + sizeOfMultiMapBitSet(), BYTES); hashLookupLiveOnly = createMultiMap(start); } diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index 834b94e3f..4304bca3a 100644 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -22,6 +22,7 @@ import net.openhft.chronicle.common.ChronicleHashErrorListener; import net.openhft.chronicle.common.serialization.*; import net.openhft.chronicle.common.threadlocal.Provider; import net.openhft.chronicle.common.threadlocal.ThreadLocalCopies; +import net.openhft.lang.MemoryUnit; import net.openhft.lang.collection.DirectBitSet; import net.openhft.lang.collection.SingleThreadedDirectBitSet; import net.openhft.lang.io.*; @@ -45,6 +46,7 @@ import java.util.concurrent.TimeUnit; import static java.lang.Long.numberOfTrailingZeros; import static java.lang.Math.max; import static java.lang.Thread.currentThread; +import static net.openhft.lang.MemoryUnit.*; class VanillaChronicleMap, @@ -153,17 +155,6 @@ class VanillaChronicleMap, return hashSplitting.segmentIndex(hash); } - /** - * Cache line alignment, assuming 64-byte cache lines. - */ - static long align64(long l) { - return (l + 63L) & ~63L; - } - - static long align8(long n) { - return (n + 7L) & ~7L; - } - void initTransients() { keyReaderProvider = Provider.of((Class) originalKeyReader.getClass()); keyInteropProvider = Provider.of((Class) originalKeyInterop.getClass()); @@ -255,7 +246,7 @@ class VanillaChronicleMap, } long sizeOfBitSets() { - return align64(align8(entriesPerSegment) / 8L); + return CACHE_LINES.align(BYTES.alignAndConvert(entriesPerSegment, BITS), BYTES); } int numberOfBitSets() { @@ -266,7 +257,8 @@ class VanillaChronicleMap, long segmentSize() { long ss = SEGMENT_HEADER - + align64(sizeOfMultiMap() + sizeOfMultiMapBitSet()) * multiMapsPerSegment() + + (CACHE_LINES.align(sizeOfMultiMap() + sizeOfMultiMapBitSet(), BYTES) + * multiMapsPerSegment()) + numberOfBitSets() * sizeOfBitSets() // the free list and 0+ dirty lists. + sizeOfEntriesInSegment(); if ((ss & 63L) != 0) @@ -291,7 +283,7 @@ class VanillaChronicleMap, } private long sizeOfEntriesInSegment() { - return align64(entriesPerSegment * entrySize); + return CACHE_LINES.align(entriesPerSegment * entrySize, BYTES); } @Override @@ -559,9 +551,12 @@ class VanillaChronicleMap, long start = bytes.startAddr() + SEGMENT_HEADER; createHashLookups(start); - start += align64(sizeOfMultiMap() + sizeOfMultiMapBitSet()) * multiMapsPerSegment(); + start += CACHE_LINES.align(sizeOfMultiMap() + sizeOfMultiMapBitSet(), BYTES) + * multiMapsPerSegment(); final NativeBytes bsBytes = new NativeBytes(ms.objectSerializer(), - start, start + align8(align8(entriesPerSegment) / 8L), null); + start, + start + LONGS.align(BYTES.alignAndConvert(entriesPerSegment, BITS), BYTES), + null); freeList = new SingleThreadedDirectBitSet(bsBytes); start += numberOfBitSets() * sizeOfBitSets(); entriesOffset = start - bytes.startAddr();