commit | ab3d0c3e126964e3ad4a4d4925699e01d8ee4d98 | [log] [tgz] |
---|---|---|
author | Lucia Lup <lucialup@google.com> | Thu Jul 22 14:06:27 2021 +0000 |
committer | Lucia Lup <lucialup@google.com> | Thu Jul 22 18:00:12 2021 +0000 |
tree | 6e43551595eafd662d779bbeea7c5336d8b5b9e9 | |
parent | 5a0b8d0624bcb617a91ee5f29b3a7b5c036b9609 [diff] |
Logger performane update Small logger performance update Bug: 193894734 Test: dittobench_test Signed-off-by: Lucia Lup <lucialup@google.com> Change-Id: Iab337a44a0bb40a37b7de595c8cf93f3c9aabf2e
Dittosuite is a work in progress collection of tools that aims at providing a high-level language called Dittolang that defines operations.
The defined Dittolang operations can be interpreted by Dittosim for simulation to provide a simulated performance measurement and quickly identify the goodness of a solution.
Specularly, Dittobench interprets the Dittolang operations and executes them on a real device, tracking the behavior and measuring the performance.
Bandwidth and measurement when dealing with few huge files or many small files. Operations are combinations of sequential/random-offset read/write.
Latency in creating/deleting files/folders.
These operations should be able to be triggered in a multiprogrammed fashion.
A graph of processes that are communicating with each others in a pipeline of operations that are parallely contributing to the generation of display frames.
Spawning tasks (period, duration, deadline) and verifying their scheduling latency and deadline misses count.
In the following scenario, two threads are running.
T1 runs the following operations: Read, Write, Read, sends a request to T2 and waits for the reply, then Write, Read. T2 waits for a request, then Read, Write, then sends the reply to the requester.
Operations are encoded as primitives expressed with ProtoBuffers. The definition of dependencies among threads can be represented as graphs.
The first graph traversal is performed at initialization time, when all the ProtoBuffer configuration files are distributed among all the binaries so that they can perform all the heavy initialization duties.
After the initialization phase completes the graph can be traversed again to put all the workloads in execution.
A final graph traversal can be performed to fetch all the measurements that each entity internally stored.
All the measurements must be ordered and later processed to provide useful information to the user.
T1: INIT : [ RD WR RD ] SND RCV [ WR RD ] : END T2: INIT : RCV [ RD WR ] SND : END
critical path [ READ WRITE READ ] [ READ WRITE ] [ WRITE READ ] --------------------> > < Thread1 III-XXXXXX|X-SSSSSS-XX-TTTT Thread2 III-XXXX|XXX-TTTT ^
> XXXXXXX XX< XXXX
READ WRITE READ
--->
vector<instr*> {read(), write(), read()}; -> start()
RECEIVE READ WRITE READ SEND ---> vector<instr*> {receive(), read(), write(), read(), send()}; start()
lock on receive()