|
**For Version 2.1.16**
|
|
**For Version 2.1.17**
|
|
|
|
|
|
|
|
*For older releases see [here](Old-LinkTest-SIONlib-File-Formats).*
|
|
|
|
|
|
LinkTest SION files consist of three components:
|
|
LinkTest SION files consist of three components:
|
|
1. A File Header
|
|
1. A File Header
|
... | @@ -23,37 +25,36 @@ In the following we will describe the binary structure of each of the different |
... | @@ -23,37 +25,36 @@ In the following we will describe the binary structure of each of the different |
|
# File Header
|
|
# File Header
|
|
| Name | ID |Start [B] | End [B] | Size [B] | Fixed Value | Description |
|
|
| Name | ID |Start [B] | End [B] | Size [B] | Fixed Value | Description |
|
|
|-------------------------|----|----------|---------|----------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
|-------------------------|----|----------|---------|----------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| SIONlib Header | | 0 | 0+a | a | | SIONlib file header |
|
|
| SIONlib Header | | 0 | 0+a | a | | SIONlib file header - exact size depends on SIONlib configuration |
|
|
| LinkTest ID String | | 0+a | 5+a | 5 | "LKTST" | LinkTest ASCII-character tag identifying the start of the LinkTest portion of the SION file. |
|
|
| LinkTest ID String | | 0+a | 8+a | 5 | "LinkTest" | LinkTest ASCII-character tag identifying the start of the LinkTest portion of the SION file. |
|
|
| LinkTest Major Version | | 5+a | 9+a | 4 | | 32-bit unsigned integer identifying the LinkTest major version number. |
|
|
| LinkTest Major Version | | 8+a | 12+a | 4 | 2 | 32-bit unsigned integer identifying the LinkTest major version number. |
|
|
| LinkTest Minor Version | | 9+a | 13+a | 4 | | 32-bit unsigned integer identifying the LinkTest minor version number. |
|
|
| LinkTest Minor Version | | 12+a | 16+a | 4 | 1 | 32-bit unsigned integer identifying the LinkTest minor version number. |
|
|
| LinkTest Patchlevel | | 13+a | 17+a | 4 | | 32-bit unsigned integer identifying the LinkTest patchlevel number. |
|
|
| LinkTest Patch Level | | 16+a | 20+a | 4 | 17 | 32-bit unsigned integer identifying the LinkTest patch-level number. |
|
|
| LinkTest GitHash | | 17+a | 58+a | 41 | | 41-byte null-terminated ASCII-character git hash identifying the commit used to generated the data. |
|
|
| LinkTest GitHash | | 20+a | 61+a | 41 | | 41-byte ASCII-character git hash identifying the commit used to generated the data. |
|
|
| LinkTest Mode Length | b | 58+a | 62+a | 4 | | 32-bit unsigned integer specifying the length of the following string indicating the transport layer/mode/virtual-cluster implementation used for the LinkTest run. |
|
|
| LinkTest Mode Length | b | 61+a | 65+a | 4 | | 32-bit unsigned integer specifying the length of the following string indicating the transport layer/mode/virtual-cluster implementation used for the LinkTest run. |
|
|
| LinkTest Mode | | 62+a | 62+a+b | b | | Null-terminated ASCII character array identifying the transport layer/mode/virtual-cluster implementation used for the LinkTest run. |
|
|
| LinkTest Mode | | 65+a | 65+a+b | b | | Null-terminated ASCII character array identifying the transport layer/mode/virtual-cluster implementation used for the LinkTest run. |
|
|
| All-To-All Flag | c | 62+a+b | 63+a+b | 1 | | 8-bit integer that if non-zero indicates that all-to-all testing was performed. |
|
|
| All-To-All Flag | c | 65+a+b | 66+a+b | 1 | | 8-bit integer that if non-zero indicates that all-to-all testing was performed. |
|
|
| Bidirectional Flag | | 63+a+b | 64+a+b | 1 | | 8-bit integer that if non-zero indicates that bidirectional testing was performed. |
|
|
| Bidirectional Flag | | 66+a+b | 67+a+b | 1 | | 8-bit integer that if non-zero indicates that bidirectional testing was performed. |
|
|
| Unidirectional Flag | | 64+a+b | 65+a+b | 1 | | 8-bit integer that if non-zero indicates that unidirectional testing was performed. |
|
|
| Unidirectional Flag | | 67+a+b | 68+a+b | 1 | | 8-bit integer that if non-zero indicates that unidirectional testing was performed. |
|
|
| Bisection Flag | | 65+a+b | 66+a+b | 1 | | 8-bit integer that if non-zero indicates that bisection testing was performed. |
|
|
| Bisection Flag | | 68+a+b | 69+a+b | 1 | | 8-bit integer that if non-zero indicates that bisection testing was performed. |
|
|
| Step-Randomization Flag | | 66+a+b | 67+a+b | 1 | | 8-bit integer that if non-zero indicates that the step order was randomized during testing. |
|
|
| Step-Randomization Flag | | 69+a+b | 70+a+b | 1 | | 8-bit integer that if non-zero indicates that the step order was randomized during testing. |
|
|
| Serial Flag | | 67+a+b | 68+a+b | 1 | | 8-bit integer that if non-zero indicates that serialized testing was performed. |
|
|
| Serial Flag | | 70+a+b | 71+a+b | 1 | | 8-bit integer that if non-zero indicates that serialized testing was performed. |
|
|
| No-SION-File Flag | | 68+a+b | 69+a+b | 1 | 0 | 8-bit integer that if non-zero indicates that no SION file was written. |
|
|
| No-SION-File Flag | | 71+a+b | 72+a+b | 1 | 0 | 8-bit integer that if non-zero indicates that no SION file was written. |
|
|
| Parallel-SION Flag | | 69+a+b | 70+a+b | 1 | | 8-bit integer that if non-zero indicates that the SION file was written in parallel. |
|
|
| Parallel-SION Flag | | 72+a+b | 73+a+b | 1 | | 8-bit integer that if non-zero indicates that the SION file was written in parallel. |
|
|
| GPU-Memory Flag | | 70+a+b | 71+a+b | 1 | | 8-bit integer that if non-zero indicates that messages were stored in GPU RAM instead of CPU RAM. |
|
|
| GPU-Memory Flag | | 73+a+b | 74+a+b | 1 | | 8-bit integer that if non-zero indicates that messages were stored in GPU RAM instead of CPU RAM. |
|
|
| Multi-Buffer Flag | | 71+a+b | 72+a+b | 1 | | 8-bit integer that if non-zero indicates that messages were stored in multiple memory buffers. |
|
|
| Multi-Buffer Flag | | 74+a+b | 75+a+b | 1 | | 8-bit integer that if non-zero indicates that messages were stored in multiple memory buffers. |
|
|
| Randomized-Buffer Flag | | 72+a+b | 73+a+b | 1 | | 8-bit integer that if non-zero indicates that message buffers were randomized. |
|
|
| Randomized-Buffer Flag | | 75+a+b | 76+a+b | 1 | | 8-bit integer that if non-zero indicates that message buffers were randomized. |
|
|
| Check-Buffer Flag | | 73+a+b | 74+a+b | 1 | | 8-bit integer that if non-zero indicates that message buffers were checked at the end of a step. |
|
|
| Check-Buffer Flag | | 76+a+b | 77+a+b | 1 | | 8-bit integer that if non-zero indicates that message buffers were checked at the end of a step. |
|
|
| Memory Allocator Type | | 74+a+b | 75+a+b | 1 | | 8-bit integer that indicates the type of memory allocator used to allocate the buffers for the messages. |
|
|
| Memory Allocator Type | | 77+a+b | 78+a+b | 1 | | 8-bit integer that indicates the type of memory allocator used to allocate the buffers for the messages. |
|
|
| Number Of Messages | | 75+a+b | 83+a+b | 8 | | 64-bit unsigned integer indicating the number of messages passed between partners during measurements. |
|
|
| Number Of Messages | | 78+a+b | 86+a+b | 8 | | 64-bit unsigned integer indicating the number of messages passed between partners during measurements. |
|
|
| Message Size | | 83+a+b | 91+a+b | 8 | | 64-bit unsigned integer indicating the size of the messages passed between partners during measurements and warm up. |
|
|
| Message Size | | 86+a+b | 94+a+b | 8 | | 64-bit unsigned integer indicating the size of the messages passed between partners during measurements and warm up. |
|
|
| Num. Warm-up Messages | | 91+a+b | 99+a+b | 8 | | 64-bit unsigned integer indicating the number of warm-up messages passed between partners during measurements. |
|
|
| Num. Warm-up Messages | | 94+a+b | 102+a+b | 8 | | 64-bit unsigned integer indicating the number of warm-up messages passed between partners during measurements. |
|
|
| Collect P-Num | | 99+a+b |107+a+b | 8 | | Depreciated! |
|
|
| Num. Serial Retests | d | 102+a+b | 110+a+b | 8 | | 64-bit unsigned integer indicating the number of serial retests of the worst connections. |
|
|
| Num. Serial Retests | d | 107+a+b |115+a+b | 8 | | 64-bit unsigned integer indicating the number of serial retests of the worst connections. |
|
|
| Num. Multiple Buffers | | 110+a+b | 118+a+b | 8 | | 64-bit unsigned integer indicating the number of buffers used to store messages in a rolling fashion. |
|
|
| Num. Multiple Buffers | | 115+a+b |123+a+b | 8 | | 64-bit unsigned integer indicating the number of buffers used to store messages in a rolling fashion. |
|
|
| Buf. Randomization Seed | | 118+a+b | 126+a+b | 8 | | The 64-bit seed used for buffer randomization. |
|
|
| Buf. Randomization Seed | | 123+a+b |131+a+b | 8 | | The 64-bit seed used for buffer randomization. |
|
|
| Num. Randomized Tasks | | 126+a+b | 134+a+b | 8 | | The number of test iterations with randomized tasks. |
|
|
| Num. Randomized Tasks | | 131+a+b |139+a+b | 8 | | The number of test iterations with randomized tasks. |
|
|
| Task Randomization Seed | | 134+a+b | 142+a+b | 8 | | The 64-bit seed used for task randomization. |
|
|
| Task Randomization Seed | | 139+a+b |147+a+b | 8 | | The 64-bit seed used for task randomization. |
|
|
| End-Of-Header ID | | 142+a+b | 152+a+b | 10 | "END_HEADER" | 10-byte ASCII ASCII character array identifying the end of the header. |
|
|
|
|
|
|
|
|
|
|
# Data Chunk
|
|
# Data Chunk
|
|
Each Data Chunk consists of a small header, which indicate where the rank ran. This is followed by the main data section which contains the timing data and additional aggregated data in the case of Rank 0. Finally a tiny footer indicates the end of the chunk.
|
|
Each Data Chunk consists of a small header, which indicate where the rank ran. This is followed by the main data section which contains the timing data and additional aggregated data in the case of Rank 0. Finally a tiny footer indicates the end of the chunk.
|
... | @@ -69,8 +70,8 @@ Data Chunk Data - Permutation M |
... | @@ -69,8 +70,8 @@ Data Chunk Data - Permutation M |
|
Data Chunk Footer
|
|
Data Chunk Footer
|
|
```
|
|
```
|
|
|
|
|
|
## Data Chunk Header
|
|
## Data-Chunk Header
|
|
Each Data Chunk start with a small header indicate where the rank ran. For the non-zero ranks this is started with the "LKTST" ID-String.
|
|
Each Data Chunk start with a small header indicate where the rank ran.
|
|
|
|
|
|
### Rank 0
|
|
### Rank 0
|
|
| Name | ID |Start [B] | End [B] | Size [B] | Description |
|
|
| Name | ID |Start [B] | End [B] | Size [B] | Description |
|
... | @@ -79,51 +80,40 @@ Each Data Chunk start with a small header indicate where the rank ran. For the n |
... | @@ -79,51 +80,40 @@ Each Data Chunk start with a small header indicate where the rank ran. For the n |
|
| Hostname | | 4 | 4+e | d | The null-terminated ASCII hostname on which the rank ran. |
|
|
| Hostname | | 4 | 4+e | d | The null-terminated ASCII hostname on which the rank ran. |
|
|
| Core ID | | 4+e | 8+e | 4 | 32-bit integer indicating the core on which the rank ran. |
|
|
| Core ID | | 4+e | 8+e | 4 | 32-bit integer indicating the core on which the rank ran. |
|
|
|
|
|
|
### Non-Zero Rank
|
|
|
|
| Name | ID |Start [B] | End [B] | Size [B] | Description |
|
|
|
|
|-------------------------|----|----------|---------|----------|-----------------------------------------------------------|
|
|
|
|
| LinkTest ID String | | 0 | 5 | 5 | LinkTest "LKTST" ASCII-character tag. |
|
|
|
|
| Hostname Length | d | 5 | 9 | 4 | Length of the hostname on which the rank ran. |
|
|
|
|
| Hostname | | 9 | 9+e | d | The null-terminated ASCII hostname on which the rank ran. |
|
|
|
|
| Core ID | | 9+e | 13+e | 4 | 32-bit integer indicating the core on which the rank ran. |
|
|
|
|
|
|
|
|
|
|
|
|
## Data Chunk Data
|
|
## Data Chunk Data
|
|
After the Data Chunk header comes the recorded timing data, with rank 0 including additional aggregated data. If multiple randomized permutations of the ranks are used then the recorded timing data of each permutation follow directly after each other. Let us first present the table for rank 0 and then the table for the other ranks.
|
|
After the Data Chunk header comes the recorded timing data, with rank 0 including additional aggregated data at the start. If multiple randomized permutations of the ranks are used then the recorded timing data of each permutation follow directly after each other. Let us first present the additional data for rank 0 rank 0.
|
|
|
|
|
|
### Rank 0
|
|
### Rank 0 Additional Data-Chunk Header
|
|
| Name | Start [B] | End [B] | Size [B] | Logical Expression | Description |
|
|
| Name | Start [B] | End [B] | Size [B] | Logical Expression | Description |
|
|
|-------------------------|-------------------|-------------------|----------|--------------------|-------------------------------------------------------------------------------------------------------|
|
|
|-------------------------|-----------|-----------|----------|--------------------|-------------------------------------------------------------------------------------------|
|
|
| Start Time | 0 | 32 | 32 | | Null-terminated ASCII character array stating the time when this test started. |
|
|
| Start Time | 0 | 32 | 32 | | Null-terminated ASCII character array stating the time when this test started. |
|
|
| Minimum Time | 32 | 40 | 8 | | Minimum recorded time for the test as a double-precision number. |
|
|
| Minimum Time | 32 | 40 | 8 | | Minimum recorded time for the test as a double-precision number. |
|
|
| Average Time | 40 | 48 | 8 | | Average recorded time for the test as a double-precision number. |
|
|
| Average Time | 40 | 48 | 8 | | Average recorded time for the test as a double-precision number. |
|
|
| Maximum Time | 48 | 56 | 8 | | Maximum recorded time for the test as a double-precision number. |
|
|
| Maximum Time | 48 | 56 | 8 | | Maximum recorded time for the test as a double-precision number. |
|
|
| All-To-All Minimum Time | 56 | 56+1f | f | If c: f=8 else f=0 | Minimum recorded all-to-all time for the test as a double-precision number. |
|
|
| All-To-All Minimum Time | 56 | 56+1f | f | If c: f=8 else f=0 | Minimum recorded all-to-all time for the test as a double-precision number. |
|
|
| All-To-All Average Time | 56+1f | 56+2f | f | | Average recorded all-to-all time for the test as a double-precision number. |
|
|
| All-To-All Average Time | 56+1f | 56+2f | f | | Average recorded all-to-all time for the test as a double-precision number. |
|
|
| All-To-All Maximum Time | 56+2f | 56+3f | f | | Maximum recorded all-to-all time for the test as a double-precision number. |
|
|
| All-To-All Maximum Time | 56+2f | 56+3f | f | | Maximum recorded all-to-all time for the test as a double-precision number. |
|
|
| Timing Data | 56+3f | 56+3f+8(N-1) | 8(N-1) | | Recorded timing data for the rank as an array of double-precision numbers. |
|
|
| Retested Slow Timings | 56+3f | 56+3f+8d | 8d | | Timings for the retested slowest connections as an array of double precision numbers. |
|
|
| Access Pattern | 56+3f+8(N-1) | 56+3f+16(N-1) | 8(N-1) | | Access pattern for generating the recorded data for the rank as an array of 64-bit unsigned integers. |
|
|
| Slowest Timings | 56+3f+8d | 56+3f+16d | 8d | | Timings of the slowest connections as an array of double precision numbers. |
|
|
| All-To-All Timing | 56+3f+16(N-1) | 56+4f+16(N-1) | f | | Recorded all-to-all time for the rank as a double-precision number. |
|
|
| Slow Sending Partners | 56+3f+16d | 56+3f+24d | 8d | | Rank of the partner that initiated the connections for the slow timings. |
|
|
| Retested Slow Timings | 56+4f+16(N-1) | 56+4f+16(N-1)+8d | 8d | | Timings for the retested slowest connections as an array of double precision numbers. |
|
|
| Slow Receiving Partners | 56+3f+24d | 56+3f+32d | 8d | | Rank of the partner that was on the receiving end of the connections for the slow timings.|
|
|
| Slowest Timings | 56+4f+16(N-1)+8d | 56+4f+16(N-1)+16d | 8d | | Timings of the slowest connections as an array of double precision numbers. |
|
|
| End Time | 56+3f+32d | 56+3f+32d | 32 | | Null-terminated ASCII character array stating the time when this test finished. |
|
|
| Slow Sending Partners | 56+4f+16(N-1)+16d | 56+4f+16(N-1)+24d | 8d | | Rank of the partner that initiated the connections for the slow timings. |
|
|
|
|
| Slow Receiving Partners | 56+4f+16(N-1)+24d | 56+4f+16(N-1)+32d | 8d | | Rank of the partner that was on the receiving end of the connections for the slow timings. |
|
|
### Data-Chunk Data
|
|
| End Time | 56+4f+16(N-1)+32d | 88+4f+16(N-1)+32d | 32 | | Null-terminated ASCII character array stating the time when this test finished. |
|
|
For each rank the data-chunk data looks as follows (for rank 0 this follows after the above header):
|
|
|
|
| Name | Start [B] | End [B] | Size [B] | Fixed Value | Description |
|
|
### Non-Zero Rank
|
|
|-------------------------|-----------|-------------|----------|---------------|-------------------------------------------------------------------------------------------------------|
|
|
| Name | Start [B] | End [B] | Size [B] | Logical Expression | Description |
|
|
| Timing Data | 0 | 8(N-1) | 8(N-1) | | Recorded timing data for the rank as an array of double-precision numbers. |
|
|
|-------------------|-----------|-----------|----------|--------------------|-------------------------------------------------------------------------------------------------------|
|
|
| Access Pattern | 8(N-1) | 16(N-1) | 8(N-1) | | Access pattern for generating the recorded data for the rank as an array of 64-bit unsigned integers. |
|
|
| Timing Data | 0 | 8(N-1) | 8(N-1) | | Recorded timing data for the rank as an array of double-precision numbers. |
|
|
| All-To-All Timing | 16(N-1) | 16(N-1)+f | f | | Recorded all-to-all time for the rank as a double-precision number. |
|
|
| Access Pattern | 8(n-1) | 16(N-1) | 8(N-1) | | Access pattern for generating the recorded data for the rank as an array of 64-bit unsigned integers. |
|
|
|
|
| All-To-All Timing | 16(N-1) | 16(N-1)+g | g | If A: g=8 else g=0 | Recorded all-to-all time for the rank as a double-precision number. |
|
|
This is repeated for every iteration.
|
|
|
|
|
|
## Data Chunk Footer
|
|
## Data Chunk Footer
|
|
Each Data Chunk end with an "END_BLOCK" for alignment purposes.
|
|
Each Data Chunk end with an "END_BLOCK" for alignment purposes.
|
|
| Name | Start [B] | End [B] | Size [B] | Description |
|
|
| Name | Start [B] | End [B] | Size [B] | Fixed Value | Description |
|
|
|-------------------|-----------|-----------|----------|-----------------------------------------------------------|
|
|
|-------------------|-----------|-----------|----------|---------------|-----------------------------------------------------------|
|
|
| End Block | 0 | 9 | 9 | "END_BLOCK" statement indicating the end of a Data Chunk. |
|
|
| End Block | 0 | 9 | 9 | "END_BLOCK" | "END_BLOCK" statement indicating the end of a Data Chunk. |
|
|
|
|
|
|
After the Data Chunk Footer there maybe unused data till the end of a SIONlib Chunk. Please see [SIONlib](https://www.fz-juelich.de/en/ias/jsc/services/user-support/jsc-software-tools/sionlib) on how to identify the SIONlib chunk size.
|
|
|
|
|
|
|
|
# File Footer
|
|
# File Footer
|
|
The end of the file is used by SIONlib to store data inside a footer. LinkTest does not store any data in a footer. |
|
The end of the file is used by SIONlib to store data inside a footer. LinkTest does not store any data in a footer. |
|
|
|
\ No newline at end of file |