Рекомендации по упреждающему чтению 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 КиБ приводит к снижению скорости последовательного чтения. Однако значения упреждающего чтения могут увеличиваться как динамически, так и постоянно. Например, при тестировании с помощью SAS GRID было обнаружено, что значение упреждающего чтения, равное 15 360 КиБ, является более оптимальным по сравнению со значениями 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по