Lettura anticipata NFS di Linux

Questa pagina descrive come ottimizzare il read-ahead NFS sui client Linux che montano i NetApp Volumes. Il read-ahead consente al kernel di precaricare i blocchi di file prima che un'applicazione li richieda, il che migliora la velocità effettiva di lettura sequenziale. Il read-ahead non sostituisce le opzioni di montaggio o l'ottimizzazione della concorrenza; configura prima queste opzioni. Per saperne di più, vedi Ottimizzare i client NFS Linux.

Prima di iniziare

Completa i seguenti prerequisiti prima di ottimizzare il read-ahead NFS:

  • Se prevedi di ottimizzare la tabella degli slot o gli slot di sessione, completa la concorrenza NFS Linux prima.

  • Monta il volume con le opzioni di montaggio NFS Linux appropriate, inclusa rsize. Per saperne di più, vedi Opzioni di montaggio NFS Linux.

  • Ottimizza il read-ahead dopo aver montato il volume.

Panoramica del read-ahead

Quando un'applicazione legge un file in sequenza, il client NFS Linux può richiedere dati aggiuntivi oltre alla lettura corrente. In questo modo, la latenza di rete viene nascosta e la velocità effettiva aumenta per i carichi di lavoro sequenziali, come la riproduzione dei log, lo streaming di contenuti multimediali, la copia collettiva e alcune scansioni di analisi.

Il read-ahead viene configurato per punto di montaggio. È meno efficace per i carichi di lavoro di lettura casuale rispetto ai carichi di lavoro di lettura sequenziale.

Valori predefiniti e rsize

Molte distribuzioni Linux impostano il read-ahead su circa 15 volte rsize. Alcune distribuzioni utilizzano un read-ahead fisso di 128 KiB indipendentemente da rsize, il che può ridurre le prestazioni di lettura sequenziale dopo un upgrade. Controlla il valore corrente nel file system montato prima di modificarlo.

Visualizzare il read-ahead per un montaggio

Ogni punto di montaggio NFS ha un dispositivo a blocchi di backup corrispondente in /sys/class/bdi/. Per trovare l'identificatore del dispositivo a blocchi di backup (BDI) e visualizzare il valore read_ahead_kb corrente, completa i seguenti passaggi:

  1. Individua il montaggio in /proc/self/mountinfo e prendi nota dell'identificatore BDI nel terzo campo.

  2. Leggi il valore in kilobyte:

    cat /sys/class/bdi/BDEV/read_ahead_kb
    

Scegliere un valore di read-ahead

Utilizza le seguenti linee guida per selezionare un valore di read-ahead appropriato per il tuo carico di lavoro:

  • Se non hai bisogno delle massime prestazioni, mantieni il valore predefinito della distribuzione e non ottimizzare il read-ahead.

  • Inizia con 15 volte rsize (in KiB) se la distribuzione non lo imposta più automaticamente.

  • Per rsize=1048576 (1 MiB), 15 volte rsize è di circa 15.360 KiB (15 MiB).

  • Aumenta o diminuisci il valore in passaggi e misura le prestazioni utilizzando l'applicazione e nfsiostat. Prima di utilizzarli in produzione,testa i valori superiori a 15.360 KiB.

Il read-ahead interagisce con la cache delle pagine. I carichi di lavoro che ignorano la cache (O_DIRECT) non traggono vantaggio dal read-ahead come le letture sequenziali memorizzate nella cache.

Mantenere il read-ahead dopo i riavvii

Le modifiche dinamiche vengono applicate fino a quando non smonti o riavvii. Per mantenere queste modifiche per i montaggi NFS, crea una regola udev.

  1. Crea /etc/udev/rules.d/99-nfs-readahead.rules e regola il valore read_ahead_kb in base alle esigenze:

    SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="/usr/bin/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes", ATTR{read_ahead_kb}="15360"
    
  2. Utilizza un percorso assoluto per awk sul tuo sistema nell'attributo PROGRAM=.

  3. Ricarica udev:

    sudo udevadm control --reload
    
  4. Rimonta i volumi NFS o riavvia per attivare le regole per i nuovi dispositivi BDI.

Testa prima le regole udev su un host non di produzione. Se l'espressione di corrispondenza è errata, le regole errate potrebbero influire sui dispositivi a blocchi non NFS.

Indicazioni per i carichi di lavoro

Quando ottimizzi il read-ahead, tieni presente le seguenti indicazioni in base al tipo di carico di lavoro:

  • Letture casuali (OLTP, I/O casuali di piccole dimensioni): mantieni il read-ahead predefinito.

  • Letture sequenziali (media, copia collettiva e alcuni computing ad alte prestazioni): aumenta fino a 15 volte rsize e misura.

  • Misti: ottimizza solo se la profilazione mostra un collo di bottiglia di lettura sequenziale.

  • Basso rsize (64 KiB) con un read-ahead predefinito di 128 KiB: valuta la possibilità di aumentare il read-ahead a 960 KiB o più.

Combina l'ottimizzazione del read-ahead con le impostazioni appropriate di rsize, nconnect e concorrenza.

Passaggi successivi