jrudolph / fjp-trace Goto Github PK
View Code? Open in Web Editor NEWInstrumented JSR166 ForkJoinPool + trace renderer
Instrumented JSR166 ForkJoinPool + trace renderer
Instrumented ForkJoinPool implementation -------------------------------------------------------------- This implementation is based on JSR 166 by Doug Lea. The baseline version is available either in JDK 7+, or JSR-166 concurrency interest: http://g.oswego.edu/dl/concurrency-interest/ GENERATED DATA (aka FEATURES): Most of the graphs are showing the progress in time. 1. *-events.txt.gz: raw event stream This is the event stream, sorted by time, and printed in human-readable form. 2. *-workerState.png: worker states This graph should be the most familiar, like the other thread state tracers do. The excess of waits and idle threads can highlight either capacity or decomposition problem. 3. *-workerState.txt.gz: worker states (text representation) Text trace might be more useful to track event sequence more accurately. While raph could show you the big picture, text trace can drill down to individual events. 4. *-workerQueue.png: worker queue state This graph infers the remaining elements in each worker queue. Note that fjp-trace has no direct measure of queue depth, instead inferring it from the fork-exec event pairs. That probably brings some hysteresis into the picture, and should be considered when making decisions. 5. *-exectime*.png: execution time for each subtask Exclusive time is the time spent in the task alone, without counting recursive invocations. Inclusive time accounts the recursive invocations as well, and so it often looks like the "exclusive time" pre-image copied at periodic time shifts. 6. *-externalColors.png: aggregate subtasks by their external task origin. This is useful to watch for subtasks interleaves and diagnose fairness problems. Also, the graph is rather psychedelic, and can be (but probably should not be) used in conjunction with appropriate chemical agents to bring the unforgettable experience. 7. *-subgraphs.png: the decomposition trees in more detail, down to individual traces. You might find more convenient to focus on specific parts with time range. Also, -DtaskTree.detail=true to render event labels. 8. *-summary.txt: summary statistics for tasks executed If there is something else sorely needed, don't hesitate to raise the issue. QUICK START: 1. Build the distribution $ mvn clean install This will generate target/fjp-trace.jar, which is the one and only artifact for this project. 2. Get the trace by running your application with fjp-trace bootclasspath'ed: $ java -Xbootclasspath/p:fjp-trace.jar ... You should see something like "Using instrumented ForkJoinPool" in stdout, which will tell if bootclasspath was successful. Try to run your application in this mode first, this does not enable any new functionality. 3. Enable tracing and run again $ java -Xbootclasspath/p:fjp-trace.jar -Djava.util.concurrent.ForkJoinPool.trace=true ... This will generate trace dump. You can override trace dump location via -Djava.util.concurrent.ForkJoinPool.traceLog=# 4. Parse the trace: $ java -jar fjp-trace.jar -s <trace file> You can also use some of the advanced options, see the help: $ java -jar fjp-trace.jar -h CAVEATS: * Trace format is not considered to be stable, although it almost never changes. Keep that in mind while conducting the experiments spanning days of runs: the update to the tracer can invalidate the previous traces. * Tracer can generate *lots* of data if FJP is loaded enough. You might want to use limit/offset during the trace loading. Asking for limit is almost always safe, while asking for offset may sometimes jeopardize the data, since the data about the past would be lost from the inference. * Use from/to time to focus on specific parts of the trace! This will still load the entire trace file, and so the data integrity would not be violated.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.