`rc mirror` Upload Performance
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 78/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- rust
- Domaine
- cli, performance
Piste de recherche
Start in crates/s3/src/client.rs around lines 4300-4312, then inspect the single-part and multipart upload paths and their handling of ObjectWritePrecondition. Use the reported nested-folder benchmark as the validation baseline. Done means small preconditioned files avoid unnecessary multipart requests while If-None-Match and If-Match behavior remains correct.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
I recently compared the upload performance of rc mirror vs MinIO's mc mirror against a RustFS server.
Generally, rc mirror turned out to be about six times slower than mc mirror on my machine. I did some investigation and found two major causes for this:
mc mirrorseems to use stronger parallelization per default- Small files get uploaded by
mc mirroras singlePutObjectoperations, whereasrc mirroralways uses a multipart upload.
Point 2 means that for small files, rc mirror makes three requests instead of one, and accordingly triples the upload time. In the code (crates/s3/src/client.rs line 4300-4312, I found a reason for that, namely
// RustFS evaluates write preconditions for multipart completion. Keep
// ordinary small uploads on PutObject, but route conditional path writes
// through multipart so mirror retains compare-and-swap semantics on the
// currently deployed service.
if Self::should_use_multipart(file_size)
|| !matches!(precondition, ObjectWritePrecondition::None)
{
self.put_object_multipart_from_path(path, file_path, file_size, options, on_progress)
.await
} else {
self.put_object_single_part_from_path(path, file_path, file_size, options)
.await
}
So I understand that's a safeguard to ensure write preconditions are respected. However, since version 1.0.0-alpha.47 (rustfs/rustfs#409), RustFS also enforces If-None-Match/If-Match write preconditions on PutObject itself.
I would therefore suggest to drop the multipart upload route for small files with preconditions. I have already tested it (approx. 25k files in a nested folder structure, with average file size of ~25 KB), and it expectedly increases upload performance by roughly a factor of three for small files (still significantly slower than mc, though):
| Command | Number of runs | Average real time | Average user time | Average sys time |
|---|---|---|---|---|
mc mirror |
10 | 25.120s | 9.295s | 9.815s |
rc mirror |
10 | 168.318s | 12.236s | 16.648s |
rc mirror (skip multipart for small files) |
10 | 42.561s | 6.254s | 9.561s |
Are there any objections against this change? If not, I'd be happy to set up a PR.
- Langage dominant
- Rust
- Étoiles
- 159
- Forks
- 23
- Merge moyen
- 7 h 4 min
- PR mergées (30 j)
- 10
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de rustfs/cli
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour
-
Cannot install and update with brewPeut-être pris @overtrue l’a pris il y a 4 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
rustfs/cli#387 · 2 personnes assignées ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
rustfs/cli#389 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de rustfs/cli
Issues similaires
-
C-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
rust-lang/rust-analyzer#23501 ·
Les mainteneurs répondent en général sous 1 jour
-
Streamable HTTP client: a 401 or 403 with a JSON-RPC error body and no WWW-Authenticate loses its HTTP statusPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertebug P2 ready for work T-security T-transport
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
modelcontextprotocol/rust-sdk#1339 ·
Les mainteneurs répondent en général sous 3 jours
-
scripts/gen-gallery.py:118: a ready session now reports in_progress, so SESSION_READY_OLD can goOuvertenightly-audit
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
antithesishq/snouty#396 ·
Les mainteneurs répondent en général sous 1 jour
-
French BIP39 wordlist starts with a UTF-8 BOM, so generated French mnemonics carry U+FEFF and derive a non-canonical seedPeut-être pris @Kshot3000 l’a pris aujourd’hui. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 91/100
ergoplatform/sigma-rust#976 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour