Type
Perf / investigation (not a confirmed defect) — may well be inherent to the COG-WSI layout; filing so the cost is measured and the spool path is looked at deliberately.
Observation
A no-transform, no-codec-change convert (verbatim tile-copy) from SVS to cog-wsi runs ~10× slower than the same tile-copy to tiff/ome-tiff, for byte-identical output size. Controlled, back-to-back, -q, same source (CMU-2.svs, 78000×30462, jpeg tiles):
svs -> ome-tiff 1.08s / 0.94s out 402,743,571
svs -> tiff 0.94s / 0.97s out 402,740,907
svs -> cog-wsi 9.95s / 9.90s out 402,717,328
Reproducible and stable when isolated (run-to-run variance in a full batch was just concurrency). Output size ≈ the jpeg copies, so tiles are not being re-encoded to htj2k — the same compressed bytes are written, but the cog-wsi writer spends ~9s of extra wall-clock the plain-TIFF / OME-TIFF writers don't.
Repro:
wsitools convert --to tiff -q -f -o out.tiff CMU-2.svs # ~1s
wsitools convert --to ome-tiff -q -f -o out.ome.tiff CMU-2.svs # ~1s
wsitools convert --to cog-wsi -q -f -o out.cog.tiff CMU-2.svs # ~10s
Probable cause
COG-WSI writes its IFDs up front (offsets must precede the tile data for a cloud-optimized layout), so later IFDs have to be spooled to generate the pointers — an extra pass / buffering that the append-as-you-go plain-TIFF and OME-TIFF writers avoid. So some overhead is expected by construction.
Question for the investigation
Is the ~10× (≈9s of added wall-clock on a ~400 MB verbatim copy) proportionate to the unavoidable spooling, or is there avoidable per-tile overhead in the spool path — e.g. an extra decode/copy pass, per-tile allocation, unbuffered spool I/O, or work that could be single-pass with offset back-patching? A quick profile of the cogwsi write path on this input would settle whether ~10× is the floor or has headroom.
Likely related: #3 (deterministic write mode for cogwsiwriter).
Environment
wsitools 0.26.3, Windows (MSYS2/MinGW). Numbers above are from tile-copy (no --codec, no transform).
Type
Perf / investigation (not a confirmed defect) — may well be inherent to the COG-WSI layout; filing so the cost is measured and the spool path is looked at deliberately.
Observation
A no-transform, no-codec-change
convert(verbatim tile-copy) from SVS tocog-wsiruns ~10× slower than the same tile-copy totiff/ome-tiff, for byte-identical output size. Controlled, back-to-back,-q, same source (CMU-2.svs, 78000×30462, jpeg tiles):Reproducible and stable when isolated (run-to-run variance in a full batch was just concurrency). Output size ≈ the jpeg copies, so tiles are not being re-encoded to htj2k — the same compressed bytes are written, but the cog-wsi writer spends ~9s of extra wall-clock the plain-TIFF / OME-TIFF writers don't.
Repro:
Probable cause
COG-WSI writes its IFDs up front (offsets must precede the tile data for a cloud-optimized layout), so later IFDs have to be spooled to generate the pointers — an extra pass / buffering that the append-as-you-go plain-TIFF and OME-TIFF writers avoid. So some overhead is expected by construction.
Question for the investigation
Is the ~10× (≈9s of added wall-clock on a ~400 MB verbatim copy) proportionate to the unavoidable spooling, or is there avoidable per-tile overhead in the spool path — e.g. an extra decode/copy pass, per-tile allocation, unbuffered spool I/O, or work that could be single-pass with offset back-patching? A quick profile of the cogwsi write path on this input would settle whether ~10× is the floor or has headroom.
Likely related: #3 (deterministic write mode for cogwsiwriter).
Environment
wsitools 0.26.3, Windows (MSYS2/MinGW). Numbers above are from tile-copy (no
--codec, no transform).