Sorgente originale
Gli stessi test differenziali danno 10 passati e 4 falliti: due casi per la data delle directory e due per le quattro richieste di metadati, con e senza versioning.
Benchmark S3 · prima / dopo
Prima iterazione: test contro il legacy, correzione dei metadati e misura delle prestazioni. StorageNode e backend fsspec/s3fs restano in uso.
Risultato dimostrato
Nuovo prima: 6,70 ms. Nuovo dopo: 1,52 ms. Legacy nello stesso run finale: 3,27 ms. Le richieste per il nuovo scendono da quattro a una.
Gli stessi test differenziali danno 10 passati e 4 falliti: due casi per la data delle directory e due per le quattro richieste di metadati, con e senza versioning.
Tutti i 14 test differenziali passano.
La suite finale comprende 584 test passati e 14 saltati.
I salti non sono successi: comprendono servizi opzionali assenti, configurazioni mancanti e un bug preesistente di S3 set_metadata.
I contratti verificati coprono file vuoti, binari, file da 64 KiB, nomi Unicode e spazi, letture e file temporanei, assenza, directory implicite, sovrascritture, copie, spostamenti, cancellazioni e metadati dopo invalidazione. Ogni caso S3 usa servizi reali e bucket isolati, versionati e non versionati.
Il test preesistente dei 1.001 file continua a rifiutare il listing incompleto del legacy: non abbiamo riprodotto quel limite nel nuovo. Questa matrice non certifica la parità dell'intera API legacy.
info().(None, None, True), come il legacy,
senza inventare una data. Il metodo separato mtime() conserva il comportamento precedente.src, evitando confusione con una distribuzione installata.Mediane di nove ripetizioni dopo un warmup; un worker; cache dei metadati fredda. Ogni run include entrambi i client, con ordine dei casi rimescolato. Nessun test di integrazione è stato eseguito in contemporanea con le due raccolte qui riportate.
| Operazione | Nuovo prima · ms | Nuovo dopo · ms | Legacy dopo · ms | HTTP prima → dopo / legacy |
|---|---|---|---|---|
| Attributi | 6,70 | 1,52 | 3,27 | 4 → 1 / 2 |
| Lettura | 4,10 | 2,86 | 4,40 | 2 → 2 / 3 |
| Scrittura | 5,03 | 4,11 | 18,38 | 1 → 1 / 5 |
| Copia | 16,35 | 13,22 | 6,93 | 6 → 6 / 3 |
| Spostamento | 19,87 | 18,21 | 10,51 | 10 → 10 / 6 |
| Albero con attributi | 4,88 | 3,58 | 29,76 | 1 → 1 / 18 |
| Esistenza | 1,56 | 1,40 | 1,40 | 1 → 1 / 1 |
| Listing | 3,54 | 3,42 | 4,34 | 1 → 1 / 2 |
| File temporaneo | 5,21 | 5,04 | 7,71 | 3 → 3 / 4 |
| Operazione | Nuovo prima · ms | Nuovo dopo · ms | Legacy dopo · ms | HTTP prima → dopo / legacy |
|---|---|---|---|---|
| Lettura | 157,85 | 136,42 | 145,37 | 2 → 2 / 3 |
| Scrittura | 315,75 | 293,87 | 294,00 | 1 → 1 / 5 |
| Copia | 101,80 | 89,21 | 81,94 | 6 → 6 / 3 |
| Spostamento | 122,68 | 109,07 | 101,79 | 10 → 10 / 6 |
| File temporaneo | 187,73 | 172,93 | 153,97 | 3 → 3 / 7 |
La prima prova dimostra che intervenire soltanto su Genro Storage può eliminare uno svantaggio rispetto al legacy. Non dimostra ancora la stessa cosa per tutte le operazioni.
Copia e spostamento conservano rispettivamente 6 e 10 richieste, contro 3 e 6 del legacy. Prima di specializzarli occorre estendere i contratti a directory di destinazione esistenti, copie ricorsive, collisioni fra chiavi e prefissi ed errori. I trasferimenti grandi richiedono più raccolte e un profilo dei tempi: il numero di richieste da solo non spiega tutti gli scarti.
Prima
Run 72a82c23-9820-47e7-b0d2-42111d865a09
Hash sorgente 687e9cdb67819e0030cede114b271e299095dd72db54fef2255a716455f839ce
Dopo
Run dac69290-2cbe-4b30-b484-4fedd4201269
Hash sorgente 5e52ee511f0628d3de43bbfe796804f0eadb7ca665eb906467ec700f3d409f8e
I dati grezzi e i metadati delle due raccolte sono disponibili nel
JSON della prima ottimizzazione.
Entrambe sono concluse senza campioni errati e con pulizia completata.
La raccolta preliminare 33e21eba-3441-4b80-9cfe-0aefc7a03b37,
sovrapposta ai test iniziali, è esclusa dal confronto.
BENCH_LEGACY_ROOT=/percorso/genropy python -m benchmarks --adapters legacy genro --sizes 1024 33554432 --workers 1 --repeats 9 --list-count 8 --caches cold
MINIO_ENDPOINT=http://127.0.0.1:29000 BENCH_TEST_ENDPOINT=http://127.0.0.1:29000 BENCH_LEGACY_ROOT=/percorso/genropy python -m pytest tests benchmarks/tests -q -o addopts=''