Considerazioni sulle prestazioni

Questa pagina fornisce indicazioni sulla configurazione dell'ambiente Parallelstore per ottenere le migliori prestazioni.

Consigli generali

  • Rimuovi eventuali alias da ls per migliorare il rendimento predefinito. Su molti sistemi, è associato all'alias ls -color=auto, che è molto più lento con la configurazione predefinita di Parallelstore.

  • Se le prestazioni delle operazioni sugli elenchi sono lente, valuta la possibilità di attivare la memorizzazione nella cache per il montaggio di dfuse.

Libreria di intercettazione

La libreria libioil può essere utilizzata per migliorare le prestazioni delle operazioni di lettura e scrittura su DFuse da applicazioni che utilizzano libc. La libreria aggira il kernel intercettando le chiamate di lettura e scrittura POSIX dall'applicazione per gestirle direttamente nello spazio utente. Per maggiori dettagli, consulta la libreria di intercettazione.

Nella maggior parte dei casi, consigliamo di utilizzare la libreria di intercettazione su un'invocazione per processo o per applicazione.

Le situazioni in cui potresti non volere o non dover utilizzare la libreria di intercettazione includono:

  • Solo le applicazioni create con libc possono utilizzare la libreria di intercettazione.
  • Se hai un carico di lavoro che trae vantaggio dalla memorizzazione nella cache, ad esempio l'accesso ripetuto agli stessi file, ti consigliamo di non utilizzare la libreria di intercettazione.
  • Se il tuo carico di lavoro prevede un uso intensivo di metadati, ad esempio se lavori con molti file di piccole dimensioni o con un elenco di directory molto grande, la libreria di intercettazione probabilmente non migliorerà le prestazioni.

L'invocazione di LD_PRELOAD può essere impostata come variabile di ambiente nell'ambiente shell, ma a volte questa operazione può causare problemi. Ti consigliamo invece di specificarlo con ogni comando.

In alternativa, è possibile collegare la libreria di intercettazione all'applicazione in fase di compilazione con il flag -lioil.

dfuse memorizzazione nella cache

La memorizzazione nella cache è attiva in dfuse per impostazione predefinita.

dfuse utilizza due flag relativi alla cache quando monta un'istanza Parallelstore:

  • --disable-wb-cache utilizza la memorizzazione nella cache write-through anziché write-back.
  • --disable-caching disattiva tutta la memorizzazione nella cache.

I seguenti suggerimenti si applicano alla memorizzazione nella cache e al rendimento:

  • Se utilizzi la libreria di intercettazione, la memorizzazione nella cache di scrittura viene ignorata. Ti consigliamo di specificare --disable-wb-cache quando utilizzi la libreria di intercettazione.
  • Se il tuo carico di lavoro prevede la lettura di molti file una volta, devi disattivare la memorizzazione nella cache.
  • Per i carichi di lavoro che coinvolgono molti client che modificano i file e gli aggiornamenti devono essere disponibili immediatamente per altri client, devi disattivare la memorizzazione nella cache.
  • Se il tuo carico di lavoro legge gli stessi file ripetutamente, la memorizzazione nella cache può migliorare le prestazioni. Ciò è particolarmente vero se i file rientrano nella memoria dei clienti. dfuse utilizza la cache di pagine di Linux per la memorizzazione nella cache.
  • Per i carichi di lavoro costituiti da piccole I/O su file di grandi dimensioni, oltre a attivare la memorizzazione nella cache, può essere utile aumentare la lettura anticipata di dfuse. Per aumentare la lettura anticipata di dfuse, dopo aver montato dfuse, esegui i seguenti comandi:

    echo 4096 > /sys/class/bdi/\$(mountpoint -d /mnt)/read_ahead_kb
    echo 100 > /sys/class/bdi/\$(mountpoint -d /mnt)/max_ratio
    

Se i tuoi carichi di lavoro prevedono una combinazione degli scenari precedenti, puoi montare la stessa istanza Parallelstore su più punti di montaggio con impostazioni di memorizzazione nella cache diverse.

Conteggio thread e conteggi coda eventi

Quando monti l'istanza Parallelstore, ti consigliamo i seguenti valori per --thread-count e --eq-count:

  • Il valore del numero di thread non deve superare il numero di core vCPU.
  • Il valore massimo consigliato per il numero di fili è compreso tra 16 e 20. Oltre questo numero, i vantaggi in termini di prestazioni sono minimi o nulli, indipendentemente dal numero di core disponibili.
  • Il valore della coda di eventi deve essere la metà del valore del numero di thread.

Se il tuo carico di lavoro prevede un numero molto elevato di operazioni su file di piccole dimensioni e un accesso elevato ai metadati, puoi provare ad aumentare i numeri oltre questi consigli.

