# HG changeset patch # User tatsuki # Date 1426833353 -32400 # Node ID 67d4c68578cf30ddf608727c9c5a16d1782e289e # Parent 2e6ca84686da6bcad0f05037225c7b1d46cbade8 add Jungle benchMark diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeListWriter.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeListWriter.java Tue Mar 17 14:08:40 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeListWriter.java Fri Mar 20 15:35:53 2015 +0900 @@ -2,5 +2,5 @@ public interface ChangeListWriter { - public Result write(ChangeList operations); + public Result write(ChangeList operations); } diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java Tue Mar 17 14:08:40 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; - -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; - - -public class AtomicReservableReference -{ - public static void main(String _args[]) - { - String hoge = "hoge"; - String fuga = "fuga"; - AtomicReservableReference arr = new AtomicReservableReference(hoge); - AtomicReservableReference.Reservation r1 = arr.makeReservation(hoge,fuga); - //AtomicReservableReference.Reservation r2 = arr.makeReservation(hoge,fuga); - - System.out.println(arr.get()); - r1.confirm(); - System.out.println(arr.get()); - } - - private AtomicReference reservation; - private AtomicBoolean flagReservation; - - public AtomicReservableReference(V _ref) - { - reservation = new AtomicReference(new Reservation(_ref,null,true)); - flagReservation = new AtomicBoolean(false); - } - - public Reservation makeReservation(V _expect,V _update) - { - if(flagReservation.compareAndSet(false,true)){ - V value = get(); - if(value == _expect){ - Reservation expect = reservation.get(); - return new Reservation(_update,expect,false); - } - flagReservation.set(false); - } - - return null; - } - - public void set(V _value) - { - reservation.set(new Reservation(_value,null,true)); - } - - public Reservation getReservation(){ - return reservation.get(); - } - - public V get() - { - Reservation r = reservation.get(); - return r.get(); - } - - - public class Reservation - { - public final Reservation expect; - public final AtomicReference ref; - public final AtomicBoolean flagConfirmed; - - public Reservation(V _object,Reservation _expect,boolean _confirmed) - { - expect = _expect; - ref = new AtomicReference(_object); - flagConfirmed = new AtomicBoolean(_confirmed); - } - - public void set(V object){ - ref.set(object); - } - - public V get(){ - return ref.get(); - } - - - public void confirm() - { - if(flagConfirmed.compareAndSet(false,true)){ - if(reservation.compareAndSet(expect,this) == false){ - throw new IllegalStateException("foo!"); - } - flagReservation.set(false); - } - } - - public void cancel() - { - if(flagConfirmed.compareAndSet(false,true)){ - flagReservation.set(true); - } - } - } -} diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Tue Mar 17 14:08:40 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Fri Mar 20 15:35:53 2015 +0900 @@ -55,19 +55,19 @@ } }; - System.out.println("transaction"); - InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true); - traverser.createIndex(); - TreeMap>> index = traverser.getIndex(); - ParentIndex parentIndex = traverser.getParentIndex(); - TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,index,parentIndex.getParentIndex()); + + InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true); + traverser.createIndex(); + TreeMap>> index = traverser.getIndex(); + ParentIndex parentIndex = traverser.getParentIndex(); + TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,index,parentIndex.getParentIndex()); if (repository.compareAndSet(newTreeContext.prev(),newTreeContext)) { TransactionManager txManager = new DefaultTransactionManager(writer, newTreeContext, repository, uuid); return DefaultEither.newB(txManager); } - return DefaultEither.newA((Error) new DefaultError()); + return DefaultEither.newA((Error) new DefaultError()); } @Override diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java Tue Mar 17 14:08:40 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; - -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; - -public interface TreeContext -{ - public ChangeSet getChangeSet(); - public TreeNode getTreeNode(); -} diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexManager.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexManager.java Tue Mar 17 14:08:40 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index; - - - -import fj.data.TreeMap; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultChangeSet; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; - -public class IndexManager { - - AtomicReservableReference.Reservation reservation; - - public IndexManager(AtomicReservableReference.Reservation reservation){ - this.reservation = reservation; - } - - public void commit(TreeMap>> index, ParentIndex parentIndex){ - TreeContext tc = reservation.get(); - ChangeSet cs = tc.getChangeSet(); - TreeNode root = cs.getRoot(); - ChangeSet prev = cs.prev(); - ChangeList cl = cs.getChangeList(); - String uuid = cs.uuid(); - String treeName = cs.getTreeName(); - long revision = cs.revision(); - DefaultChangeSet newCs = new DefaultChangeSet(root, prev, cl, uuid, treeName, revision, index, parentIndex.getParentIndex()); - DefaultTreeContext newTs = new DefaultTreeContext(root, newCs); - reservation.set(newTs); - } - -} diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/JungleBenchMark.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/JungleBenchMark.java Fri Mar 20 15:35:53 2015 +0900 @@ -0,0 +1,111 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.test; + +import fj.Ord; +import fj.data.TreeMap; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.*; +import java.nio.ByteBuffer; +import java.util.Random; + +/** + * Created by e115731 on 15/03/20. + */ +public class JungleBenchMark { + public static void main(String[] args) throws InterruptedException, IOException, ParserConfigurationException, SAXException { + + + if (args.length == 0) { + System.out.println("args read or find"); + System.exit(0); + } + + Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser())); + JungleTree tree = jungle.createNewTree("Person"); + JungleTreeEditor editor = tree.getTreeEditor(); + JungleTreeEditor newEditor = createTree(0,new DefaultNodePath(),editor); + if (newEditor.success().isA()) { + System.out.println("success faild"); + System.exit(1); + } + + Runtime rt = Runtime.getRuntime(); + int cpuNum = rt.availableProcessors(); + + + File file = new File("./time/JungleTree" + args[0] + "Time"); + + PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); + + JungleBenchMarkThread readThread[] = null; + + for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) { + readThread = new JungleBenchMarkThread[THREAD_COUNT]; + + if (args[0].equals("read")) { + for (int count = 0; THREAD_COUNT > count; count++) { + readThread[count] = new readTreeAttributeThread(tree); + } + } else if (args[0].equals("find")) { + for (int count = 0; THREAD_COUNT > count; count++) { + readThread[count] = new findTreeAttributeThread(tree); + } + } else { + System.out.println("not allow args"); + System.exit(0); + } + + for (int count = 0; THREAD_COUNT > count; count++) { + readThread[count].start(); + } + + System.out.println("StartThread"); + + Thread.sleep(1000); + long readCount = 0; + + for (int count = 0; THREAD_COUNT > count; count++) { + readCount = readCount + readThread[count].getFindCount(); + readThread[count].set(false); + } + + pw.println(THREAD_COUNT + " " + readCount); + System.out.println(THREAD_COUNT + "readCount = " + readCount); + } + + pw.close(); + } + + static Integer nodeNum = 0; + public static JungleTreeEditor createTree(int deep, NodePath path, JungleTreeEditor editor) { + + Random rnd = new Random(); + String value1 = String.valueOf(nodeNum); + nodeNum ++; + String value2 = String.valueOf(nodeNum); + nodeNum ++; + + if (value1.equals("500")) + System.out.println("aaa"); + editor = editor.addNewChildAt(path, 0).b(); + editor = editor.putAttribute(path.add(0), "key", ByteBuffer.wrap(value1.getBytes())).b(); + editor = editor.addNewChildAt(path, 1).b(); + editor = editor.putAttribute(path.add(1), "key", ByteBuffer.wrap(value2.getBytes())).b(); + deep++; + + if (deep < 10) { + editor = createTree(deep, path.add(0), editor); + editor = createTree(deep, path.add(1), editor); + } + return editor; + } +} diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/findTreeAttributeThread.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/findTreeAttributeThread.java Fri Mar 20 15:35:53 2015 +0900 @@ -0,0 +1,55 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.test; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; + +import java.util.Iterator; + +/** + * Created by e115731 on 15/03/20. + */ +public class findTreeAttributeThread extends JungleBenchMarkThread { + + JungleTree tree; + InterfaceTraverser traverser; + private long findCount; + + boolean loop = true; + + public findTreeAttributeThread(JungleTree tree) { + this.tree = tree; + this.traverser = tree.getTraverser(false); + this.findCount = 0; + } + + @Override + public long getFindCount() { + System.out.println("thread count = " + findCount); + return findCount; + } + + public void set(boolean loop) { + this.loop = loop; + } + + @Override + public void run() { + while (loop) { + + Iterator it = traverser.find((TreeNode node) -> { + String nodeNum = node.getAttributes().getString("key"); + if (nodeNum == null) + return false; + if (nodeNum.equals("8")) + return true; + return false; + }, "key","8"); + + if (it.hasNext()) + findCount++; + else + System.out.println("faild"); + } + } +} diff -r 2e6ca84686da -r 67d4c68578cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/readTreeAttributeThread.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/readTreeAttributeThread.java Tue Mar 17 14:08:40 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/readTreeAttributeThread.java Fri Mar 20 15:35:53 2015 +0900 @@ -36,9 +36,9 @@ findCount++; String attribute = root.getAttributes().getString("test"); if (attribute.equals("test")) - findCount++; - else - System.out.println("faild"); + findCount++; + else + System.out.println("faild"); } } }