Summary
Compare performance of S3ThreadPoolExecutor (sync, current default) vs S3AioExecutor (async, new) to validate the switch to AioS3FileSystem as the default in v3.30.0.
Background
PR #684 introduced the S3Executor strategy pattern, replacing hardcoded ThreadPoolExecutor usage with a pluggable interface. This eliminates thread-in-thread nesting when aio cursors use S3FileSystem. Before making AioS3FileSystem the default for async paths, we need empirical performance data.
Related:
Benchmark Scope
Scenarios
| Scenario |
Description |
| Query result fetch |
AioS3FSCursor fetch performance (small/medium/large result sets) |
| Large file read |
Multipart range read via _fetch_range |
| Large file write |
Multipart upload via commit |
| Parallel copy |
_copy_object_with_multipart_upload |
Metrics
- Wall-clock time (latency)
- Throughput (MB/s)
- Concurrency behavior under varying
max_workers
Comparison
S3FileSystem + S3ThreadPoolExecutor (sync baseline)
AioS3FileSystem + S3AioExecutor (async candidate)
Acceptance Criteria
Summary
Compare performance of
S3ThreadPoolExecutor(sync, current default) vsS3AioExecutor(async, new) to validate the switch toAioS3FileSystemas the default in v3.30.0.Background
PR #684 introduced the
S3Executorstrategy pattern, replacing hardcodedThreadPoolExecutorusage with a pluggable interface. This eliminates thread-in-thread nesting when aio cursors useS3FileSystem. Before makingAioS3FileSystemthe default for async paths, we need empirical performance data.Related:
Benchmark Scope
Scenarios
AioS3FSCursorfetch performance (small/medium/large result sets)_fetch_rangecommit_copy_object_with_multipart_uploadMetrics
max_workersComparison
S3FileSystem+S3ThreadPoolExecutor(sync baseline)AioS3FileSystem+S3AioExecutor(async candidate)Acceptance Criteria