HermitCrab engine: share frozen Shapes on internal Word clones (clone 36% to 9% of profile; peak memory 11 GB to 6 GB)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
- Type d'issue
- Refactorisation
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- csharp
- Domaine
- performance
Piste de recherche
Start with the linked optimization record, ledger, and disposition to understand why the work is on an archived branch and what would justify reviving it. First re-measure whether memory is a constraint; if it is, validate parity with gloss, allomorph-index, and feature-structure signatures. Done means the memory improvement is confirmed without changing those results.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Internal Word clones deep-copy the whole Shape (every node, feature structure and annotation), but three of the four clone sites never use the copy. The change adds Word.CloneForEngine, which shares a frozen source shape and marks it shared. EnsureOwnShape copies on demand before in-place mutation, and is called in AnalysisStratumRule and SynthesisStratumRule. ResetShape and Shape.CreateEmptyLike replace clone-then-clear at the four GenerateShape sites. Public Word.Clone() still returns a deep copy. A missed mutation throws because the shared shape is frozen. This is sharing, not a cache. CloneForEngine, EnsureOwnShape, ResetShape and CreateEmptyLike are on the archived branch only.
Measured. Profile on the heaviest Sena word: Word clone 36% to 9% of wall time, Shape.CopyTo 28.6% to 13%, ReplayOnto 21.7% to 6.5%. Peak working set 11 GB to 6 GB. Wall-time attribution is unreliable on that machine. Counts are unchanged by construction.
What a revival must do first. The disposition says to reopen only if memory becomes the constraint, because the aliasing rules are subtle. Re-measure with a gloss, allomorph-index and feature-structure signature, since the old parity signature checked only morph counts.
Record: https://github.com/sillsdev/machine/blob/2eba2f502338705a4d529d7034cecb6303db7f35/docs/optimizations/shape-sharing-on-clone.md
Ledger: https://github.com/sillsdev/machine/blob/2eba2f502338705a4d529d7034cecb6303db7f35/docs/hermitcrab-optimization-ledger.md; disposition: https://github.com/sillsdev/machine/blob/2eba2f502338705a4d529d7034cecb6303db7f35/docs/hermitcrab-perf-2026-09-disposition.md
From #490 (closed).
- Langage dominant
- C#
- Étoiles
- 29
- Forks
- 16
- Merge moyen
- 6 j 7 h
- PR mergées (30 j)
- 14
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un 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 sillsdev/machine
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
Hermit Crab
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
Les mainteneurs répondent en général sous 1 jour
-
porting
Difficulté 3/5 Une demi-journée Accessibilité débutants 25/100
sillsdev/machine#617 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Hermit Crab
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de sillsdev/machine
Issues similaires
-
The Recommended preset turns on Import Uno DSP, which only works with the Material themePeut-être pris @agneszitte l’a pris aujourd’hui. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
unoplatform/uno.templates#2388 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
eyalgolan/statecraft-israel#2732 ·
Les mainteneurs répondent en général sous 1 jour
-
変換の候補のどれが Zenzai の答えか分からないOuverte要トリアージ
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
Les mainteneurs répondent en général sous 1 jour
-
kind/chore status/draft
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Altinn/altinn-events#1158 ·
Les mainteneurs répondent en général sous 1 jour
-
S: Untriaged
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Trauma-Station/Trauma-Station#5285 ·
Les mainteneurs répondent en général sous 1 jour