Sdílet prostřednictvím


Osvědčené postupy pro čtení systému souborů NFS pro Linux pro Azure NetApp Files

Tento článek vám pomůže porozumět osvědčeným postupům mezipaměti systému souborů pro Azure NetApp Files.

Systém souborů NFS předpověděně požaduje bloky ze souboru před vstupně-výstupními požadavky aplikace. Je navržená tak, aby zlepšila propustnost sekvenčního čtení klienta. Až donedávna všechny moderní linuxové distribuce nastavily hodnotu pro čtení dopředu tak, aby odpovídaly 15krát připojeným systémům rsizesouborů .

V následující tabulce jsou uvedeny výchozí hodnoty pro čtení pro každou danou rsize možnost připojení.

Připojený systém souborů rsize Blokuje čtení dopředu.
64 KiB 960 KiB
256 KiB 3 840 KiB
1024 KiB 15 360 KiB

RHEL 8.3 a Ubuntu 18.04 zavedly změny, které můžou negativně ovlivnit výkon sekvenčního čtení klienta. Na rozdíl od dřívějších verzí tyto distribuce nastavují výchozí hodnotu 128 KiB bez ohledu na použitou rsize možnost připojení. Upgrade z verzí s větší hodnotou pro čtení na verze s výchozí hodnotou 128-KiB se snižuje v sekvenčním výkonu čtení. Hodnoty s předstihem pro čtení se ale můžou dynamicky i trvale ladit směrem nahoru. Například při testování pomocí SAS GRIDu bylo nalezeno optimální hodnotu čtení 15 360 KiB ve srovnání s 3 840 KiB, 960 KiB a 128 KiB. Nedostatek testů byl spuštěn nad rámec 15 360 KiB k určení pozitivního nebo negativního dopadu.

Následující tabulka uvádí výchozí hodnoty pro čtení pro každou aktuálně dostupnou distribuci.

Distribuce Release Blokuje čtení dopředu.
RHEL 8.3 128 KiB
RHEL 7.X, 8.0, 8.1, 8.2 15 X rsize
SLES 12.X – minimálně 15SP2 15 X rsize
Ubuntu 18.04 – alespoň 20.04 128 KiB
Ubuntu 16.04 15 X rsize
Debian Maximálně 10 15 x rsize

Jak pracovat s systémem souborů NFS předem

Systém souborů NFS pro čtení je definován v přípojné bodě systému souborů NFS. Výchozí nastavení je možné zobrazit a nastavit dynamicky i trvale. Pro usnadnění je k dispozici následující skript Bash napsaný nástrojem Red Hat pro zobrazení nebo dynamické nastavení čtení dopředu pro formátovaný systém souborů NFS.

Před čtením je možné definovat dynamicky na připojení NFS pomocí následujícího skriptu nebo trvale pomocí udev pravidel, jak je znázorněno v této části. Pokud chcete zobrazit nebo nastavit systém souborů NFS před čtením, můžete uložit následující skript jako soubor Bash, upravit oprávnění souboru tak, aby byl spustitelný (chmod 544 readahead.sh) a spustitelný.

Jak zobrazit nebo nastavit hodnoty před čtením

Pokud chcete zobrazit aktuální hodnotu čtení (vrácená hodnota je v KiB), spusťte následující příkaz:

   ./readahead.sh show <mount-point>

Pokud chcete nastavit novou hodnotu pro čtení dopředu, spusťte následující příkaz:

./readahead.sh set <mount-point> [read-ahead-kb]

Příklad

#!/bin/bash
# set | show readahead for a specific mount point
# Useful for things like NFS and if you do not know / care about the backing device
#
# To the extent possible under law, Red Hat, Inc. has dedicated all copyright
# to this software to the public domain worldwide, pursuant to the
# CC0 Public Domain Dedication. This software is distributed without any warranty.
# For more information, see the [CC0 1.0 Public Domain Dedication](http://creativecommons.org/publicdomain/zero/1.0/).

E_BADARGS=22
function myusage() {
echo "Usage: `basename $0` set|show <mount-point> [read-ahead-kb]"
}

if [ $# -gt 3 -o $# -lt 2 ]; then
   myusage
   exit $E_BADARGS
fi

MNT=${2%/}
BDEV=$(grep $MNT /proc/self/mountinfo | awk '{ print $3 }')

if [ $# -eq 3 -a $1 == "set" ]; then
   echo $3 > /sys/class/bdi/$BDEV/read_ahead_kb
elif [ $# -eq 2 -a $1 == "show" ]; then
   echo "$MNT $BDEV /sys/class/bdi/$BDEV/read_ahead_kb = "$(cat /sys/class/bdi/$BDEV/read_ahead_kb)
else
   myusage
   exit $E_BADARGS
fi

Jak trvale nastavit čtení pro připojení SYSTÉMU SOUBORŮ NFS

Pokud chcete trvale nastavit čtení pro připojení systému souborů NFS, udev lze pravidla zapsat takto:

  1. Vytvoření a testování /etc/udev/rules.d/99-nfs.rules:

        SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="<absolute_path>/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes", ATTR{read_ahead_kb}="15380"
    
  2. udev Použijte pravidlo:

       sudo udevadm control --reload
    

Další kroky