-
Notifications
You must be signed in to change notification settings - Fork 21
_list_oids_traverse
is much slower than _list_oids
.
#178
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
@daavoo Do you have results to share for different scenarios? |
for context on traverse/no-traverse: https://iterative.ai/blog/dvc-vs-rclone The main premise behind the optimization should still be valid even with fsspec/asyncio. For push/fetch/status it's better for us to estimate size of the remote based on the size of a single prefix, and then try and determine whether it's faster to finish listing the full remote or make individual For Fixing this is really related to getting rid of our ThreadPoolExecutor usage in favor of letting fsspec handle the parallelization w/asyncio instead. |
I have realized that I was incorrectly "micro benchmarking" I was benchmarking full GC and thought that I was only including the ( I quickly rerun for 50k, 100k, 150k, and 200k.
I think this still applies, though. |
@daavoo Do you have those times and comparisons to AWS CLI? It would be helpful to get an idea if it's 1.5x slower vs 10x slower. |
I have no context behind the introduction of _list_oids_traverse but, on every scenario and remote size I have tested, it is slower than plain
_list_oids
.This has a negative performance impact for many operations, I reported the
dvc gc
case inI am guessing the idea of list traverse was introduced before the adoption of fsspec as backend.
The reality today is that the combination of
ThreadPoolExecutor
and the single fsspec async loop causes the operation to be significantly slower than a single_list_oids
call.The text was updated successfully, but these errors were encountered: