cls/rgw: [WIP] Make rgw_bucket_list encode bls rather than dir entries#29980
cls/rgw: [WIP] Make rgw_bucket_list encode bls rather than dir entries#29980markhpc wants to merge 1 commit intoceph:masterfrom
Conversation
Signed-off-by: Mark Nelson <mnelson@redhat.com>
|
@markhpc I don't love this, though I'd like the perf. I'd like to go over some of the comments in the description--why should we be concerned about cls_log(20) statements--are we not getting this nearly for free as hoped? |
|
@mattbenjamin Not super in love with this either to be honest. I wonder if we can do something clever to construct the BL without the directory entries but then leave the structure and decode alone so it's backwards compatible and RGW can stay the same. Ultimately if we can get encode/decode mostly out of the way in the CLS it's going to be a big help imho. Regarding performance: I'm going to run some additional tests tomorrow. I realized tonight that I was running with dynamic bucket resharding enabled which can skew the results if the resharding happens at different start offsets. Regarding cls logging: see the 5.9% and 4.5% cls_log lines in the callgraphs. We're definitely spending some time there. The real win imho is going to be either your idea regarding the hashing scheme changes or some kind of cache (perhaps even OSD side) to essentially do readahead. |
|
This pull request has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs for another 30 days. |
|
jenkins retest this please |
|
unstale, still interested in this |
|
This pull request has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs for another 30 days. |
|
This pull request has been automatically closed because there has been no activity for 90 days. Please feel free to reopen this pull request (or open a new one) if the proposed change is still appropriate. Thank you for your contribution! |
This PR is a first pass attempt to examine if we can gain performance by having rgw_bucket_list skip encoding dir entries it just decoded from the KeyValueDB and instead just directly encode the BL and pass that to RGW instead. In performance tests this appeared to result in roughly a 50% performance gain when listing a 6.4M object bucket using hsbench. Note this PR does yet implement any kind of version checking or backward compatibility support. Additional gains can be realized by removing some of the debug 20 CLS_LOG calls and potentially by restructuring the rgw_bucket_dir_entry so we can only decode filters in the OSD rather the entire thing.
A wallclock profile of the tp_osd_tp thread before:
And after:
Signed-off-by: Mark Nelson mnelson@redhat.com
Checklist
Show available Jenkins commands
jenkins retest this pleasejenkins test signedjenkins test make checkjenkins test make check arm64jenkins test submodulesjenkins test dashboardjenkins test dashboard backendjenkins test docsjenkins render docs