Skip to content

Commit 1806466

Browse files
Feat/txpool latency qps (#6)
* Refactor tx_pool_latency_analysis configuration to include QPS parameter and reorder fields for improved clarity * change task config * Enhance transaction latency analysis by implementing synchronized arrays for precise latency measurement and improving transaction sending logic. Added QPS-based transaction distribution and refined logging for better monitoring of transaction flow. * Revert "Enhance transaction latency analysis by implementing synchronized arrays for precise latency measurement and improving transaction sending logic. Added QPS-based transaction distribution and refined logging for better monitoring of transaction flow." This reverts commit 31355d6. * refactoring, check p2p message vs tx * initial refactoring (to complete) * Refactor tx_pool_latency_analysis task configuration to use QPS and adjust parameters for improved performance and clarity * solve concurrency problem * small fixes * check tx index range * fix(get_task_result_api) * fix(server) * fix(execution-spec-tests-execute.yaml) * fix(build-release) * fix(build-release) * feat(res/execution-spec-tests-styles.css) * feat(test_run) * refactor(build-master.yml): update Docker repository and improve wiki generation steps * fix p2p event loop error condition * fix(run_shell) * lint * lint(server) * lint * lint * Update tx-pool-check-short.yaml: modify transaction pool analysis tasks to use tps instead of qps and adjust parameters for improved performance * replace QPS with TPS * fix loop boundary * Update transaction generation logic to extend test duration and improve logging for negative sleep time * Reduce transaction duration in tx-pool-check-short.yaml from 30 seconds to 10 seconds for improved testing efficiency * Swap names and titles of transaction pool analysis tasks in tx-pool-check-short.yaml for clarity and consistency * complete throughput task * Rename transaction variable in tx pool throughput analysis task for clarity and consistency * rename mean_throughput * Add duplicated p2p event logging and counting in tx pool latency analysis * Implement coordinated omission events counting in tx pool latency analysis * Remove logging of duplicated p2p events in tx pool latency analysis * Add TODO for timeout implementation in duplicated p2p event handling in tx pool latency analysis * Implement coordinated omission events logging and output in tx pool throughput analysis * Swap names and titles of latency and throughput analysis tasks in tx-pool-check-short.yaml for clarity. * fix * fix tx gen and parsing * move exit check * Swap names and titles of throughput and latency analysis tasks in tx-pool-check-short.yaml for consistency. * add logs; more uniform code * fix termination condition * Enhance readUntil function to support context for timeout handling and update ReadTransactionMessages to accept an optional timeout parameter. * Update error message in readUntil function to use a simplified format for timeout handling. * Refactor tx-pool-check.yaml to update transaction pool latency and throughput configurations, changing parameters to tps and duration_s for consistency and clarity. --------- Co-authored-by: Michelangelo Riccobene <michelangelo.riccobene@gmail.com>
1 parent 5e3ded3 commit 1806466

File tree

18 files changed

+1847
-836
lines changed

18 files changed

+1847
-836
lines changed

.github/workflows/build-master.yml

Lines changed: 173 additions & 190 deletions
Large diffs are not rendered by default.
Lines changed: 113 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
name: Build Release
23

34
on:
@@ -18,133 +19,133 @@ jobs:
1819
ref: ${{ github.sha }}
1920
release: "v${{ inputs.version }}"
2021
docker: true
21-
docker_repository: "ethpandaops/assertoor"
22+
docker_repository: "noku-team/assertoor"
2223
docker_tag_prefix: "v${{ inputs.version }}"
2324
additional_tags: "['v${{ inputs.version }}','latest']"
2425
secrets:
2526
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
2627
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
27-
28+
2829
create_release:
2930
name: Create Release
3031
needs: [build_binaries]
3132
runs-on: ubuntu-latest
3233
steps:
33-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
34-
with:
35-
fetch-depth: 100
36-
ref: ${{ github.sha }}
37-
- name: "Generate release changelog"
38-
id: changelog
39-
run: |
40-
git fetch --tags
41-
prev_tag=$(git tag --sort=-version:refname | grep -e "^v[0-9.]*$" | head -n 1)
42-
echo "previous release: $prev_tag"
43-
if [ "$prev_tag" ]; then
44-
changelog=$(git log --oneline --no-decorate $prev_tag..HEAD)
45-
else
46-
changelog=$(git log --oneline --no-decorate)
47-
fi
48-
echo "changelog<<EOF" >> $GITHUB_OUTPUT
49-
echo " - ${changelog//$'\n'/$'\n' - }" >> $GITHUB_OUTPUT
50-
echo "EOF" >> $GITHUB_OUTPUT
34+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
35+
with:
36+
fetch-depth: 100
37+
ref: ${{ github.sha }}
38+
- name: "Generate release changelog"
39+
id: changelog
40+
run: |
41+
git fetch --tags
42+
prev_tag=$(git tag --sort=-version:refname | grep -e "^v[0-9.]*$" | head -n 1)
43+
echo "previous release: $prev_tag"
44+
if [ "$prev_tag" ]; then
45+
changelog=$(git log --oneline --no-decorate $prev_tag..HEAD)
46+
else
47+
changelog=$(git log --oneline --no-decorate)
48+
fi
49+
echo "changelog<<EOF" >> $GITHUB_OUTPUT
50+
echo " - ${changelog//$'\n'/$'\n' - }" >> $GITHUB_OUTPUT
51+
echo "EOF" >> $GITHUB_OUTPUT
5152
5253
# download build artifacts
5354
- name: "Download build artifacts"
5455
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
5556

56-
# create draft release
57-
- name: Create latest release
58-
uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4
59-
id: create_release
60-
with:
61-
draft: true
62-
prerelease: false
63-
release_name: "v${{ inputs.version }}"
64-
tag_name: "v${{ inputs.version }}"
65-
body: |
66-
### Changes
67-
${{ steps.changelog.outputs.changelog }}
68-
69-
### Release Artifacts
70-
Please read through the [wiki](https://github.com/ethpandaops/assertoor/wiki) for setup & configuration instructions.
71-
| Release File | Description |
72-
| ------------- | ------------- |
73-
| [assertoor_${{ inputs.version }}_windows_amd64.zip](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_windows_amd64.zip) | assertoor executables for windows/amd64 |
74-
| [assertoor_${{ inputs.version }}_linux_amd64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_linux_amd64.tar.gz) | assertoor executables for linux/amd64 |
75-
| [assertoor_${{ inputs.version }}_linux_arm64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_linux_arm64.tar.gz) | assertoor executables for linux/arm64 |
76-
| [assertoor_${{ inputs.version }}_darwin_amd64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_darwin_amd64.tar.gz) | assertoor executable for macos/amd64 |
77-
| [assertoor_${{ inputs.version }}_darwin_arm64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_darwin_arm64.tar.gz) | assertoor executable for macos/arm64 |
78-
env:
79-
GITHUB_TOKEN: ${{ github.token }}
80-
81-
# generate & upload release artifacts
82-
- name: "Generate release package: assertoor_${{ inputs.version }}_windows_amd64.zip"
83-
run: |
84-
cd assertoor_windows_amd64
85-
zip -r -q ../assertoor_${{ inputs.version }}_windows_amd64.zip .
86-
- name: "Upload release artifact: assertoor_${{ inputs.version }}_windows_amd64.zip"
87-
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
88-
with:
89-
upload_url: ${{ steps.create_release.outputs.upload_url }}
90-
asset_path: ./assertoor_${{ inputs.version }}_windows_amd64.zip
91-
asset_name: assertoor_${{ inputs.version }}_windows_amd64.zip
92-
asset_content_type: application/octet-stream
93-
env:
94-
GITHUB_TOKEN: ${{ github.token }}
95-
96-
- name: "Generate release package: assertoor_${{ inputs.version }}_linux_amd64.tar.gz"
97-
run: |
98-
cd assertoor_linux_amd64
99-
tar -czf ../assertoor_${{ inputs.version }}_linux_amd64.tar.gz .
100-
- name: "Upload release artifact: assertoor_${{ inputs.version }}_linux_amd64.tar.gz"
101-
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
102-
with:
103-
upload_url: ${{ steps.create_release.outputs.upload_url }}
104-
asset_path: ./assertoor_${{ inputs.version }}_linux_amd64.tar.gz
105-
asset_name: assertoor_${{ inputs.version }}_linux_amd64.tar.gz
106-
asset_content_type: application/octet-stream
107-
env:
108-
GITHUB_TOKEN: ${{ github.token }}
57+
# create draft release
58+
- name: Create latest release
59+
uses: actions/create-release@0cb9c9b65d5d1901c1f53e5e66eaf4afd303e70e # v1.1.4
60+
id: create_release
61+
with:
62+
draft: true
63+
prerelease: false
64+
release_name: "v${{ inputs.version }}"
65+
tag_name: "v${{ inputs.version }}"
66+
body: |
67+
### Changes
68+
${{ steps.changelog.outputs.changelog }}
10969
110-
- name: "Generate release package: assertoor_${{ inputs.version }}_linux_arm64.tar.gz"
111-
run: |
112-
cd assertoor_linux_arm64
113-
tar -czf ../assertoor_${{ inputs.version }}_linux_arm64.tar.gz .
114-
- name: "Upload release artifact: assertoor_${{ inputs.version }}_linux_arm64.tar.gz"
115-
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
116-
with:
117-
upload_url: ${{ steps.create_release.outputs.upload_url }}
118-
asset_path: ./assertoor_${{ inputs.version }}_linux_arm64.tar.gz
119-
asset_name: assertoor_${{ inputs.version }}_linux_arm64.tar.gz
120-
asset_content_type: application/octet-stream
121-
env:
122-
GITHUB_TOKEN: ${{ github.token }}
70+
### Release Artifacts
71+
Please read through the [wiki](https://github.com/noku-team/assertoor/wiki) for setup & configuration instructions.
72+
| Release File | Description |
73+
| ------------- | ------------- |
74+
| [assertoor_${{ inputs.version }}_windows_amd64.zip](https://github.com/noku-team/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_windows_amd64.zip) | assertoor executables for windows/amd64 |
75+
| [assertoor_${{ inputs.version }}_linux_amd64.tar.gz](https://github.com/noku-team/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_linux_amd64.tar.gz) | assertoor executables for linux/amd64 |
76+
| [assertoor_${{ inputs.version }}_linux_arm64.tar.gz](https://github.com/noku-team/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_linux_arm64.tar.gz) | assertoor executables for linux/arm64 |
77+
| [assertoor_${{ inputs.version }}_darwin_amd64.tar.gz](https://github.com/noku-team/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_darwin_amd64.tar.gz) | assertoor executable for macos/amd64 |
78+
| [assertoor_${{ inputs.version }}_darwin_arm64.tar.gz](https://github.com/noku-team/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_darwin_arm64.tar.gz) | assertoor executable for macos/arm64 |
79+
env:
80+
GITHUB_TOKEN: ${{ github.token }}
12381

124-
- name: "Generate release package: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz"
125-
run: |
126-
cd assertoor_darwin_amd64
127-
tar -czf ../assertoor_${{ inputs.version }}_darwin_amd64.tar.gz .
128-
- name: "Upload release artifact: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz"
129-
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
130-
with:
131-
upload_url: ${{ steps.create_release.outputs.upload_url }}
132-
asset_path: ./assertoor_${{ inputs.version }}_darwin_amd64.tar.gz
133-
asset_name: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz
134-
asset_content_type: application/octet-stream
135-
env:
136-
GITHUB_TOKEN: ${{ github.token }}
82+
# generate & upload release artifacts
83+
- name: "Generate release package: assertoor_${{ inputs.version }}_windows_amd64.zip"
84+
run: |
85+
cd assertoor_windows_amd64
86+
zip -r -q ../assertoor_${{ inputs.version }}_windows_amd64.zip .
87+
- name: "Upload release artifact: assertoor_${{ inputs.version }}_windows_amd64.zip"
88+
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
89+
with:
90+
upload_url: ${{ steps.create_release.outputs.upload_url }}
91+
asset_path: ./assertoor_${{ inputs.version }}_windows_amd64.zip
92+
asset_name: assertoor_${{ inputs.version }}_windows_amd64.zip
93+
asset_content_type: application/octet-stream
94+
env:
95+
GITHUB_TOKEN: ${{ github.token }}
96+
97+
- name: "Generate release package: assertoor_${{ inputs.version }}_linux_amd64.tar.gz"
98+
run: |
99+
cd assertoor_linux_amd64
100+
tar -czf ../assertoor_${{ inputs.version }}_linux_amd64.tar.gz .
101+
- name: "Upload release artifact: assertoor_${{ inputs.version }}_linux_amd64.tar.gz"
102+
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
103+
with:
104+
upload_url: ${{ steps.create_release.outputs.upload_url }}
105+
asset_path: ./assertoor_${{ inputs.version }}_linux_amd64.tar.gz
106+
asset_name: assertoor_${{ inputs.version }}_linux_amd64.tar.gz
107+
asset_content_type: application/octet-stream
108+
env:
109+
GITHUB_TOKEN: ${{ github.token }}
110+
111+
- name: "Generate release package: assertoor_${{ inputs.version }}_linux_arm64.tar.gz"
112+
run: |
113+
cd assertoor_linux_arm64
114+
tar -czf ../assertoor_${{ inputs.version }}_linux_arm64.tar.gz .
115+
- name: "Upload release artifact: assertoor_${{ inputs.version }}_linux_arm64.tar.gz"
116+
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
117+
with:
118+
upload_url: ${{ steps.create_release.outputs.upload_url }}
119+
asset_path: ./assertoor_${{ inputs.version }}_linux_arm64.tar.gz
120+
asset_name: assertoor_${{ inputs.version }}_linux_arm64.tar.gz
121+
asset_content_type: application/octet-stream
122+
env:
123+
GITHUB_TOKEN: ${{ github.token }}
124+
125+
- name: "Generate release package: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz"
126+
run: |
127+
cd assertoor_darwin_amd64
128+
tar -czf ../assertoor_${{ inputs.version }}_darwin_amd64.tar.gz .
129+
- name: "Upload release artifact: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz"
130+
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
131+
with:
132+
upload_url: ${{ steps.create_release.outputs.upload_url }}
133+
asset_path: ./assertoor_${{ inputs.version }}_darwin_amd64.tar.gz
134+
asset_name: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz
135+
asset_content_type: application/octet-stream
136+
env:
137+
GITHUB_TOKEN: ${{ github.token }}
137138

138-
- name: "Generate release package: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz"
139-
run: |
140-
cd assertoor_darwin_arm64
141-
tar -czf ../assertoor_${{ inputs.version }}_darwin_arm64.tar.gz .
142-
- name: "Upload release artifact: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz"
143-
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
144-
with:
145-
upload_url: ${{ steps.create_release.outputs.upload_url }}
146-
asset_path: ./assertoor_${{ inputs.version }}_darwin_arm64.tar.gz
147-
asset_name: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz
148-
asset_content_type: application/octet-stream
149-
env:
150-
GITHUB_TOKEN: ${{ github.token }}
139+
- name: "Generate release package: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz"
140+
run: |
141+
cd assertoor_darwin_arm64
142+
tar -czf ../assertoor_${{ inputs.version }}_darwin_arm64.tar.gz .
143+
- name: "Upload release artifact: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz"
144+
uses: actions/upload-release-asset@e8f9f06c4b078e705bd2ea027f0926603fc9b4d5 # v1.0.2
145+
with:
146+
upload_url: ${{ steps.create_release.outputs.upload_url }}
147+
asset_path: ./assertoor_${{ inputs.version }}_darwin_arm64.tar.gz
148+
asset_name: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz
149+
asset_content_type: application/octet-stream
150+
env:
151+
GITHUB_TOKEN: ${{ github.token }}

pkg/coordinator/tasks/run_shell/task.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ func (t *Task) storeTaskResults(summaryFile *resultFile, resultDir string) {
396396
TaskID: uint64(t.ctx.Index),
397397
Type: "result",
398398
Index: fileIdx,
399-
Name: file.Name(),
399+
Name: fmt.Sprintf("%v%v", prefix, file.Name()),
400400
Size: uint64(len(data)),
401401
Data: data,
402402
}); err3 != nil {

pkg/coordinator/tasks/tx_pool_latency_analysis/README.md

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,39 @@ The `tx_pool_latency_analysis` task evaluates latency of transaction processing
99
- **`privateKey`**:
1010
The private key of the account to use for sending transactions.
1111

12-
- **`txCount`**:
13-
The total number of transactions to send.
12+
- **`tps`**:
13+
The total number of transactions to send in one second.
14+
15+
- **`duration_s`**:
16+
The test duration (the number of transactions to send is calculated as `tps * duration_s`).
1417

1518
- **`measureInterval`**:
1619
The interval at which the script logs progress (e.g., every 100 transactions).
1720

18-
- **`highLatency`**:
19-
The expected average transaction latency in milliseconds.
20-
21-
- **`failOnHighLatency`**:
22-
Whether the task should fail if the measured latency exceeds `highLatency`.
23-
24-
2521
### Outputs
2622

2723
- **`tx_count`**:
2824
The total number of transactions sent.
2925

30-
- **`avg_latency_ms`**:
31-
The average latency of the transactions in milliseconds.
26+
- **`min_latency_mus`**:
27+
The min latency of the transactions in microseconds.
28+
29+
- **`max_latency_mus`**:
30+
The max latency of the transactions in microseconds.
31+
32+
- **`tx_pool_latency_hdr_plot`**:
33+
The HDR plot of the transaction pool latency.
3234

3335
### Defaults
3436

3537
```yaml
3638
- name: tx_pool_latency_analysis
3739
config:
38-
txCount: 15000
40+
tps: 100
41+
duration_s: 10
3942
measureInterval: 1000
40-
highLatency: 5000
41-
failOnHighLatency: false
4243
configVars:
43-
privateKey: "tx_pool_latency_analysis"
44+
privateKey: "walletPrivkey"
4445
```
46+
47+

pkg/coordinator/tasks/tx_pool_latency_analysis/config.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@ package txpoollatencyanalysis
33
type Config struct {
44
PrivateKey string `yaml:"privateKey" json:"privateKey"`
55

6-
TxCount int `yaml:"txCount" json:"txCount"`
6+
TPS int `yaml:"tps" json:"tps"`
7+
Duration_s int `yaml:"duration_s" json:"duration_s"`
78
MeasureInterval int `yaml:"measureInterval" json:"measureInterval"`
8-
HighLatency int64 `yaml:"highLatency" json:"highLatency"`
9-
FailOnHighLatency bool `yaml:"failOnHighLatency" json:"failOnHighLatency"`
109
SecondsBeforeRunning int64 `yaml:"secondsBeforeRunning" json:"secondsBeforeRunning"`
1110
}
1211

1312
func DefaultConfig() Config {
1413
return Config{
15-
TxCount: 1000,
14+
TPS: 100,
15+
Duration_s: 60,
1616
MeasureInterval: 100,
17-
HighLatency: 5000, // in microseconds
18-
FailOnHighLatency: true,
1917
SecondsBeforeRunning: 0,
2018
}
2119
}

0 commit comments

Comments
 (0)