Рекомендации по упреждающему чтению Linux NFS для Azure NetApp Files
В этой статье приведены рекомендации по кэшированию файловых систем для Azure NetApp Files.
Упреждающее чтение NFS запрашивает блоки файла до запросов ввода-вывода от приложения. Он предназначен для улучшения последовательной пропускной способности чтения клиента. До недавнего времени все современные дистрибутивы Linux устанавливали значение упреждающего чтения равным 15-кратному эквиваленту подключенных файловых систем rsize
.
В следующей таблице приведены значения упреждающего чтения по умолчанию для каждого заданного параметра подключения rsize
.
Подключенная файловая система rsize |
Упреждающее чтение блоков |
---|---|
64 КиБ | 960 КиБ |
256 КиБ | 3840 КиБ |
1024 КиБ | 15 360 КиБ |
В RHEL 8.3 и Ubuntu 18.04 появились изменения, которые могут негативно сказаться на производительности последовательного чтения на клиенте. В отличие от более ранних выпусков, в этих дистрибутивах для упреждающего чтения задано значение по умолчанию 128 КиБ, независимо от используемого параметра подключения rsize
. Обновление от выпусков с большим значением для чтения до выпусков с 128-KiB по умолчанию снижает производительность последовательного чтения. Однако значения упреждающего чтения могут увеличиваться как динамически, так и постоянно. Например, тестирование с помощью SAS GRID показало оптимальное значение чтения 15360 КИБ по сравнению с 3840 КиБ, 960 КиБ и 128 КИБ. Для определения положительного или отрицательного воздействия при значении 15 360 КиБ было проведено недостаточных тестов.
В следующей таблице приведены значения упреждающего чтения по умолчанию для каждого из доступных распределений.
Распределение | Выпуск | Упреждающее чтение блоков |
---|---|---|
RHEL | 8.3 | 128 КиБ |
RHEL | 7 x, 8.0, 8.1, 8.2 | 15.x rsize |
SLES | 12.x — по крайней мере 15SP2 | 15.x rsize |
Ubuntu | 18.04 — по крайней мере 20.04 | 128 КиБ |
Ubuntu | 16.04 | 15.x rsize |
Debian | Не менее 10 | 15.x rsize |
Как работать с упреждающим чтением файловой системы для каждой NFS
Упреждающее чтение NFS определено в точке подключения файловой системы NFS. Параметр по умолчанию можно просмотреть и задать как динамически, так и постоянно. Для удобства приведенный ниже скрипт bash, написанный Red Hat, предоставляется для просмотра или динамического задания чтения для объемной файловой системы NFS.
Упреждающее чтение можно определить динамически на каждое подключение NFS с помощью следующего скрипта или постоянно, используя правила udev
, как показано в этом разделе. Чтобы отобразить или задать упреждающее чтение для подключенной файловой системы NFS, можно сохранить следующий скрипт как файл Bash, изменить разрешения файла, чтобы сделать его исполняемым (chmod 544 readahead.sh
) и запустить, как показано ниже.
Как отобразить или задать значения упреждающего чтения
Чтобы отобразить текущее значение упреждающего чтения (возвращаемое значение указано в КиБ), выполните следующую команду:
./readahead.sh show <mount-point>
Чтобы задать новое значение для упреждающего чтения, выполните следующую команду:
./readahead.sh set <mount-point> [read-ahead-kb]
Пример
#!/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
Задание постоянного упреждающего чтения для подключений NFS
Чтобы задать постоянное упреждающее чтение для подключений NFS, правила udev
можно записать следующим образом:
Создайте и протестируйте
/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
:sudo udevadm control --reload
Следующие шаги
- Рекомендации по прямому вводу-выводу Linux для Azure NetApp Files
- Рекомендации по кэшированию в файловых системах Linux для Azure NetApp Files
- Рекомендации по параметрам подключения NFS для Linux для Azure NetApp Files
- Рекомендации по параллелизму Linux
- Рекомендации по SKU виртуальных машин Azure
- Тесты производительности для Linux