أفضل ممارسات القراءة المسبقة ل Linux NFS لملفات Azure NetApp

تساعدك هذه المقالة على فهم أفضل ممارسات ذاكرة التخزين المؤقت لنظام الملفات لملفات Azure NetApp.

تطلب قراءة NFS بشكل متوقع الكتل من ملف قبل طلبات الإدخال/الإخراج بواسطة التطبيق. تم تصميمه لتحسين معدل نقل القراءة التسلسلي للعميل. حتى وقت قريب، تعين جميع توزيعات Linux الحديثة قيمة القراءة المسبقة لتكون مكافئة 15 مرة أنظمة الملفات المثبتة rsize.

يعرض الجدول التالي قيم القراءة المسبقة الافتراضية لكل خيار تحميل معين rsize .

نظام الملفات المحملة rsize حظر القراءة المسبقة
64 كيبيبايت 960 كيبيبايت
256 كيبيبايت 3,840 كيبيبايت
1024 كيبيبايت 360 15 كيبيبايت

قدم RHEL 8.3 وUbuntu 18.04 تغييرات قد تؤثر سلبا على أداء القراءة التسلسلي للعميل. على عكس الإصدارات السابقة، تعين هذه التوزيعات القراءة المسبقة إلى 128 KiB افتراضيا بغض النظر عن rsize خيار التحميل المستخدم. الترقية من الإصدارات ذات القيمة الأكبر للقراءة المسبقة إلى الإصدارات ذات التجربة الافتراضية 128-KiB تقل في أداء القراءة التسلسلي. ومع ذلك، قد يتم ضبط قيم القراءة المسبقة لأعلى بشكل ديناميكي ومستمر. على سبيل المثال، عثر الاختبار مع SAS GRID على القيمة المثلى للقراءة 15360-KiB مقارنة ب 3840 KiB و960 KiB و128 KiB. لم يتم إجراء اختبارات كافية تتجاوز 15,360 كيبيبايت لتحديد التأثير الإيجابي أو السلبي.

يعرض الجدول التالي قيم القراءة المسبقة الافتراضية لكل توزيع متوفر حاليا.

التوزيع الإصدار حظر القراءة المسبقة
RHEL 8.3 128 كيبيبايت
RHEL 7.X، 8.0، 8.1، 8.2 15 × rsize
SLES 12.X – 15SP2 على الأقل 15 × rsize
Ubuntu 18.04 – على الأقل 20.04 128 كيبيبايت
Ubuntu 16.04 15 × rsize
Debian ما يصل إلى 10 على الأقل 15 × rsize

كيفية العمل مع القراءة المسبقة لكل نظام ملفات NFS

يتم تعريف القراءة المسبقة ل NFS عند نقطة التحميل لنظام ملفات NFS. يمكن عرض الإعداد الافتراضي وتعيينه بشكل ديناميكي ومستمر. للراحة، تم توفير البرنامج النصي bash التالي المكتوب بواسطة Red Hat لعرض أو إعداد القراءة المسبقة ديناميكيا لنظام ملفات NFS المقدار.

يمكن تعريف القراءة المسبقة إما ديناميكيا لكل تحميل NFS باستخدام البرنامج النصي التالي أو باستمرار باستخدام udev القواعد كما هو موضح في هذا القسم. لعرض أو تعيين القراءة المسبقة لنظام ملفات NFS مثبت، يمكنك حفظ البرنامج النصي التالي كملف bash، وتعديل أذونات الملف لجعله قابلا للتنفيذ (chmod 544 readahead.sh)، وتشغيله كما هو موضح.

كيفية إظهار قيم القراءة المسبقة أو تعيينها

لإظهار قيمة القراءة المسبقة الحالية (القيمة التي تم إرجاعها في KiB)، قم بتشغيل الأمر التالي:

   ./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 يمكن كتابة القواعد على النحو التالي:

  1. إنشاء واختبار /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. udev تطبيق القاعدة:

       sudo udevadm control --reload
    

الخطوات التالية