Najlepsze rozwiązania dotyczące odczytu systemu plików NFS w systemie Linux dla usługi Azure NetApp Files
Ten artykuł pomaga zrozumieć najlepsze rozwiązania dotyczące pamięci podręcznej systemu plików dla usługi Azure NetApp Files.
System plików NFS z wyprzedzeniem żąda bloków predykcyjnych z pliku przed żądaniami we/wy przez aplikację. Ma na celu zwiększenie przepływności odczytu sekwencyjnego klienta. Do niedawna wszystkie nowoczesne dystrybucje systemu Linux ustawiają wartość z wyprzedzeniem odczytu na odpowiednik 15 razy zainstalowanych rsize
systemów plików.
W poniższej tabeli przedstawiono domyślne wartości odczytu z wyprzedzeniem dla każdej rsize
opcji instalacji.
Zainstalowany system plików rsize |
Blokuje odczyt z wyprzedzeniem |
---|---|
64 KiB | 960 KiB |
256 KiB | 3840 KiB |
1024 KiB | 15 360 KiB |
RHEL 8.3 i Ubuntu 18.04 wprowadził zmiany, które mogą negatywnie wpłynąć na wydajność odczytu sekwencyjnego klienta. W przeciwieństwie do wcześniejszych wersji te dystrybucje ustawiają opcję odczytu z wyprzedzeniem na wartość domyślną 128 KiB niezależnie od używanej rsize
opcji instalacji. Uaktualnianie z wersji z większą wartością odczytu do wersji z domyślną wartością 128-KiB odnotowało spadek wydajności odczytu sekwencyjnego. Jednak wartości odczytu z wyprzedzeniem mogą być dostrojone w górę zarówno dynamicznie, jak i trwale. Na przykład testowanie za pomocą usługi SAS GRID wykazało optymalną wartość odczytu 15 360 KiB w porównaniu do 3840 KiB, 960 KiB i 128 KiB. Niewystarczająca liczba testów przekracza 15 360 KiB w celu określenia pozytywnego lub negatywnego wpływu.
W poniższej tabeli przedstawiono domyślne wartości odczytu z wyprzedzeniem dla każdej aktualnie dostępnej dystrybucji.
Dystrybucja | Zwolnij | Blokuje odczyt z wyprzedzeniem |
---|---|---|
RHEL | 8.3 | 128 KiB |
RHEL | 7.X, 8.0, 8.1, 8.2 | 15 X rsize |
SLES | 12.X — co najmniej 15SP2 | 15 X rsize |
Ubuntu | 18.04 – co najmniej 20.04 | 128 KiB |
Ubuntu | 16.04 | 15 X rsize |
Debian | Maksymalnie 10 | 15 x rsize |
Jak pracować z systemem plików na system plików NFS z wyprzedzeniem
System plików NFS jest definiowany w punkcie instalacji systemu plików NFS. Ustawienie domyślne można wyświetlać i ustawiać zarówno dynamicznie, jak i trwale. Dla wygody poniższy skrypt powłoki bash napisany przez firmę Red Hat jest udostępniany do wyświetlania lub dynamicznego ustawiania odczytu z wyprzedzeniem dla systemu plików NFS.
Możliwość dynamicznego instalowania systemu plików NFS przy użyciu następującego skryptu lub trwałego używania udev
reguł, jak pokazano w tej sekcji. Aby wyświetlić lub ustawić odczyt przed zainstalowanym systemem plików NFS, możesz zapisać następujący skrypt jako plik powłoki bash, zmodyfikować uprawnienia pliku, aby uczynić go plikiem wykonywalnym (chmod 544 readahead.sh
) i uruchomić, jak pokazano.
Jak pokazać lub ustawić wartości z wyprzedzeniem odczytu
Aby wyświetlić bieżącą wartość odczytu z wyprzedzeniem (zwrócona wartość jest w kiB), uruchom następujące polecenie:
./readahead.sh show <mount-point>
Aby ustawić nową wartość dla odczytu z wyprzedzeniem, uruchom następujące polecenie:
./readahead.sh set <mount-point> [read-ahead-kb]
Przykład
#!/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 trwale ustawić odczyt na potrzeby instalacji NFS
Aby trwale ustawić funkcję odczytu dla instalacji systemu plików NFS, udev
reguły można zapisywać w następujący sposób:
Utwórz i przetestuj
/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"
Zastosuj regułę
udev
:sudo udevadm control --reload
Następne kroki
- Najlepsze rozwiązania dotyczące bezpośredniego we/wy systemu Linux dla usługi Azure NetApp Files
- Najlepsze rozwiązania dotyczące pamięci podręcznej systemu plików systemu plików systemu Linux dla usługi Azure NetApp Files
- Najlepsze rozwiązania dotyczące instalacji systemu plików NFS w systemie Linux dla usługi Azure NetApp Files
- Najlepsze rozwiązania dotyczące współbieżności systemu Linux
- Najlepsze rozwiązania dotyczące jednostek SKU maszyn wirtualnych platformy Azure
- Testy porównawcze wydajności w systemie Linux