s3fs is te traag voor emacs

Ik heb een mount point opgezet met behulp van het S3fs FUSE-bestandssysteem en autofs om met een Amazon S3-bucket te praten, maar het is verschrikkelijk traag om een ​​bestand in de bucket in emacs te bewerken - het is in principe onbruikbaar vanwege de vertragingen na elke toetsaanslag, laat emacs volledig hangen totdat het zijn I/O heeft voltooid.

Wat kan ik doen om dit probleem te voorkomen?

1

2 antwoord

Dit lijkt te zijn veroorzaakt door dit probleem in het projectiel, dat ik gebruik.

Ik volgde de suggestie in een opmerking over het gebruik van deze methode:

(add-hook 'find-file-hook
          (lambda ()
            (if (locate-dominating-file default-directory ".git")
                (projectile-mode))))

dat wil zeggen verwijderen

(global-projectile-mode)

van mijn .emacs en deze te vervangen door de bovenstaande code, en de uitvoering is nu acceptabel (er is een vertraging bij het openen van het bestand en bij de eerste toetsaanslag die een bewerking van het bestand maakt, zoals ik zou doen verwachten). Dit betekent wel dat het projectiel alleen in git-projecten wordt geactiveerd, maar dat is prima voor mij - en dezelfde oplossing kan indien nodig gemakkelijk worden uitgebreid naar andere versiecontrolesystemen.

1
toegevoegd

Ik heb dit eenvoudige Linux-script in eerste instantie gebruikt om het bestand naar een snel bestandssysteem te kopiëren en het vervolgens opnieuw te kopiëren (zie mijn andere antwoord voor wat ik nu aan het doen ben). Alleen de regel die begint met TMP = moet voor andere besturingssystemen worden gewijzigd. De enige geringe complexiteit is het omgaan met gelijktijdige bewerkingen van identiek genoemde bestanden in verschillende S3-buckets (zonder de bestandsnaam te vervangen door willekeurig gegenereerde garbage, wat de gemakkelijkste oplossing zou zijn).

#! /bin/bash -peux
# Edit files from slow filesystems in emacs
TMP=/run/user/$(id -u)
dest=$TMP/"$(basename "$1")"
src_dir="$(dirname "$1")"
prefix=""
while [ -e "$dest" ]; do
    prefix="$(basename "$src_dir")/$prefix"
    src_dir="$(dirname "$src_dir")"
    if [ "$src_dir" = "/" ]; then
        echo Unable to generate unique filename >&2
        exit 2
    fi
    mkdir $TMP/"$prefix" || :
    dest=$TMP/"$prefix$(basename "$1")"
done
cp -p "$1" $dest || :
emacsclient "$dest"
cp -pu "$dest" "$1"
rm "$dest"
0
toegevoegd
Kan dit vertragen?
toegevoegd de auteur Mark Ireland, de bron
Lijkt er niet op - s3 gebruikt een eigen protocol.
toegevoegd de auteur Robin Green, de bron