diff --git a/ReadMe.adoc b/ReadMe.adoc index 58802f6c8..55233e930 100644 --- a/ReadMe.adoc +++ b/ReadMe.adoc @@ -7,6 +7,7 @@ image::docs\images\Map_line.png[width=20%] [#image-maven] [caption="", link=https://maven-badges.herokuapp.com/maven-central/net.openhft/chronicle-map] image::https://maven-badges.herokuapp.com/maven-central/net.openhft/chronicle-map/badge.svg[] +image:https://javadoc.io/badge2/net.openhft/chronicle-map/javadoc.svg[link="https://www.javadoc.io/doc/net.openhft/chronicle-map/latest/index.html"] == Overview diff --git a/pom.xml b/pom.xml index d3cd8fb0d..c574961f7 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ com.thoughtworks.xstream xstream - 1.4.12 + 1.4.14 @@ -282,6 +282,7 @@ org.apache.maven.plugins maven-surefire-plugin + 3.0.0-M4 false once diff --git a/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.java b/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.java index 2d839555f..f7ffae588 100644 --- a/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.java +++ b/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.java @@ -71,8 +71,8 @@ public class MapJLBHTest implements JLBHTask { byteable.bytesStore(NativeBytesStore.nativeStore(capacity), 0, capacity); try { - write = ChronicleMapBuilder.of(Long.class, IFacade.class).constantValueSizeBySample(datum).entries(1_100_000).createOrRecoverPersistedTo(mapFile); - read = ChronicleMapBuilder.of(Long.class, IFacade.class).constantValueSizeBySample(datum).entries(1_100_000).createOrRecoverPersistedTo(mapFile); + write = ChronicleMapBuilder.of(Long.class, IFacade.class).constantValueSizeBySample(datum).entries(1_100_000).createPersistedTo(mapFile); + read = ChronicleMapBuilder.of(Long.class, IFacade.class).constantValueSizeBySample(datum).entries(1_100_000).createPersistedTo(mapFile); } catch (IOException ex) { throw Jvm.rethrow(ex); } diff --git a/src/test/java/net/openhft/chronicle/map/perf/NonPersistedMapJLBHTest.java b/src/test/java/net/openhft/chronicle/map/perf/NonPersistedMapJLBHTest.java new file mode 100644 index 000000000..65b4e6c01 --- /dev/null +++ b/src/test/java/net/openhft/chronicle/map/perf/NonPersistedMapJLBHTest.java @@ -0,0 +1,785 @@ +/* + * Copyright 2014-2020 chronicle.software + * + * http://chronicle.software + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package net.openhft.chronicle.map.perf; + +import net.openhft.chronicle.bytes.Byteable; +import net.openhft.chronicle.bytes.NativeBytesStore; +import net.openhft.chronicle.core.Jvm; +import net.openhft.chronicle.core.io.IOTools; +import net.openhft.chronicle.core.jlbh.JLBH; +import net.openhft.chronicle.core.jlbh.JLBHOptions; +import net.openhft.chronicle.core.jlbh.JLBHTask; +import net.openhft.chronicle.core.util.NanoSampler; +import net.openhft.chronicle.map.ChronicleMap; +import net.openhft.chronicle.map.ChronicleMapBuilder; +import net.openhft.chronicle.values.Array; +import net.openhft.chronicle.values.MaxUtf8Length; +import net.openhft.chronicle.values.Values; + +import java.io.File; +import java.io.IOException; + +public class NonPersistedMapJLBHTest implements JLBHTask { + private static final int WARM_UP_ITERATIONS = 40_000; + private ChronicleMap read; + private ChronicleMap write; + private NanoSampler readSampler; + private NanoSampler writeSampler; + private NanoSampler e2eSampler; + private File mapFile = new File("perfmap/map.cm3"); + private long counter = -WARM_UP_ITERATIONS; + private IFacade datum = Values.newNativeReference(IFacade.class); + + public static void main(String[] args) { + //Create the JLBH options you require for the benchmark + JLBHOptions options = new JLBHOptions() + .warmUpIterations(WARM_UP_ITERATIONS) + .iterations(500_000) + .throughput(40_000) + .runs(3) + .recordOSJitter(false) + .accountForCoordinatedOmmission(false) + .jlbhTask(new NonPersistedMapJLBHTest()); + new JLBH(options).start(); + } + + @Override + public void init(JLBH jlbh) { + IOTools.deleteDirWithFiles("perfmap", 10); + mapFile.getParentFile().mkdirs(); + readSampler = jlbh.addProbe("Read"); + writeSampler = jlbh.addProbe("Write"); + e2eSampler = jlbh; + + Byteable byteable = (Byteable) datum; + long capacity = byteable.maxSize(); + byteable.bytesStore(NativeBytesStore.nativeStore(capacity), 0, capacity); + + write = read = ChronicleMapBuilder.of(Long.class, IFacade.class).constantValueSizeBySample(datum).entries(1_100_000).create(); + } + + @Override + public void run(long startTimeNS) { + long runNo = counter++; + datum.setValue10(startTimeNS); + long startWrite = System.nanoTime(); + write.put(runNo, datum); + long endWrite = System.nanoTime(); + long writeTime = endWrite - startWrite; + writeSampler.sampleNanos(writeTime); + + IFacade dataRead = read.getUsing(runNo - 1, datum); + long nanos = System.nanoTime(); + if (dataRead != null) { + readSampler.sampleNanos(nanos - endWrite); + } + e2eSampler.sampleNanos(nanos - startTimeNS); + } + + @Override + public void warmedUp() { + counter = 0; + } + + @Override + public void complete() { + write.close(); + read.close(); + } + + //IFacade (at the bottom) is the façade we need tested + + interface IFacadeBase { + short getValue0(); + + void setValue0(short value); + + byte getValue1(); + + void setValue1(byte value); + + byte getValue2(); + + void setValue2(byte value); + + int getValue3(); + + void setValue3(int value); + + short getValue4(); + + void setValue4(short value); + + boolean getValue5(); + + void setValue5(boolean value); + + boolean getValue6(); + + void setValue6(boolean value); + + short getValue7(); + + void setValue7(short value); + + short getValue8(); + + void setValue8(short value); + + long getValue9(); + + void setValue9(long value); + + long getValue10(); + + void setValue10(long value); + + long getValue11(); + + void setValue11(long value); + + long getValue12(); + + void setValue12(long value); + + long getValue13(); + + void setValue13(long value); + + long getValue14(); + + void setValue14(long value); + + long getValue15(); + + void setValue15(long value); + + short getValue16(); + + void setValue16(short value); + + short getValue17(); + + void setValue17(short value); + + short getValue18(); + + void setValue18(short value); + } + + interface IFacadeSon extends IFacadeBase { + long getValue19(); + + void setValue19(long value); + + int getValue20(); + + void setValue20(int value); + + int getValue21(); + + void setValue21(int value); + + double getValue22(); + + void setValue22(double value); + + String getValue23(); + + void setValue23(@MaxUtf8Length(10) String value); + + int getValue24(); + + void setValue24(int value); + + double getValue25(); + + void setValue25(double value); + + byte getValue26(); + + void setValue26(byte value); + + double getValue27(); + + void setValue27(double value); + + double getValue28(); + + void setValue28(double value); + + double getValue29(); + + void setValue29(double value); + + double getValue30(); + + void setValue30(double value); + + double getValue31(); + + void setValue31(double value); + + double getValue32(); + + void setValue32(double value); + } + + interface IFacadeDaughter extends IFacadeBase { + long getValue33(); + + void setValue33(long value); + + String getValue34(); + + void setValue34(@MaxUtf8Length(11) String value); + + int getValue35(); + + void setValue35(int value); + + String getValue36(); + + void setValue36(@MaxUtf8Length(11) String value); + + int getValue37(); + + void setValue37(int value); + + long getValue38(); + + void setValue38(long value); + + short getValue39(); + + void setValue39(short value); + + long getValue40(); + + void setValue40(long value); + + String getValue41(); + + void setValue41(@MaxUtf8Length(43) String value); + + long getValue42(); + + void setValue42(long value); + + long getValue43(); + + void setValue43(long value); + + long getValue44(); + + void setValue44(long value); + + long getValue45(); + + void setValue45(long value); + + long getValue46(); + + void setValue46(long value); + + byte getValue47(); + + void setValue47(byte value); + + byte getValue48(); + + void setValue48(byte value); + + double getValue49(); + + void setValue49(double value); + + double getValue50(); + + void setValue50(double value); + + double getValue51(); + + void setValue51(double value); + + byte getValue52(); + + void setValue52(byte value); + + byte getValue53(); + + void setValue53(byte value); + + byte getValue54(); + + void setValue54(byte value); + + byte getValue55(); + + void setValue55(byte value); + + byte getValue56(); + + void setValue56(byte value); + + long getValue57(); + + void setValue57(long value); + + byte getValue58(); + + void setValue58(byte value); + + double getValue59(); + + void setValue59(double value); + + double getValue60(); + + void setValue60(double value); + + double getValue61(); + + void setValue61(double value); + + double getValue62(); + + void setValue62(double value); + + double getValue63(); + + void setValue63(double value); + + long getValue64(); + + void setValue64(long value); + + long getValue65(); + + void setValue65(long value); + + double getValue66(); + + void setValue66(double value); + + double getValue67(); + + void setValue67(double value); + + short getValue68(); + + void setValue68(short value); + + String getValue69(); + + void setValue69(@MaxUtf8Length(101) String value); + + String getValue70(); + + void setValue70(@MaxUtf8Length(17) String value); + + boolean getValue71(); + + void setValue71(boolean value); + + boolean getValue72(); + + void setValue72(boolean value); + + String getValue73(); + + void setValue73(@MaxUtf8Length(11) String value); + + String getValue74(); + + void setValue74(@MaxUtf8Length(9) String value); + + byte getValue75(); + + void setValue75(byte value); + + int getValue76(); + + void setValue76(int value); + + int getValue77(); + + void setValue77(int value); + + String getValue78(); + + void setValue78(@MaxUtf8Length(3) String value); + + int getValue79(); + + void setValue79(int value); + + double getValue80(); + + void setValue80(double value); + + byte getValue81(); + + void setValue81(byte value); + + byte getValue82(); + + void setValue82(byte value); + + byte getValue83(); + + void setValue83(byte value); + + byte getValue84(); + + void setValue84(byte value); + + byte getValue85(); + + void setValue85(byte value); + + byte getValue86(); + + void setValue86(byte value); + + byte getValue87(); + + void setValue87(byte value); + + byte getValue88(); + + void setValue88(byte value); + + int getValue89(); + + void setValue89(int value); + + int getValue90(); + + void setValue90(int value); + + int getValue91(); + + void setValue91(int value); + + int getValue92(); + + void setValue92(int value); + + int getValue93(); + + void setValue93(int value); + + int getValue94(); + + void setValue94(int value); + + int getValue95(); + + void setValue95(int value); + + int getValue96(); + + void setValue96(int value); + + int getValue97(); + + void setValue97(int value); + + int getValue98(); + + void setValue98(int value); + + int getValue99(); + + void setValue99(int value); + + int getValue100(); + + void setValue100(int value); + + int getValue101(); + + void setValue101(int value); + + int getValue102(); + + void setValue102(int value); + + int getValue103(); + + void setValue103(int value); + + int getValue104(); + + void setValue104(int value); + + double getValue105(); + + void setValue105(double value); + + double getValue106(); + + void setValue106(double value); + + long getValue107(); + + void setValue107(long value); + + long getValue108(); + + void setValue108(long value); + + long getValue109(); + + void setValue109(long value); + + byte getValue110(); + + void setValue110(byte value); + + byte getValue111(); + + void setValue111(byte value); + + byte getValue112(); + + void setValue112(byte value); + + byte getValue113(); + + void setValue113(byte value); + + byte getValue114(); + + void setValue114(byte value); + + byte getValue115(); + + void setValue115(byte value); + + byte getValue116(); + + void setValue116(byte value); + + byte getValue117(); + + void setValue117(byte value); + + byte getValue118(); + + void setValue118(byte value); + + byte getValue119(); + + void setValue119(byte value); + + byte getValue120(); + + void setValue120(byte value); + + byte getValue121(); + + void setValue121(byte value); + + byte getValue122(); + + void setValue122(byte value); + + byte getValue123(); + + void setValue123(byte value); + + byte getValue124(); + + void setValue124(byte value); + + byte getValue125(); + + void setValue125(byte value); + + int getValue126(); + + void setValue126(int value); + + int getValue127(); + + void setValue127(int value); + + int getValue128(); + + void setValue128(int value); + + int getValue129(); + + void setValue129(int value); + + int getValue130(); + + void setValue130(int value); + + int getValue131(); + + void setValue131(int value); + + int getValue132(); + + void setValue132(int value); + + int getValue133(); + + void setValue133(int value); + + int getValue134(); + + void setValue134(int value); + + int getValue135(); + + void setValue135(int value); + + int getValue136(); + + void setValue136(int value); + + int getValue137(); + + void setValue137(int value); + + int getValue138(); + + void setValue138(int value); + + int getValue139(); + + void setValue139(int value); + + int getValue140(); + + void setValue140(int value); + + int getValue141(); + + void setValue141(int value); + + double getValue142(); + + void setValue142(double value); + + double getValue143(); + + void setValue143(double value); + + byte getValue144(); + + void setValue144(byte value); + + String getValue145(); + + void setValue145(@MaxUtf8Length(3) String value); + + short getValue146(); + + void setValue146(short value); + + byte getValue147(); + + void setValue147(byte value); + + byte getValue148(); + + void setValue148(byte value); + + int getValue149(); + + void setValue149(int value); + + short getValue150(); + + void setValue150(short value); + + boolean getValue151(); + + void setValue151(boolean value); + + boolean getValue152(); + + void setValue152(boolean value); + + short getValue153(); + + void setValue153(short value); + + short getValue154(); + + void setValue154(short value); + + long getValue155(); + + void setValue155(long value); + + long getValue156(); + + void setValue156(long value); + + long getValue157(); + + void setValue157(long value); + + long getValue158(); + + void setValue158(long value); + + long getValue159(); + + void setValue159(long value); + + long getValue160(); + + void setValue160(long value); + + long getValue161(); + + void setValue161(long value); + + short getValue162(); + + void setValue162(short value); + + short getValue163(); + + void setValue163(short value); + + short getValue164(); + + void setValue164(short value); + + } + + interface IFacade extends IFacadeBase { + @Array(length = 3) + void setDaughterAt(int idx, IFacadeDaughter daughter); + + IFacadeDaughter getDaughterAt(int idx); + + @Array(length = 3) + void setSonAt(int idx, IFacadeSon son); + + IFacadeSon getSonAt(int idx); + } +}