Repository navigation
add Elbencho S3 benchmark with async parallel SSH - #359
Conversation
ScopeThe diff matches the Jira ticket and PR description. Story 2 requires registering Elbencho as a benchmark class with factory integration, workload storage, and validation — all present. The Code Review[P1] [P2] [P2] [P2] [P3] [P3] SecurityCredential handling in tests: The test fixture SummaryThe registration is solid and the factory bypass logic is correct. The P1 issue around |
7e64adb to
89776a3
Compare
c6bd7e0 to
550e5d4
Compare
6463326 to
f0c2812
Compare
perezjosibm
left a comment
There was a problem hiding this comment.
Just a few changes needed, eg checking return values from pdsh, documentation. Looking very good, many thanks!
7831e76 to
9a34804
Compare
ca7c886 to
c2acff8
Compare
harriscr
left a comment
There was a problem hiding this comment.
Looking good. I like the fact we have a good set of unit tests for the new code. The structure for the remote_executor works nicely and should be easy to fit pdsh into.
Just some minor things to look at and it will be good to go
a093d6f to
3ecc16d
Compare
|
All of the above should be acknowledged now, or documented for soon-to-comes. The latest force-push has been tested with the following success log for running Elbencho: |
pdsh is being dropped from Rocky Linux 10, so the command fan-out mechanism is being moved behind an interface it can be swapped out from incrementally rather than replaced in place. The new remote/ package holds a RemoteExecutor abstract base class (run_command / run_command_with_error_checking) and a stdlib-only AsyncSSHExecutor implementation (asyncio + the system ssh binary, no third-party packages), plus the pdsh-free cluster helpers make_remote_dir/clean_remote_dir/ sync_files. common.py's pdsh code is left untouched so every existing benchmark keeps working unchanged; docs/ReplacingPdsh.md tracks the remaining migration (ceph tracker #80193). Signed-off-by: Kenan Al-Shamie <kenan.al-shamie@ibm.com> Assisted-by: Claude-v2.1.212:claude-opus-4-8
Introduce the Elbencho benchmark for S3 object workloads. It builds commands through the shared Workloads pipeline the same way librbdfio does — an ElbenchoCommand (command/elbencho_command.py) created via Workload._create_command_class, with list-valued params expanded by all_configs() — and fans the generated command strings out through a RemoteExecutor, so its whole lifecycle (binary check, dropcaches, directory setup, workload runs, result sync) is pdsh-free. The one non-obvious piece is auth threading: S3 credentials arrive as a nested dict, which the Workloads global-option collection would stringify, so they are flattened into flat string options before the base class builds the pipeline. A new execution-agnostic Workloads.command_groups() generator exposes the per-cell commands so Elbencho can drive them without the still-pdsh-based Workloads.run(). Includes the unit test suite. Signed-off-by: Kenan Al-Shamie <kenan.al-shamie@ibm.com> Assisted-by: Claude-v2.1.212:claude-opus-4-8
User-facing guide for running the Elbencho S3 benchmark via CBT: the test-plan YAML structure, the blocksize/size interaction (single-PUT vs multipart upload and the 5 MB minimum part size), running instructions, and expected result output. Links Elbencho from docs/Workloads.md. Signed-off-by: Kenan Al-Shamie <kenan.al-shamie@ibm.com> Assisted-by: Claude-v2.1.212:claude-opus-4-8
Replace the flat 'import monitoring; monitoring.start/stop()' calls with MonitoringFactory.start/stop() to match the monitoring package restructure merged in PR ceph#364. Update the corresponding test patches to target the new location. Signed-off-by: Kenan Al-Shamie <kenan.al-shamie@ibm.com> Assisted-by: IBM-Bob-v2.0.3:claude-sonnet-4-5
3ecc16d to
3c7c851
Compare
Latest push has been verified to work, above is the tail end of the log showing the workloads completing |
harriscr
left a comment
There was a problem hiding this comment.
Looks good. Thanks for your hard work on this

Summary
common.pyusingasyncio+ the systemsshbinary, so benchmarks can opt out ofpdshwith no new dependenciesbenchmark/elbencho.py— an S3 benchmark that runs its entire lifecycle (binary check, cleandir, dropcaches, workload fan-out, result pull) through the async SSH pathbenchmarkfactory.py(import + dict entry only — no changes toget_all()orall_configs())How Elbencho avoids Cartesian expansion
Elbencho's list-valued parameters (
threads,iodepth,blocksize) live inside theworkloads:block, not at the top level.all_configs()only sees top-level keys, which are all scalars or dicts, so it naturally yields a single config — no special-case code in the factory needed.Test plan
python -m unittest tests.test_bm_elbencho— 49 tests pass798 tests ran, all Elbencho tests (49) pass. The 7 failures are pre-existing post-processing test issues unrelated to our code.