Contents
Part I Running tests with
litmus
1 A tour of
litmus
1.1 A simple run
1.2 Cross compilation
1.3 Running several tests at once
2 Controlling test parameters
2.1 Architecture of tests
2.2 Affinity
2.2.1 Introduction to affinity
2.2.2 Study of affinity
2.2.3 Advanced control
2.2.4 Custom control
2.3 Controlling executable files
2.4 Timebase synchronisation mode
3 Usage of
litmus
Part II Generating tests
4 Preamble
4.1 Relaxation of Sequential Consistency
4.2 Introduction to candidate relaxations
4.3 More candidate relaxations
4.4 Summary of simple candidate relaxations
4.4.1 Communication candidate relaxations
4.4.2 Program order candidate relaxations
4.4.3 Fence candidate relaxations
5 Testing candidate relaxations with
diy
5.1 Principle
5.2 Testing x86
6 Additional relaxations
6.1 Intra-processor dependencies
6.2 Composite relaxations and cumulativity
7 Test variations with
diycross
8 Identifying coherence orders with observers
8.1 Simple observers
8.2 More observers
8.2.1 Fences and loops in observers
8.2.2 Local observers
8.2.3 Performance of observers
8.3 Three stores or more
9 Command usage
9.1 A note on test names
9.1.1 Family names
9.1.2 Descriptive names for variants
9.2 Common options
9.3 Usage of
diyone
9.4 Usage of
diycross
9.5 Usage of
diy
9.6 Usage of
readRelax
10 Additional tools: extracting cycles and classification
10.1 Usage of
mcycles
10.2 Usage of
classify
Part III Some examples
11 Running several tests at once, changing critical parameters
12 Cross compiling, affinity experiment
13 Cross running, testing low-end devices
Part IV Automating the testing process
14 Preamble
15 A tour of
dont
15.1 Checking conformance
15.2 Checking non-conformance
15.3 Automatically exploring the memory model exhibited by a machine
16 Usage of
dont
16.1 Command-line options
16.2 Configuration files