Impostazione di striping dei file

Lo striping dei file è una tecnica di archiviazione dei dati in cui un file viene suddiviso in blocchi o strisce e distribuito su più destinazioni di archiviazione. Lo striping dei file può aumentare le prestazioni consentendo letture e scritture parallele su più target di archiviazione di supporto dell'istanza.

Quando crei l'istanza Parallelstore, puoi specificare una delle tre impostazioni di spianamento dei file:

  • Minimo
  • Bilanciato
  • Massimo

Queste impostazioni possono avere un'importanza significativa sul rendimento di Parallelstore. Per la maggior parte dei carichi di lavoro, consigliamo l'impostazione bilanciata, che dovrebbe essere un compromesso ragionevole per la maggior parte dei carichi di lavoro. Se il rendimento con l'impostazione bilanciata non è accettabile:

  • L'impostazione minima può migliorare le prestazioni per i workload con molti file di piccole dimensioni, in particolare quando le dimensioni medie dei file sono inferiori a 256 KB.

  • L'impostazione massima può migliorare le prestazioni per i carichi di lavoro con file molto grandi, in genere superiori a 8 GB, in particolare quando molti client condividono l'accesso agli stessi file.

Per la regolazione avanzata, lo strumento daos fornisce impostazioni per file o directory. La sperimentazione della regolazione avanzata comporta rischi relativi al rendimento e in genere non è consigliata. Per ulteriori dettagli, consulta Informazioni sulla ridondanza e sullo sharding dei dati nei DAOS.

Impostazione di striping della directory

Quando crei l'istanza Parallelstore, puoi specificare una delle tre impostazioni di striping delle directory:

  • Minimo
  • Bilanciato
  • Massimo

Per la maggior parte dei carichi di lavoro, consigliamo l'impostazione massima.

Per i carichi di lavoro che prevedono molte schede di directory di grandi dimensioni, le impostazioni bilanciate o minime possono migliorare il rendimento dell'elenco. Tuttavia, il funzionamento di altre operazioni, in particolare la creazione di file, potrebbe risentirne.

multiutente

Quando utilizzi lo strumento dfuse per montare l'istanza Parallelstore, ti consigliamo di specificare il flag --multi-user. Questo flag indica al kernel di rendere il sistema di file disponibile a tutti gli utenti di un client, anziché solo all'utente che esegue il processo DFuse. DFuse viene visualizzato come un file system generico multiutente e le chiamate chown e chgrp standard vengono attivate. Tutte le voci del file system sono di proprietà dell'utente che le ha create, come è normale in un file system POSIX,

Quando specifichi il flag --multi-user, devi anche aggiornare /etc/fuse.conf come utente root aggiungendo la seguente riga:

user_allow_other

Sembra che il montaggio dell'istanza come multiutente non abbia implicazioni sulle prestazioni.

Impostazione di codifica a cancellazione

La codifica a correzione di errori è impostata su 2+1. Questa impostazione non può essere modificata. Qualsiasi I/O che non utilizza EC2+1 viene rifiutata.

Allokazione delle risorse dei container sidecar di Google Kubernetes Engine

Nella maggior parte dei casi, le prestazioni insoddisfacenti con Google Kubernetes Engine e Parallelstore sono causate da una quantità insufficiente di CPU o memoria allocata al contenitore sidecar Parallelstore. Per allocare correttamente le risorse, prendi in considerazione i seguenti suggerimenti:

  • Leggi le considerazioni evidenziate in Configurare le risorse per il contenitore sidecar. Scoprirai perché potresti dover aumentare l'allocazione delle risorse e come configurare l'allocazione delle risorse dei container sidecar utilizzando le annotazioni del pod.

  • Puoi utilizzare il valore 0 per disattivare eventuali richieste o limiti di risorse nei cluster standard. Ad esempio, impostando gke-parallelstore/cpu-limit: 0 e gke-parallelstore/memory-limit: 0, i limiti di CPU e memoria del contenitore sidecar saranno vuoti e verranno utilizzate le richieste predefinite. Questa impostazione è utile quando non sai quante risorse sono necessarie per i tuoi carichi di lavoro e vuoi che dfuse utilizzi tutte le risorse disponibili su un nodo. Dopo aver capito quante risorse sono necessarie per dfuse in base alle metriche del carico di lavoro, puoi impostare limiti appropriati.

  • Nei cluster Autopilot, non puoi utilizzare il valore 0 per annullare l'impostazione dei limiti e delle richieste di risorse dei container sidecar. Devi impostare esplicitamente un limite di risorse più elevato per il contenitore sidecar sui cluster Autopilot e fare affidamento sulle Google Cloud metriche per decidere se è necessario aumentare il limite di risorse.