abdullah alamoudi has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2039
Change subject: [NO ISSUE][OTH] Trace Scheduling of IO operations
......................................................................
[NO ISSUE][OTH] Trace Scheduling of IO operations
- user model changes: no
- storage format changes: no
- interface changes: no
details:
- Add traces to capture the point of time an IO operation is scheduled.
Change-Id: Id5146d41de2ea4b46c53ce33ce467b8304bce177
---
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractIoOperation.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/FlushOperation.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
A
hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Event.java
M
hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
7 files changed, 114 insertions(+), 58 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/39/2039/1
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
index 79360d5..a13f82c 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMIOOperation.java
@@ -21,6 +21,7 @@
import java.util.concurrent.Callable;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
import org.apache.hyracks.api.io.IODeviceHandle;
public interface ILSMIOOperation extends Callable<Boolean> {
@@ -55,4 +56,11 @@
@Override
Boolean call() throws HyracksDataException;
+
+ /**
+ * The target of the io operation
+ *
+ * @return
+ */
+ FileReference getTarget();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractIoOperation.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractIoOperation.java
index 09e236e..6e51f83 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractIoOperation.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractIoOperation.java
@@ -49,6 +49,7 @@
return callback;
}
+ @Override
public FileReference getTarget() {
return target;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
index beed6b4..e9f5cef 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMIndex.java
@@ -64,6 +64,7 @@
import org.apache.hyracks.storage.common.ISearchOperationCallback;
import org.apache.hyracks.storage.common.buffercache.IBufferCache;
import org.apache.hyracks.util.trace.Tracer;
+import org.apache.hyracks.util.trace.Tracer.Scope;
public abstract class AbstractLSMIndex implements ILSMIndex {
protected final ILSMHarness lsmHarness;
@@ -336,6 +337,7 @@
opCtx.setOperation(IndexOperation.FLUSH);
opCtx.getComponentHolder().add(flushingComponent);
ILSMIOOperation flushOp = createFlushOperation(opCtx,
flushingComponent, componentFileRefs, callback);
+ tracer.instant(flushOp.getTarget().getRelativePath(),
"schedule-flush", Scope.p, null);
ioScheduler.scheduleOperation(TracedIOOperation.wrap(flushOp, tracer));
}
@@ -351,6 +353,7 @@
ILSMDiskComponent lastComponent = (ILSMDiskComponent)
mergingComponents.get(mergingComponents.size() - 1);
LSMComponentFileReferences mergeFileRefs =
getMergeFileReferences(firstComponent, lastComponent);
ILSMIOOperation mergeOp = createMergeOperation(opCtx,
mergingComponents, mergeFileRefs, callback);
+ tracer.instant(mergeOp.getTarget().getRelativePath(),
"schedule-merge", Scope.p, null);
ioScheduler.scheduleOperation(TracedIOOperation.wrap(mergeOp, tracer));
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/FlushOperation.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/FlushOperation.java
index 3d65a6f..1173aeb 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/FlushOperation.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/FlushOperation.java
@@ -50,11 +50,6 @@
}
@Override
- public FileReference getTarget() {
- return target;
- }
-
- @Override
public ILSMIndexAccessor getAccessor() {
return accessor;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
index a58b0b1..b6abba6 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/TracedIOOperation.java
@@ -20,6 +20,7 @@
package org.apache.hyracks.storage.am.lsm.common.impls;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
import org.apache.hyracks.api.io.IODeviceHandle;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperation;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMIOOperationCallback;
@@ -50,30 +51,39 @@
return ioOp;
}
+ @Override
public IODeviceHandle getDevice() {
return ioOp.getDevice();
}
+ @Override
public ILSMIOOperationCallback getCallback() {
return ioOp.getCallback();
}
+ @Override
public String getIndexIdentifier() {
return ioOp.getIndexIdentifier();
}
+ @Override
public LSMIOOpertionType getIOOpertionType() {
return ioOpType;
}
@Override
public Boolean call() throws HyracksDataException {
- final long tid = tracer.durationB(getDevice().toString(), cat, null);
+ final long tid = tracer.durationB(getTarget().getRelativePath(), cat,
null);
try {
return ioOp.call();
} finally {
tracer.durationE(tid, "{\"optional\":\"value\"}");
}
+ }
+
+ @Override
+ public FileReference getTarget() {
+ return ioOp.getTarget();
}
}
@@ -84,6 +94,7 @@
System.err.println("COMPARE ComparableTracedIOOperation");
}
+ @Override
public int compareTo(ILSMIOOperation other) {
System.err.println("COMPARE compareTo " +
other.getClass().getSimpleName());
if (other instanceof ComparableTracedIOOperation) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Event.java
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Event.java
new file mode 100644
index 0000000..4a46c19
--- /dev/null
+++
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Event.java
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+package org.apache.hyracks.util.trace;
+
+import org.apache.hyracks.util.trace.Tracer.Scope;
+
+final class Event {
+ public final String name;
+ public final String cat;
+ public final Tracer.Phase ph;
+ public final long ts;
+ public final int pid;
+ public final long tid;
+ public final Tracer.Scope scope;
+ public final String args;
+
+ private Event(String name, String cat, Tracer.Phase ph, long ts, int pid,
long tid, Tracer.Scope scope,
+ String args) {
+ this.name = name;
+ this.cat = cat;
+ this.ph = ph;
+ this.ts = ts;
+ this.pid = pid;
+ this.tid = tid;
+ this.scope = scope;
+ this.args = args;
+ }
+
+ private static long timestamp() {
+ return System.nanoTime() / 1000;
+ }
+
+ public static Event create(String name, String cat, Tracer.Phase ph, int
pid, long tid, Scope scope, String args) {
+ return new Event(name, cat, ph, timestamp(), pid, tid, scope, args);
+ }
+
+ public String toJson() {
+ return append(new StringBuilder()).toString();
+ }
+
+ public StringBuilder append(StringBuilder sb) {
+ sb.append("{");
+ if (name != null) {
+ sb.append("\"name\":\"").append(name).append("\",");
+ }
+ if (cat != null) {
+ sb.append("\"cat\":\"").append(cat).append("\",");
+ }
+ sb.append("\"ph\":\"").append(ph).append("\",");
+ sb.append("\"pid\":\"").append(pid).append("\",");
+ sb.append("\"tid\":").append(tid).append(",");
+ sb.append("\"ts\":").append(ts);
+ if (scope != null) {
+ sb.append(",\"s\":\"").append(scope).append("\"");
+ }
+ if (args != null) {
+ sb.append(",\"args\":").append(args);
+ }
+ sb.append("}");
+ return sb;
+ }
+}
\ No newline at end of file
diff --git
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
index 1c02ac8..4dc2394 100644
---
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
+++
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/trace/Tracer.java
@@ -44,7 +44,7 @@
// Complete Events
X,
// Instant Events
- I,
+ i,
// Counter Events
C,
// Async Events
@@ -59,6 +59,12 @@
N, // created
O, // snapshot
D // destroyed
+ }
+
+ public enum Scope {
+ g, // Global scope
+ p, // Process scope
+ t // Thread scope
}
public Tracer(String name, String[] categories) {
@@ -88,64 +94,18 @@
}
public long durationB(String name, String cat, String args) {
- Event e = Event.create(name, cat, Phase.B, pid,
Thread.currentThread().getId(), args);
+ Event e = Event.create(name, cat, Phase.B, pid,
Thread.currentThread().getId(), null, args);
traceLog.log(TRACE_LOG_LEVEL, e.toJson());
return e.tid;
}
public void durationE(long tid, String args) {
- Event e = Event.create(null, null, Phase.E, pid, tid, args);
+ Event e = Event.create(null, null, Phase.E, pid, tid, null, args);
traceLog.log(TRACE_LOG_LEVEL, e.toJson());
}
-}
-class Event {
- public final String name;
- public final String cat;
- public final Tracer.Phase ph;
- public final long ts;
- public final int pid;
- public final long tid;
- public final String args;
-
- private Event(String name, String cat, Tracer.Phase ph, long ts, int pid,
long tid, String args) {
- this.name = name;
- this.cat = cat;
- this.ph = ph;
- this.ts = ts;
- this.pid = pid;
- this.tid = tid;
- this.args = args;
- }
-
- private static long timestamp() {
- return System.nanoTime() / 1000;
- }
-
- public static Event create(String name, String cat, Tracer.Phase ph, int
pid, long tid, String args) {
- return new Event(name, cat, ph, timestamp(), pid, tid, args);
- }
-
- public String toJson() {
- return append(new StringBuilder()).toString();
- }
-
- public StringBuilder append(StringBuilder sb) {
- sb.append("{");
- if (name != null) {
- sb.append("\"name\":\"").append(name).append("\",");
- }
- if (cat != null) {
- sb.append("\"cat\":\"").append(cat).append("\",");
- }
- sb.append("\"ph\":\"").append(ph).append("\",");
- sb.append("\"pid\":\"").append(pid).append("\",");
- sb.append("\"tid\":").append(tid).append(",");
- sb.append("\"ts\":").append(ts);
- if (args != null) {
- sb.append(",\"args\":").append(args);
- }
- sb.append("}");
- return sb;
+ public void instant(String name, String cat, Scope scope, String args) {
+ Event e = Event.create(name, cat, Phase.i, pid,
Thread.currentThread().getId(), scope, args);
+ traceLog.log(TRACE_LOG_LEVEL, e.toJson());
}
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/2039
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id5146d41de2ea4b46c53ce33ce467b8304bce177
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <[email protected]>