add IO counters in the client library
diff --git a/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/Counters.java b/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/Counters.java
index 8560ddd..7a75b2a 100644
--- a/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/Counters.java
+++ b/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/Counters.java
@@ -23,4 +23,8 @@
public static final String NETWORK_IO_READ = "net-payload-bytes-read";
public static final String NETWORK_IO_WRITE = "net-payload-bytes-written";
+
+ public static final String DISK_READ = "disk-reads";
+
+ public static final String DISK_WRITE = "disk-writes";
}
diff --git a/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/impl/ClientCounterContext.java b/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/impl/ClientCounterContext.java
index 532cd1e..cd785a0 100644
--- a/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/impl/ClientCounterContext.java
+++ b/hyracks/hyracks-client/src/main/java/edu/uci/ics/hyracks/client/stats/impl/ClientCounterContext.java
@@ -39,7 +39,7 @@
*/
public class ClientCounterContext implements ICounterContext {
private static String[] RESET_COUNTERS = { Counters.NETWORK_IO_READ, Counters.NETWORK_IO_WRITE,
- Counters.MEMORY_USAGE };
+ Counters.MEMORY_USAGE, Counters.DISK_READ, Counters.DISK_WRITE };
private static String[] AGG_COUNTERS = { Counters.SYSTEM_LOAD };
private static int UPDATE_INTERVAL = 10000;
diff --git a/hyracks/hyracks-client/src/test/java/edu/uci/ics/hyracks/client/stats/ClientCounterContextTest.java b/hyracks/hyracks-client/src/test/java/edu/uci/ics/hyracks/client/stats/ClientCounterContextTest.java
index 5fe77f2..8394daf 100644
--- a/hyracks/hyracks-client/src/test/java/edu/uci/ics/hyracks/client/stats/ClientCounterContextTest.java
+++ b/hyracks/hyracks-client/src/test/java/edu/uci/ics/hyracks/client/stats/ClientCounterContextTest.java
@@ -34,7 +34,7 @@
wait(20000);
}
String[] counters = { Counters.MEMORY_USAGE, Counters.NETWORK_IO_READ, Counters.NETWORK_IO_WRITE,
- Counters.SYSTEM_LOAD };
+ Counters.SYSTEM_LOAD, Counters.DISK_READ, Counters.DISK_WRITE };
for (String counterName : counters) {
ICounter counter = ccContext.getCounter(counterName, false);
System.out.println(counter.get());
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/io/profiling/IOCounterLinux.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/io/profiling/IOCounterLinux.java
index 5713ef1..6c0caf0 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/io/profiling/IOCounterLinux.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/io/profiling/IOCounterLinux.java
@@ -22,6 +22,8 @@
public class IOCounterLinux implements IIOCounter {
public static final String COMMAND = "iostat";
+ public static final String COMMAND2 = "cat /proc/self/io";
+ public static final int PAGE_SIZE = 4096;
@Override
public long getReads() {
@@ -29,17 +31,28 @@
long reads = extractColumn(4);
return reads;
} catch (Exception e) {
- return 0;
+ try {
+ long reads = extractRow(4);
+ return reads / PAGE_SIZE;
+ } catch (Exception e2) {
+ return 0;
+ }
}
}
@Override
public long getWrites() {
try {
- long reads = extractColumn(5);
- return reads;
+ long writes = extractColumn(5);
+ return writes;
} catch (Exception e) {
- return 0;
+ try {
+ long writes = extractRow(5);
+ long cancelledWrites = extractRow(6);
+ return (writes - cancelledWrites) / PAGE_SIZE;
+ } catch (Exception e2) {
+ return 0;
+ }
}
}
@@ -47,7 +60,7 @@
BufferedReader reader = exec(COMMAND);
String line = null;
boolean device = false;
- long reads = 0;
+ long ios = 0;
while ((line = reader.readLine()) != null) {
if (line.contains("Blk_read")) {
device = true;
@@ -58,14 +71,38 @@
while (tokenizer.hasMoreTokens()) {
String column = tokenizer.nextToken();
if (i == columnIndex) {
- reads += Long.parseLong(column);
+ ios += Long.parseLong(column);
}
i++;
}
}
}
reader.close();
- return reads;
+ return ios;
+ }
+
+ private long extractRow(int rowIndex) throws IOException {
+ BufferedReader reader = exec(COMMAND2);
+ String line = null;
+ long ios = 0;
+ int i = 0;
+ while ((line = reader.readLine()) != null) {
+ if (i == rowIndex) {
+ StringTokenizer tokenizer = new StringTokenizer(line);
+ int j = 0;
+ while (tokenizer.hasMoreTokens()) {
+ String column = tokenizer.nextToken();
+ if (j == 1) {
+ ios = Long.parseLong(column);
+ break;
+ }
+ j++;
+ }
+ }
+ i++;
+ }
+ reader.close();
+ return ios;
}
private BufferedReader exec(String command) throws IOException {