View on GitHub

TraceBench

An open data set for trace-oriented monitoring

•  Overview
•  Download
•  Getting Start
•  Trace
•  Data Storing
•  Structure
•  Environment
•  Workload
•  Faults
•  Applications
•  Contact us

Overview

TraceBench is an open data set for trace-oriented monitoring, collected using MTracer on a HDFS system deployed in a real IaaS environment. When collecting, we considered different scenarios, involving multiple scales of clusters, different kinds of user requests, various speeds of workloads, etc. In addition to recording the traces when the HDFS runs normally, we also collected the traces under the situations with various faults injected. There are 17 faults we have injected, including function and performance faults (and real system bugs). The traces in TraceBench are clustered in different MySQL files, and each file records the traces collected under a certain situation. The total collection time of TraceBench is more than 180 hours, resulting 364 files that record more than 370,000 traces. We believe TraceBench is helpful for the research of trace-based monitoring and many other topics.


Download

TraceBench is freely available. If you use TraceBench in you work, please cite our paper (pdf slides) using following reference.
• Jingwen Zhou, Zhenbang Chen, Ji Wang, Zibin Zheng, and Michael R. Lyu, "TraceBench: An open data set for trace-oriented monitoring," in Proceedings of the 6th IEEE International Conference on Cloud Computing Technology and Science (CloudCom 2014), pp. 519–526. IEEE Computer Society, 2014. DOI: 10.1109/CloudCom.2014.79
or
@inproceedings{Zhou-CloudCom-2014,
title={TraceBench: An open data set for trace-oriented monitoring},
author={Jingwen Zhou, Zhenbang Chen, Ji Wang, Zibin Zheng, and Michael R. Lyu},
booktitle={Proceedings of the 6th IEEE International Conference on Cloud Computing Technology and Science (CloudCom 2014)},
publisher={IEEE Computer Society},
pages={519–526},
year={2014},
url={http://mtracer.github.io/TraceBench/},
doi={10.1109/CloudCom.2014.79},
}
ziptar.gz
Download TraceBench (zip, tar.gz).
Maybe you also need MTracer-Viz for visualization.

Getting Start

Following steps are a way for visualizing traces in TraceBench:
1. Make sure you install MTracer-Viz successfully
2. Put all the downloaded files into the directory MTracer-Viz\webapps\database.
3. Open MTracer-Viz in local browser, and click the link "Database" in homepage, then you can see the files of TraceBench.
4. Click the button "enable" to enable the file you are interested in, and you will see the related traces in the browser.

Or, you can see TraceBench on line.


Trace

A trace in TraceBench records the handling process of a user request. The trace consists of events and edges, where the event records information of executing an operation, like function, and the edge records the relationship between events, like function call. Following are some samples chosen from TraceBench.
RequestDescriptionDetails
1lslist all files in HDFSTrace Tree | Events | Edges
2copyFromLocalupload a file (1 data blocks) from local to HDFSTrace Tree | Events | Edges
3copyToLocaldownload a file (2 data block) from HDFS to localTrace Tree | Events | Edges
4copyFromLocala write requst with function fault, reflecting
in Trace Tree and the Description field of Events
Trace Tree | Events | Edges
5copyToLocala read requst with performance fault, reflecting
in the latencies of events
Trace Tree | Events | Edges

The method of constructing a trace tree from events and edges is following:
(a) Pick out all the events and edges with TraceID.
(b) Classify the picked events to different classes with NID.
(c) Calculate the relationships of the events in each class according to the time stamps. For example, (F1.startTime < F2.startTime) and (F1.endTime > F2.endTime) mean F1 is the ancestor of F2.
(d) Construct the relationships between classes using edges. The node, identified by the fatherNID and fatherStartTime fields, is the father of all the root nodes in the class decided by the childNID field.

The computational complexity of the construction procss is O(nm+n^2/m) on average and O(n^2) in the worst case, where n is the number of the events and m is the number of edges. Following, we give the analysis process:
We first respectively analyze the computational complexity of each construction step.
• Step (a) picks out all the events and edges of the under-reconstructed trace from the database. Actually, the database querying operation is not a part of our reconstruction algorithm. Therefore, we do not consider the computational complexity of this step.
• Step (b) classifies the picked events into classes according to nid, i.e., for each event in the trace, finds the class with the same nid. Therefore, the computational complexity of step (b) is O(n * Nclass), where Nclass means the number of the classes.
• Step (c) calculates the relationships in each class using the time stamps, in which each event needs to compare with all the other events in the same class. Therefore, the computational complexity of step (c) is O(n * Neventinclass), where Neventinclass the average number of the events in a class.
• Step (d) constructs the relationships between classes using edges, i.e., finds the father event and the child class for each edge. Thus, the computational complexity of step (d) is O(m * (n + Nclass)).
Therefore, the computational complexity of the whole reconstruction process is O(n * Nclass)+O(n * Neventinclass)+O(m * (n+Nclass)). With the relationships of n > m, Nclass = m + 1 and Nclass * Neventinclass = n, the computational complexity can be simplified to O(nm + n^2/m). In the worst case, i.e., the trace contains only one class (i.e., m = 0) or each class contains only one event (i.e., n = m + 1), the computational complexity becomes to O(n^2).

Data Storing

Traces are stored in the form of events and edges. There are following four tables in MySQL for storing data.
TableFieldsDescription
EventTraceIDID of the trace containing this event.
NIDMentioned above.
OpNameName of the operation recorded by this event.
StartTime/EndTimeTimestamps of starting/finishing the operation.
HostAddress/HostNameHost IP/Name of generating this event.
AgentLocation of the operation inside the code, usually meaning class.
DescriptionSome results of executing the operation, including exceptions.
EdgeTraceID/FatherNID/FatherStartTime/ChildNIDMentioned above.
TraceTraceIDMentioned above.
TitleName of the trace.
NumEvents/NumEdgesNumber of events/edges included by this trace.
FirstSeen/LastUpdatedTime of first/last receiving the data in this trace on monitor server.
StartTime/EndTimeTimestamps of starting/finishing this event.
OperationOpNameName of the operation, corresponding to the OpName field in Event table.
NumNumber of events recording this operation.
MaxLatency/MinLatency/AverageLatencyMaximal/minimal/average latency of this operation.

Data in Trace and Operation are the statistic information, which can be extracted from the Event and Edge. In other words, the Event and Edge record all needed data of traces.

Note that, the terms used in implementation maybe a little different from above. Here are some of them: Task=Trace, TID=NID, Report=Event, Delay=Latency


Structure

The structure of TraceBench is shown in following table:
ClassTypeFaultWorkloadVariable
Normal (NM)Clientload (CL)-r/w/rw/rpc/rwrpc1,5i Clients (C)
Datanode (DN)-r/w/rw1,5i datanodes (DN)
Abnormal (AN)Process (Proc)killDNr/w0,1,2,3,4,5i FDN
suspendDNr/w1,2,3,4,5i FDNs
Network (Net)disconnectDNr/w1,2,3,4,5i FDN
slowHDFSr/w/rpc0,10i/2i/100i ms
slowDNr/w1,2,3,4,5i FDNs
DatacorruptBlkr0,1,2,3,4,5i FDN
corruptMetar0,1,2,3,4,5i FDN
lossBlkr1,2,3,4,5i FDN
lossMetar1,2,3,4,5i FDN
cutBlkr1,2,3,4,5i FDN
cutMetar1,2,3,4,5i FDN
System (Sys)panicDNr/w1,2,3,4,5 FDN
deadDNr/w1,2,3,4,5 FDN
readOnlyDNw1,2,3,4,5 FDN
Combination (COM)Single (Sin)Process (Proc)rwrpc1,2,3
Network (Net)rwrpc1,2,3
Datarwrpc1,2,3
System (Sys)rwrpc1,2,3
Bug rwrpc1,2,3
Multiple (Mul)AnarchyApe (AA)rwrpc1,2,3

In TraceBench, we name a set of traces according to the items of the columns in the table, i.e., “[Class](_[Type](_[Fault](_[Workload](_[Variable])?)?)?)?” in the form of the regular expression, where the words means the sets of items appeared in corresponding columns of the table. In addition, abbreviations given in the brackets in the table are used for compressing the names. As an example, the trace set named as Normal_Clientload_-_r, or NM_CL_r for short, contains the traces collected under the workload r in the Clientload type of Normal class.



Environment


TraceBench is collected in a real environment, which consists of more than 100 virtual machines hosted on our IaaS platform, i.e., CloudStack. Following figure shows the environment of our collection.

The environment consists of following component:
• HDFS: providing a distributed storage service, con taining 50 datanodes and one namenode.
• Clients: used to generate workloads to HDFS, to simulate the real usages of HDFS, containing 50 hosts.
• MTracer Server: receiving, storing and visualizing traces generated when HDFS processes the requests from clients.
• Controller: controlling the whole process of collection, and also being in charge of injecting faults.
• Ganglia Server [4]: monitoring the whole environment, to help for solving the unexpected issues in collection, like VMs are shut down by accident.
The MTracer Server is deployed on a VM with 4 GB memory and 8 × 1 GHz CPU, while all the rest hosts are deployed on the VMs with 2 GB memory and 4 × 1 GHz CPU. The OS that all the VMs use is CentOS 6.3.


Workload

During collection, we introduce following 5 workload:

WorkloadContained HDFS requests
rcopyToLocal
wcopyFromLocal
rpcmkdir, touchz, mv, chmod, chown, ls, count, rmr
rwr+w
rwrpcr+w+rpc

Faults

We introduced 17 faults in 5 types, we explain each of them as follows
TypeFaultDescriptionCategorySelected From
ProcesskillDNKill the HDFS processes on some datanodesFunctionalAnarchyApe
suspendDNSuspend the HDFS processes on some datanodesFunctional
NetworkdisconnectDNDisconnect some datanodes from networkFunctional
slowHDFSSlow all the HDFS nodesPerformance
slowDNSlow some datanodesPerformance
DatacorruptBlkModify all the data blocks on some datanodesFunctional
corruptMetaModify all the metadata files on some datanodesFunctional
lossBlkDelete all the data blocks on some datanodesFunctional
lossMetaDelete all the metadata files on some datanodesFunctional
cutBlkRemove some bits in all data blocks on some datanodesFunctional
cutMetaRemove some bits in all metadata files on some datanodesFunctional
SystempanicDNMake the system panic on some datanodesFunctional
deadDNMake the system dead on some datanodesFunctional
readOnlyDNMake the system read-only on some datanodesFunctional
BugHADOOP-3257The path in HDFS requests is limited by URI semanticsFunctionalHadoop issues repository
HADOOP-6502ls is very slow when listing a directory with a size of 1300Performance
HADOOP-7064rmr does not properly check permissions of filesFunctional


Applications

See the applications here.


Contact us

• Jingwen Zhou (jwzhou@nudt.edu.cn): PhD Student, National University of Defense Technology, Changsha 410073, China
• Zhenbang chen (zbchen@nudt.edu.cn): Lecturer, National University of Defense Technology, Changsha 410073, China
• Ji Wang: Professor, National University of Defense Technology, Changsha 410073, China
• Zibin Zheng: Associate Research Fellow, Shenzhen Research Institute, The Chinese University of Hong Kong, Shenzhen, China
• Michael R. Lyu: Professor, Department of Computer Science and Engineering, The Chinese University of Hong Kong, Hong Kong, China