The next round of benchmark test updates. - Added a method to monitor cpu and io with a nice csv log. - Updated the benchmark partitioner to use less file handlers. - Buffer now is optional. - Includes test to find out parsing and file read efficiency.
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/2d6da4e2 Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/2d6da4e2 Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/2d6da4e2 Branch: refs/heads/site Commit: 2d6da4e23830864b5fbd449bbad0feda3c85ad66 Parents: 1b7d3aa Author: Preston Carman <[email protected]> Authored: Wed Jul 16 14:54:37 2014 -0700 Committer: Preston Carman <[email protected]> Committed: Wed Jul 16 14:54:37 2014 -0700 ---------------------------------------------------------------------- .../noaa-ghcn-daily/queries/no_result.xq | 24 ++++ .../noaa-ghcn-daily/scripts/weather_example.xml | 34 ------ .../scripts/weather_example_cluster.xml | 56 --------- .../java/org/apache/vxquery/cli/VXQuery.java | 4 +- .../org/apache/vxquery/xmlparser/XMLParser.java | 18 ++- vxquery-xtest/pom.xml | 22 ++++ .../vxquery/xtest/util/DiskPerformance.java | 39 +++--- .../xtest/util/tests/AbstractDiskTest.java | 44 ++++--- .../tests/BufferedParsedCharacterStream.java | 2 +- .../tests/BufferedReaderBufferedStream.java | 9 +- .../xtest/util/tests/BufferedReaderStream.java | 9 +- .../xtest/util/tests/BufferedStream.java | 9 +- .../vxquery/xtest/util/tests/IDiskTest.java | 4 +- .../util/tests/ParsedBufferedByteStream.java | 2 +- .../tests/ParsedBufferedCharacterStream.java | 2 +- .../xtest/util/tests/ParsedByteStream.java | 2 +- .../xtest/util/tests/ParsedCharacterStream.java | 2 +- .../xtest/util/tests/ReaderBufferedStream.java | 9 +- .../vxquery/xtest/util/tests/ReaderStream.java | 9 +- .../apache/vxquery/xtest/util/tests/Stream.java | 9 +- .../resources/scripts/build_thread_summary.py | 121 +++++++++++++++++++ .../main/resources/scripts/clear_file_cache.sh | 18 +++ .../main/resources/scripts/run_thread_test.sh | 67 ++++++++++ 23 files changed, 358 insertions(+), 157 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/queries/no_result.xq ---------------------------------------------------------------------- diff --git a/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/queries/no_result.xq b/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/queries/no_result.xq new file mode 100644 index 0000000..c1363e3 --- /dev/null +++ b/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/queries/no_result.xq @@ -0,0 +1,24 @@ +(: Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you 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. :) + +(: +VXQuery used to only parse all files with out producing results. +:) +let $sensor_collection := "/tmp/1.0_partition_ghcnd_all_xml/sensors" +for $r in collection($sensor_collection)/dataCollection/data +where fn:false() +return $r http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example.xml ---------------------------------------------------------------------- diff --git a/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example.xml b/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example.xml deleted file mode 100644 index 94c1440..0000000 --- a/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example.xml +++ /dev/null @@ -1,34 +0,0 @@ -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You 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. ---> -<data xmlns="data"> - <name>Local Example</name> - <save_path>/data</save_path> - <package>ghcnd_all</package> - <node> - <id>localhost</id> - <cluster_ip>127.0.0.1</cluster_ip> - </node> - <dataset> - <name>tiny-example</name> - <test>local_speed_up</test> - <save_path>/data</save_path> - <partitions_per_path>1</partitions_per_path> - <partitions_per_path>2</partitions_per_path> - <partitions_per_path>4</partitions_per_path> - <partitions_per_path>8</partitions_per_path> - </dataset> -</data> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example_cluster.xml ---------------------------------------------------------------------- diff --git a/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example_cluster.xml b/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example_cluster.xml deleted file mode 100644 index 6078627..0000000 --- a/vxquery-benchmark/src/main/resources/noaa-ghcn-daily/scripts/weather_example_cluster.xml +++ /dev/null @@ -1,56 +0,0 @@ -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You 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. ---> -<data xmlns="data"> - <name>Cluster Example</name> - <save_path>/data</save_path> - <package>ghcnd_all</package> - <node> - <id>machine1</id> - <cluster_ip>127.0.0.1</cluster_ip> - </node> - <node> - <id>machine2</id> - <cluster_ip>127.0.0.2</cluster_ip> - </node> - <node> - <id>machine3</id> - <cluster_ip>127.0.0.3</cluster_ip> - </node> - <node> - <id>machine4</id> - <cluster_ip>127.0.0.4</cluster_ip> - </node> - <node> - <id>machine5</id> - <cluster_ip>127.0.0.5</cluster_ip> - </node> - <dataset> - <name>tiny-1drive</name> - <test>speed_up</test> - <test>batch_scale_out</test> - <save_path>/data</save_path> - <partitions_per_path>1</partitions_per_path> - </dataset> - <dataset> - <name>small-2drives</name> - <test>speed_up</test> - <test>batch_scale_out</test> - <save_path>/data</save_path> - <save_path>/data2</save_path> - <partitions_per_path>1</partitions_per_path> - </dataset> -</data> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java ---------------------------------------------------------------------- diff --git a/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java b/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java index 61226e5..a0a5c5a 100644 --- a/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java +++ b/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java @@ -448,8 +448,8 @@ public class VXQuery { @Option(name = "-frame-size", usage = "Frame size in bytes. (default 65536)") public int frameSize = 65536; - @Option(name = "-buffer-size", usage = "Read file buffer size in bytes. (default 512)") - public int bufferSize = 512; + @Option(name = "-buffer-size", usage = "Disk read buffer size in bytes.") + public int bufferSize = -1; @Option(name = "-O", usage = "Optimization Level. Default: Full Optimization") private int optimizationLevel = Integer.MAX_VALUE; http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java index 1aea1e6..1d979b5 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java @@ -44,7 +44,7 @@ public class XMLParser { final SAXContentHandler handler; final InputSource in; final String nodeId; - final int buffer_size; + final int bufferSize; public XMLParser(boolean attachTypes, ITreeNodeIdProvider idProvider, String nodeId) throws HyracksDataException { this(attachTypes, idProvider, nodeId, null, null, null, null); @@ -53,12 +53,10 @@ public class XMLParser { public XMLParser(boolean attachTypes, ITreeNodeIdProvider idProvider, String nodeId, ByteBuffer frame, FrameTupleAppender appender, List<Integer> childSeq, StaticContext staticContext) throws HyracksDataException { - buffer_size = Integer.parseInt(System.getProperty("vxquery.buffer_size")); + bufferSize = Integer.parseInt(System.getProperty("vxquery.buffer_size")); this.nodeId = nodeId; try { parser = XMLReaderFactory.createXMLReader(); - - System.out.println("XMLReader buffer:" +parser.getProperty("http://apache.org/xml/properties/input-buffer-size")); if (frame == null || appender == null) { handler = new SAXContentHandler(attachTypes, idProvider); } else { @@ -78,7 +76,11 @@ public class XMLParser { public void parseDocument(File file, ArrayBackedValueStorage abvs) throws HyracksDataException { try { - in.setCharacterStream(new BufferedReader(new InputStreamReader(new FileInputStream(file)), buffer_size)); + if (bufferSize > 0) { + in.setCharacterStream(new BufferedReader(new InputStreamReader(new FileInputStream(file)), bufferSize)); + } else { + in.setCharacterStream(new InputStreamReader(new FileInputStream(file))); + } parser.parse(in); handler.writeDocument(abvs); } catch (FileNotFoundException e) { @@ -99,7 +101,11 @@ public class XMLParser { public void parseElements(File file, IFrameWriter writer, FrameTupleAccessor fta, int tupleIndex) throws HyracksDataException { try { - in.setCharacterStream(new BufferedReader(new InputStreamReader(new FileInputStream(file)), buffer_size)); + if (bufferSize > 0) { + in.setCharacterStream(new BufferedReader(new InputStreamReader(new FileInputStream(file)), bufferSize)); + } else { + in.setCharacterStream(new InputStreamReader(new FileInputStream(file))); + } handler.setupElementWriter(writer, fta, tupleIndex); parser.parse(in); } catch (FileNotFoundException e) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/pom.xml ---------------------------------------------------------------------- diff --git a/vxquery-xtest/pom.xml b/vxquery-xtest/pom.xml index ee79b2a..320950b 100644 --- a/vxquery-xtest/pom.xml +++ b/vxquery-xtest/pom.xml @@ -65,6 +65,28 @@ </execution> </executions> </plugin> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <version>2.5</version> + <executions> + <execution> + <id>copy-scripts</id> + <!-- here the phase you need --> + <phase>package</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>target/appassembler/bin</outputDirectory> + <resources> + <resource> + <directory>src/main/resources/scripts</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/DiskPerformance.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/DiskPerformance.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/DiskPerformance.java index 913d22e..dd43de7 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/DiskPerformance.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/DiskPerformance.java @@ -99,11 +99,11 @@ public class DiskPerformance { testFilesIt = cTestFiles.iterator(); } - public String getNextFile() { + public File getNextFile() { if (!testFilesIt.hasNext()) { testFilesIt = cTestFiles.iterator(); } - return testFilesIt.next().getAbsolutePath(); + return testFilesIt.next(); } private byte[] createUTF8String(String str) { @@ -145,19 +145,21 @@ public class DiskPerformance { dp.setDirectory(args[0]); ArrayList<Class> tests = new ArrayList<Class>(); - // Character Streams + // Parsed Character Streams tests.add(ParsedBufferedCharacterStream.class); - tests.add(BufferedParsedCharacterStream.class); - tests.add(ParsedCharacterStream.class); - tests.add(BufferedReaderBufferedStream.class); - tests.add(BufferedReaderStream.class); - tests.add(ReaderBufferedStream.class); - tests.add(ReaderStream.class); + // tests.add(BufferedParsedCharacterStream.class); + // tests.add(ParsedCharacterStream.class); + // Parsed Byte Streams + // tests.add(ParsedBufferedByteStream.class); + // tests.add(ParsedByteStream.class); + // Character Streams + // tests.add(BufferedReaderBufferedStream.class); + // tests.add(BufferedReaderStream.class); + // tests.add(ReaderBufferedStream.class); + // tests.add(ReaderStream.class); // Byte Streams - tests.add(ParsedBufferedByteStream.class); - tests.add(ParsedByteStream.class); - tests.add(BufferedStream.class); - tests.add(Stream.class); + // tests.add(BufferedStream.class); + // tests.add(Stream.class); System.out.println("------"); System.out.println("Started Test Group: " + new Date()); @@ -173,7 +175,7 @@ public class DiskPerformance { runThreadTest(testClass, dp, threads, bufferSize); } else { IDiskTest test = testClass.newInstance(); - test.setFilename(dp.getNextFile()); + test.setFile(dp.getNextFile()); test.setBufferSize(bufferSize); test.setParser(dp.parser); test.run(); @@ -185,20 +187,19 @@ public class DiskPerformance { } } - System.out.println("------"); } } - static <T> void runThreadTest(Class<T> testType, DiskPerformance dp, int threads, int bufferSize) throws InstantiationException, - IllegalAccessException { + static <T> void runThreadTest(Class<T> testType, DiskPerformance dp, int threads, int bufferSize) + throws InstantiationException, IllegalAccessException { ExecutorService es = Executors.newCachedThreadPool(); ArrayList<IDiskTest> threadTests = new ArrayList<IDiskTest>(); for (int i = 0; i < threads; ++i) { threadTests.add((IDiskTest) testType.newInstance()); } for (IDiskTest test : threadTests) { - test.setFilename(dp.getNextFile()); + test.setFile(dp.getNextFile()); test.setBufferSize(bufferSize); test.setParser(dp.getNewParser().first); es.execute((Runnable) test); @@ -209,6 +210,6 @@ public class DiskPerformance { } catch (InterruptedException e) { e.printStackTrace(); } - System.out.println("Completed thread batch: " + new Date()); +// System.out.println("Completed thread batch: " + new Date()); } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/AbstractDiskTest.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/AbstractDiskTest.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/AbstractDiskTest.java index 63d5922..f41a02b 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/AbstractDiskTest.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/AbstractDiskTest.java @@ -14,9 +14,10 @@ */ package org.apache.vxquery.xtest.util.tests; +import java.io.File; import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.lang.management.OperatingSystemMXBean; +import java.net.InetAddress; +import java.net.UnknownHostException; import org.xml.sax.XMLReader; @@ -25,16 +26,12 @@ abstract class AbstractDiskTest implements IDiskTest, Runnable { private int bufferSize; protected XMLReader parser; - public AbstractDiskTest() { + public void setFile(File file) { + this.filename = file.getAbsolutePath(); } - public AbstractDiskTest(String filename, int bufferSize) { - setFilename(filename); - setBufferSize(bufferSize); - } - - public void setFilename(String filename) { - this.filename = filename; + public String getPrintFilename() { + return filename.substring(filename.length() - 20); } public void setBufferSize(int bufferSize) { @@ -50,22 +47,37 @@ abstract class AbstractDiskTest implements IDiskTest, Runnable { } public void run() { - OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); - System.out.printf(filename + "\t" + getMessage() + " - Starting%n"); + long size = -1; + // System.out.printf(getPrintFilename() + "\t" + getMessage() + " - Starting%n"); long start = System.nanoTime(); try { - long checkSum = test(filename, bufferSize); + size = test(filename, bufferSize); } catch (IOException e) { e.printStackTrace(); } long end = System.nanoTime(); + long timeDelta = end - start; + double speed = 0; + if (size > 0) { + speed = (size * 1e3) / timeDelta; + } // System.out.printf("checkSum: %d%n", checkSum); - System.out.printf(filename + "\t" + getMessage() + "%.2f MB/s", 1024 * 1e9 / (end - start)); + // System.out.printf(getPrintFilename() + "\t" + getMessage() + "%.1f ms\t%.2f MB/s\t%.2f MB/s", + // (timeDelta) / 1e6, 1024 * 1024 * 1e6 / (timeDelta), speed); + // CSV output of the results. + try { + System.out.printf("%s,", InetAddress.getLocalHost().getHostName()); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + System.out.printf("%s,%s,%.1f,%.2f", filename, getMessage(), (timeDelta) / 1e6, + 1024 * 1024 * 1e6 / (timeDelta), speed); if (isBuffered() && bufferSize > 0) { - System.out.printf("\t%.1f KB buffer", bufferSize / 1024.0); + System.out.printf(",%.1f", bufferSize / 1024.0); + } else { + System.out.printf(",0"); } System.out.println(); - System.out.printf("%.2f%% load average last minute%n", os.getSystemLoadAverage()); } public boolean isBuffered() { http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedParsedCharacterStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedParsedCharacterStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedParsedCharacterStream.java index 37527ae..8a9ee18 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedParsedCharacterStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedParsedCharacterStream.java @@ -24,7 +24,7 @@ import org.xml.sax.SAXException; public class BufferedParsedCharacterStream extends AbstractDiskTest { @Override public String getMessage() { - return "Buffered Parsed - Character Stream\t"; + return "Buffered Parsed - Character Stream"; } @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderBufferedStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderBufferedStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderBufferedStream.java index c553a3e..d964241 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderBufferedStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderBufferedStream.java @@ -23,7 +23,7 @@ import java.io.InputStreamReader; public class BufferedReaderBufferedStream extends AbstractDiskTest { @Override public String getMessage() { - return "Buffered Reader - Buffered Stream\t"; + return "Buffered Reader - Buffered Stream"; } @Override @@ -36,10 +36,13 @@ public class BufferedReaderBufferedStream extends AbstractDiskTest { f = new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(filename)))); } int b; + long byteCount = 0L; long checkSum = 0L; - while ((b = f.read()) != -1) + while ((b = f.read()) != -1) { checkSum += b; + byteCount++; + } f.close(); - return checkSum; + return byteCount; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderStream.java index 20b9bab..7100025 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedReaderStream.java @@ -22,7 +22,7 @@ import java.io.InputStreamReader; public class BufferedReaderStream extends AbstractDiskTest { @Override public String getMessage() { - return "Buffered Reader - Stream\t\t"; + return "Buffered Reader - Stream"; } @Override @@ -34,10 +34,13 @@ public class BufferedReaderStream extends AbstractDiskTest { f = new BufferedReader(new InputStreamReader(new FileInputStream(filename))); } int b; + long byteCount = 0L; long checkSum = 0L; - while ((b = f.read()) != -1) + while ((b = f.read()) != -1) { checkSum += b; + byteCount++; + } f.close(); - return checkSum; + return byteCount; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedStream.java index 2bf582e..5751307 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/BufferedStream.java @@ -21,7 +21,7 @@ import java.io.IOException; public class BufferedStream extends AbstractDiskTest { @Override public String getMessage() { - return "Buffered Stream\t\t\t\t"; + return "Buffered Stream"; } @Override @@ -33,10 +33,13 @@ public class BufferedStream extends AbstractDiskTest { f = new BufferedInputStream(new FileInputStream(filename)); } int b; + long byteCount = 0L; long checkSum = 0L; - while ((b = f.read()) != -1) + while ((b = f.read()) != -1) { checkSum += b; + byteCount++; + } f.close(); - return checkSum; + return byteCount; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/IDiskTest.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/IDiskTest.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/IDiskTest.java index 09ff240..4c56710 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/IDiskTest.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/IDiskTest.java @@ -1,11 +1,13 @@ package org.apache.vxquery.xtest.util.tests; +import java.io.File; + import org.xml.sax.XMLReader; public interface IDiskTest { public void setBufferSize(int bufferSize); - public void setFilename(String absolutePath); + public void setFile(File file); public void setParser(XMLReader parser); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedByteStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedByteStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedByteStream.java index 5ae2a34..9fc93c4 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedByteStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedByteStream.java @@ -24,7 +24,7 @@ import org.xml.sax.SAXException; public class ParsedBufferedByteStream extends AbstractDiskTest { @Override public String getMessage() { - return "Parsed - Buffered Byte Stream\t\t"; + return "Parsed - Buffered Byte Stream"; } @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedCharacterStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedCharacterStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedCharacterStream.java index c2d21d4..1cacee6 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedCharacterStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedBufferedCharacterStream.java @@ -25,7 +25,7 @@ import org.xml.sax.SAXException; public class ParsedBufferedCharacterStream extends AbstractDiskTest implements IDiskTest { @Override public String getMessage() { - return "Parsed - Buffered Character Stream\t"; + return "Parsed - Buffered Character Stream"; } @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedByteStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedByteStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedByteStream.java index 2c8b85d..783424a 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedByteStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedByteStream.java @@ -23,7 +23,7 @@ import org.xml.sax.SAXException; public class ParsedByteStream extends AbstractDiskTest { @Override public String getMessage() { - return "Parsed - Byte Stream\t\t\t"; + return "Parsed - Byte Stream"; } @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedCharacterStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedCharacterStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedCharacterStream.java index 3dc9ed4..0b292a3 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedCharacterStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ParsedCharacterStream.java @@ -24,7 +24,7 @@ import org.xml.sax.SAXException; public class ParsedCharacterStream extends AbstractDiskTest { @Override public String getMessage() { - return "Parsed - Character Stream\t\t"; + return "Parsed - Character Stream"; } @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderBufferedStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderBufferedStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderBufferedStream.java index 3d87f96..721dd3a 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderBufferedStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderBufferedStream.java @@ -22,7 +22,7 @@ import java.io.InputStreamReader; public class ReaderBufferedStream extends AbstractDiskTest { @Override public String getMessage() { - return "Reader - Buffered Stream\t\t"; + return "Reader - Buffered Stream"; } @Override @@ -34,10 +34,13 @@ public class ReaderBufferedStream extends AbstractDiskTest { f = new InputStreamReader(new BufferedInputStream(new FileInputStream(filename))); } int b; + long byteCount = 0L; long checkSum = 0L; - while ((b = f.read()) != -1) + while ((b = f.read()) != -1) { checkSum += b; + byteCount++; + } f.close(); - return checkSum; + return byteCount; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderStream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderStream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderStream.java index 2a01275..4fdbdf9 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderStream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/ReaderStream.java @@ -21,7 +21,7 @@ import java.io.InputStreamReader; public class ReaderStream extends AbstractDiskTest { @Override public String getMessage() { - return "Reader - Stream\t\t\t\t"; + return "Reader - Stream"; } @Override @@ -33,10 +33,13 @@ public class ReaderStream extends AbstractDiskTest { public long test(String filename, int bufferSize) throws IOException { InputStreamReader f = new InputStreamReader(new FileInputStream(filename)); int b; + long byteCount = 0L; long checkSum = 0L; - while ((b = f.read()) != -1) + while ((b = f.read()) != -1) { checkSum += b; + byteCount++; + } f.close(); - return checkSum; + return byteCount; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/Stream.java ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/Stream.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/Stream.java index 96e7184..7890b2a 100644 --- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/Stream.java +++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/util/tests/Stream.java @@ -20,7 +20,7 @@ import java.io.IOException; public class Stream extends AbstractDiskTest { @Override public String getMessage() { - return "Stream\t\t\t\t\t\t"; + return "Stream"; } @Override @@ -32,10 +32,13 @@ public class Stream extends AbstractDiskTest { public long test(String filename, int bufferSize) throws IOException { FileInputStream f = new FileInputStream(filename); int b; + long byteCount = 0L; long checkSum = 0L; - while ((b = f.read()) != -1) + while ((b = f.read()) != -1) { checkSum += b; + byteCount++; + } f.close(); - return checkSum; + return byteCount; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/resources/scripts/build_thread_summary.py ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/resources/scripts/build_thread_summary.py b/vxquery-xtest/src/main/resources/scripts/build_thread_summary.py new file mode 100644 index 0000000..835b2d2 --- /dev/null +++ b/vxquery-xtest/src/main/resources/scripts/build_thread_summary.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +import fnmatch +import getopt +import glob +import os +import sys +import csv + +SEARCH_STRING = 'Average execution time:' + +def find_files(directory, pattern): + for root, dirs, files in os.walk(directory): + for basename in files: + if fnmatch.fnmatch(basename, pattern): + yield (root, basename) + + +def main(argv): + ''' Same as bash: find $FOLDER -type f -name "*.xml" -exec basename {} \; > list_xml.csv + ''' + log_folder = "" + save_file = "" + + fields = ("usr", "wai", "read") + fields_indexes = (0, 3, 6) + fields_conversion = (1, 1, 1024*1024) + fields_min = [999, 999, 999] + fields_max = [0, 0, 0] + fields_sum = [0, 0, 0] + poll_count = 0 + + START_LINE = 7 + + # Get the base folder + try: + opts, args = getopt.getopt(argv, "f:hs:t:", ["folder=", "save_file="]) + except getopt.GetoptError: + print 'The file options for list_xml_files.py were not correctly specified.' + print 'To see a full list of options try:' + print ' $ python list_xml_files.py -h' + sys.exit(2) + for opt, arg in opts: + if opt == '-h': + print 'Options:' + print ' -f The base folder to build XML file list.' + print ' -s The save file.' + sys.exit() + elif opt in ('-f', "--folder"): + # check if file exists. + if os.path.exists(arg): + log_folder = arg + else: + print 'Error: Argument must be a folder name for --folder (-f).' + sys.exit() + elif opt in ('-s', "--save_file"): + save_file = arg + + # Required fields to run the script. + if log_folder == "" or not os.path.exists(log_folder): + print 'Error: The folder path option must be supplied: --folder (-f).' + sys.exit() + if save_file == "": + print 'Error: The folder path option must be supplied: --save_file (-s).' + sys.exit() + + with open(save_file, 'w') as outfile: + csvfile = csv.writer(outfile) + for path, filename in find_files(log_folder, '*thread_*.csv'): + keys = filename.split(".")[0].split("_") + with open(path + "/" + filename, 'rU') as infile: + csv_input_file = csv.reader(infile, quotechar='"', delimiter = ',') + count = 0 + print 'Working on file: ' + filename + for line in csv_input_file: + if (count > START_LINE): + for i, v in enumerate(fields_indexes): + if (len(line) <= v): + print 'Bad file: ' + filename + break + else: + if (float(line[v]) < fields_min[i]): + fields_min[i] = float(line[v]) + if (fields_max[i] < float(line[v])): + fields_max[i] = float(line[v]) + fields_sum[i] += float(line[v]) + poll_count += 1 + count += 1 + + # Build data row + row = [] + if (poll_count > 0): + row.extend(keys) + for i, v in enumerate(fields_indexes): + row.append("%.2f" % (fields_min[i] / fields_conversion[i])) + row.append("%.2f" % (fields_max[i] / fields_conversion[i])) + row.append("%.2f" % (fields_sum[i] / fields_conversion[i] / poll_count)) + csvfile.writerow(row) + + # Reset + fields_min = [999, 999, 999] + fields_max = [0, 0, 0] + fields_sum = [0, 0, 0] + poll_count = 0 + +if __name__ == "__main__": + main(sys.argv[1:]) http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/resources/scripts/clear_file_cache.sh ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/resources/scripts/clear_file_cache.sh b/vxquery-xtest/src/main/resources/scripts/clear_file_cache.sh new file mode 100644 index 0000000..b5ef375 --- /dev/null +++ b/vxquery-xtest/src/main/resources/scripts/clear_file_cache.sh @@ -0,0 +1,18 @@ +#!/bin/bash +BYTE_COUNT=2000000 + +# loop over the files. +for i in `seq 0 9` +do + # Attempting to add files to the cache. + echo "cache file: /tmp/zero${i}" + for l in `seq 0 4` + do + if [ ! -f "/tmp/zero${i}" ] + then + echo "Creating..." + dd if=/dev/zero of=/tmp/zero${i} count=${BYTE_COUNT} 2> /dev/null + fi; + dd if=/tmp/zero${i} of=/dev/null count=${BYTE_COUNT} 2> /dev/null + done; +done; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/2d6da4e2/vxquery-xtest/src/main/resources/scripts/run_thread_test.sh ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/main/resources/scripts/run_thread_test.sh b/vxquery-xtest/src/main/resources/scripts/run_thread_test.sh new file mode 100644 index 0000000..30e197c --- /dev/null +++ b/vxquery-xtest/src/main/resources/scripts/run_thread_test.sh @@ -0,0 +1,67 @@ +#!/bin/bash + + +if [ -z "${1}" ] +then + echo "Please supply a directory for XML files." + exit +fi + + +BUFFER=$((8*1024)) +# bash until loop +until [ ${BUFFER} -gt $((1024*1024*1024)) ]; do + for n in 1 2 4 + do + # Parse Only + log_file="thread_parsed_${n}_${BUFFER}.csv" + + echo "Clearing file system cache. (hack)" + sh ./vxquery-xtest/target/appassembler/bin/clear_file_cache.sh > /dev/null + + echo "Start background logging." + dstat -cdmr --nocolor --output logs/${log_file} > /dev/null & + PROC_ID=$! + + echo "Run experiment for ${n} threads." + JAVA_OPTS=" -Xmx8G " sh ./vxquery-xtest/target/appassembler/bin/diskperformance ${1} ${n} 1 ${BUFFER} + + echo "Stop background logging. (Process ID: ${PROC_ID})" + kill -9 ${PROC_ID} + + + # Parse No Return + log_file="thread_empty_${n}_${BUFFER}.csv" + + echo "Clearing file system cache. (hack)" + sh ./vxquery-xtest/target/appassembler/bin/clear_file_cache.sh > /dev/null + + echo "Start background logging." + dstat -cdmr --nocolor --output logs/${log_file} > /dev/null & + PROC_ID=$! + + echo "Run experiment for ${n} threads." + JAVA_OPTS=" -Xmx8G " sh ./vxquery-cli/target/appassembler/bin/vxq weather_data/dataset-gsn-local/queries/local_batch_scale_out/d1_p${n}/no_result.xq -buffer-size ${BUFFER} 2>&1 + + echo "Stop background logging. (Process ID: ${PROC_ID})" + kill -9 ${PROC_ID} + + # Full Query + log_file="thread_full_${n}_${BUFFER}.csv" + + echo "Clearing file system cache. (hack)" + sh ./vxquery-xtest/target/appassembler/bin/clear_file_cache.sh > /dev/null + + echo "Start background logging." + dstat -cdmr --nocolor --output logs/${log_file} > /dev/null & + PROC_ID=$! + + echo "Run experiment for ${n} threads." + JAVA_OPTS=" -Xmx8G " sh ./vxquery-cli/target/appassembler/bin/vxq weather_data/dataset-gsn-local/queries/local_batch_scale_out/d1_p${n}/q00.xq -buffer-size ${BUFFER} 2>&1 + + echo "Stop background logging. (Process ID: ${PROC_ID})" + kill -9 ${PROC_ID} + + done; + let BUFFER=BUFFER*4 +done
