Udostępnij za pośrednictwem


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 ona 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 rsizesystemó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 z wyprzedzeniem do tych, które mają domyślną wartość 128-KiB, doświadczyło spadku 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 Wydanie 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 został udostępniony 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:

  1. 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"
    
  2. Zastosuj regułę udev :

       sudo udevadm control --reload
    

Następne kroki