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 rsize
souborů .
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 |
1 024 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 | Verze | 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:
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"
udev
Použijte pravidlo:sudo udevadm control --reload
Další kroky
- Osvědčené postupy pro přímé vstupně-výstupní operace Linuxu pro Azure NetApp Files
- Osvědčené postupy mezipaměti systému souborů Linuxu pro Azure NetApp Files
- Osvědčené postupy pro možnosti připojení systému souborů NFS pro Linux pro Azure NetApp Files
- Osvědčené postupy souběžnosti pro Linux
- Osvědčené postupy skladových položek virtuálních počítačů Azure
- Srovnávací testy výkonu pro Linux