Az NFS Azure-fájlmegosztások teljesítményének javítása
Ez a cikk azt ismerteti, hogyan javíthatja a hálózati fájlrendszer (NFS) Azure-fájlmegosztások teljesítményét.
A következőre érvényes:
Fájlmegosztás típusa | SMB | NFS |
---|---|---|
Standard szintű fájlmegosztások (GPv2), LRS/ZRS | ||
Standard szintű fájlmegosztások (GPv2), GRS/GZRS | ||
Prémium fájlmegosztások (FileStorage), LRS/ZRS |
Olvasási sebesség növelése az olvasási sebesség javítása érdekében
A read_ahead_kb
Linux kernelparamétere azt az adatmennyiséget jelöli, amelyet a szekvenciális olvasási művelet során "előre beolvasni" vagy előre be kell olvasni. Az 5.4 előtti Linux kernelverziók az olvasási előre értéket a csatlakoztatott fájlrendszer rsize
15-szörösének megfelelő értékre állítják be, amely az olvasási puffer méretének ügyféloldali csatlakoztatási lehetőségét jelöli. Ez elég magasra állítja az előreolvasási értéket az ügyfél szekvenciális olvasási sebességének javításához a legtöbb esetben.
A Linux kernel 5.4-es verziójától kezdve azonban a Linux NFS-ügyfél alapértelmezett read_ahead_kb
értéke 128 KiB. Ez a kis érték csökkentheti a nagy fájlok olvasási sebességét. A Nagyobb olvasási értékkel rendelkező Linux-kiadásokról a 128 KiB alapértelmezett kiadásra frissítő ügyfelek a szekvenciális olvasási teljesítmény csökkenését tapasztalhatják.
Az 5.4-s vagy újabb Linux-kernelek esetében javasoljuk, hogy a jobb teljesítmény érdekében folyamatosan állítsa a read_ahead_kb
15 MiB-re.
Az érték módosításához állítson be egy szabályt az udev linuxos kerneleszköz-kezelőben. Tegye a következők egyikét:
Szövegszerkesztőben hozza létre az /etc/udev/rules.d/99-nfs.rules fájlt a következő szöveg beírásával és mentésével:
SUBSYSTEM=="bdi" \ , ACTION=="add" \ , PROGRAM="/usr/bin/awk -v bdi=$kernel 'BEGIN{ret=1} {if ($4 == bdi) {ret=0}} END{exit ret}' /proc/fs/nfsfs/volumes" \ , ATTR{read_ahead_kb}="15360"
A konzolon alkalmazza az udev szabályt az udevadm parancs szuperfelhasználóként való futtatásával és a szabályfájlok és más adatbázisok újratöltésével. Ezt a parancsot csak egyszer kell futtatnia, hogy az udev értesüljön az új fájlról.
sudo udevadm control --reload
Nconnect
Nconnect
egy ügyféloldali Linux-csatlakoztatási lehetőség, amely nagy léptékben növeli a teljesítményt azáltal, hogy lehetővé teszi az ügyfél és az NFSv4.1-hez készült Azure Premium Files szolgáltatás közötti több Átviteli vezérlési protokoll (TCP) kapcsolat használatát.
A nconnect
Ezzel nconnect
skálázhatóan növelheti a teljesítményt kevesebb ügyfélszámítógép használatával a teljes tulajdonosi költség (TCO) csökkentése érdekében. Nconnect
több TCP-csatorna használatával növeli a teljesítményt egy vagy több hálózati adapteren, egy vagy több ügyfél használatával. E nélkül nconnect
körülbelül 20 ügyfélgépre lenne szüksége a legnagyobb prémium szintű Azure-fájlmegosztás kiépítési mérete által kínált sávszélesség-méretezési korlátok (10 GiB/s) eléréséhez. Ezzel nconnect
csak 6–7 ügyféllel érheti el ezeket a korlátokat, közel 70%-kal csökkentve a számítási költségeket, miközben jelentős fejlesztéseket tesz lehetővé a másodpercenkénti I/O-műveletekben (IOPS) és a nagy léptékű átviteli sebességben. Lásd az alábbi táblázatot.
Metrika (művelet) | I/O-méret | Teljesítménybeli javulás |
---|---|---|
IOPS (írás) | 64K, 1024K | 3x |
IOPS (olvasás) | Minden I/O-méret | 2-4x |
Átviteli sebesség (írás) | 64K, 1024K | 3x |
Átviteli sebesség (olvasás) | Minden I/O-méret | 2-4x |
Előfeltételek
- A legújabb Linux-disztribúciók teljes mértékben támogatják
nconnect
. Régebbi Linux-disztribúciók esetén győződjön meg arról, hogy a Linux kernelverziója 5.3 vagy újabb. - Csatlakoztatásonkénti konfiguráció csak akkor támogatott, ha tárfiókonként egyetlen fájlmegosztást használ egy privát végponton keresztül.
A teljesítményre gyakorolt hatás nconnect
A következő teljesítményeredményeket értünk el, amikor a csatlakoztatási nconnect
lehetőséget NFS Azure-fájlmegosztásokkal használjuk Linux-ügyfeleken nagy méretekben. Az eredmények eléréséről további információt a teljesítményteszt konfigurációját ismertető cikkben talál.
Javaslatok a következőhöz: nconnect
Kövesse ezeket a javaslatokat a legjobb eredmények nconnect
eléréséhez.
Beállít nconnect=4
Bár az Azure Files támogatja nconnect
a legfeljebb 16 beállítás beállítását, javasoljuk, hogy a csatlakoztatási beállításokat az optimális beállítással konfigurálja nconnect=4
. Az Azure Files implementációjának jelenleg négy csatornán túl nincs nyeresége nconnect
. Valójában az egyetlen ügyféltől származó egyetlen Azure-fájlmegosztás négy csatornája túllépése hátrányosan befolyásolhatja a TELJESÍTMÉNYT a TCP-hálózat telítettsége miatt.
Virtuális gépek gondos méretezése
A számítási feladatokra vonatkozó követelményektől függően fontos, hogy megfelelően méretezzék az ügyfél virtuális gépeket (virtuális gépeket), hogy ne korlátozzák a várt hálózati sávszélességet. A várt hálózati teljesítmény eléréséhez nincs szükség több hálózati adapter-vezérlőre (NIC-re). Bár általános célú virtuális gépek használata az Azure Files használatával gyakori, a számítási feladatok igényeitől és a régió rendelkezésre állásától függően különböző virtuálisgép-típusok érhetők el. További információ: Azure-beli virtuálisgép-választó.
Az üzenetsor mélységének megtartva 64-nél kisebb vagy egyenlő
A várólista mélysége a tárolóerőforrás által kiszolgálható függőben lévő I/O-kérések száma. Nem javasoljuk, hogy túllépje a 64-et az optimális üzenetsormélységen, mert nem fog több teljesítménynövekedést látni. További információ: Üzenetsor mélysége.
Nconnect
csatlakoztatásonkénti konfiguráció
Ha egy számítási feladathoz több megosztást kell csatlakoztatni egy vagy több, egyetlen ügyféltől eltérő nconnect
beállításokkal rendelkező tárfiókkal, nem tudjuk garantálni, hogy ezek a beállítások megmaradnak a nyilvános végponton való csatlakoztatáskor. Csatlakoztatásonkénti konfiguráció csak akkor támogatott, ha tárfiókonként egyetlen Azure-fájlmegosztást használnak a privát végponton az 1. forgatókönyvben leírtak szerint.
1. forgatókönyv: nconnect
Csatlakoztatásonkénti konfiguráció több tárfiókkal rendelkező privát végponton (támogatott)
- StorageAccount.file.core.windows.net = 10.10.10.10
- StorageAccount2.file.core.windows.net = 10.10.10.11
Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare1 nconnect=4
Mount StorageAccount2.file.core.windows.net:/StorageAccount2/FileShare1
2. forgatókönyv: nconnect
csatlakoztatásonkénti konfiguráció nyilvános végponton keresztül (nem támogatott)
- StorageAccount.file.core.windows.net = 52.239.238.8
- StorageAccount2.file.core.windows.net = 52.239.238.7
Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare1 nconnect=4
Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare2
Mount StorageAccount2.file.core.windows.net:/StorageAccount2/FileShare1
Feljegyzés
Még ha a tárfiók egy másik IP-címre is feloldható, nem tudjuk garantálni, hogy a cím megmarad, mert a nyilvános végpontok nem statikus címek.
3. forgatókönyv: nconnect
Csatlakoztatásonkénti konfiguráció privát végponton több megosztással egyetlen tárfiókon (nem támogatott)
- StorageAccount.file.core.windows.net = 10.10.10.10
Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare1 nconnect=4
Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare2
Mount StorageAccount.file.core.windows.net:/StorageAccount/FileShare3
Teljesítményteszt konfigurációja
A cikkben ismertetett eredmények eléréséhez és méréséhez az alábbi erőforrásokat és teljesítményértékelési eszközöket használtuk.
- Egyetlen ügyfél: Azure-beli virtuális gép (DSv4-Series) egyetlen hálózati adapterrel
- Operációs rendszer: Linux (Ubuntu 20.40)
- NFS-tároló: Prémium szintű Azure Files-fájlmegosztás (kiépített 30 TiB, set
nconnect=4
)
Méret | vCPU | Emlékezet | Ideiglenes tároló (SSD) | Adatlemezek maximális kihasználása | Maximális hálózati adapterek | Várható hálózati sávszélesség |
---|---|---|---|---|---|---|
Standard_D16_v4 | 16 | 64 GiB | Csak távoli tárolás | 32 | 8 | 12 500 Mb/s |
Teljesítményértékelési eszközök és tesztek
Rugalmas I/O-tesztelőt (FIO) használtunk, amely egy ingyenes, nyílt forráskódú lemez I/O-eszköz, amelyet a teljesítményteszthez és a stressz/hardver ellenőrzéséhez is használtunk. A FIO telepítéséhez kövesse a FIO README fájl Bináris csomagok szakaszát, és telepítse a kívánt platformra.
Bár ezek a tesztek véletlenszerű I/O-hozzáférési mintákra összpontosítanak, hasonló eredményeket kap a szekvenciális I/O használatakor.
Magas IOPS: 100%-os olvasás
4k I/O méret – véletlenszerű olvasás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=4k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300
8k I/O méret – véletlenszerű olvasás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=8k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300
Magas átviteli sebesség: 100%-os olvasás
64k I/O méret – véletlenszerű olvasás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=64k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300
1024k I/O méret – 100%-os véletlenszerű olvasás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=1024k --iodepth=64 --filesize=4G --rw=randread --group_reporting --ramp_time=300
Magas IOPS: 100%-os írás
4k I/O méret – 100%-os véletlenszerű írás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=4k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300
8k I/O méret – 100%-os véletlenszerű írás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=8k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300
Magas átviteli sebesség: 100%-os írási sebesség
64k I/O méret – 100%-os véletlenszerű írás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=64k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300
1024k I/O méret – 100%-os véletlenszerű írás – 64 üzenetsor mélysége
fio --ioengine=libaio --direct=1 --nrfiles=4 --numjobs=1 --runtime=1800 --time_based --bs=1024k --iodepth=64 --filesize=4G --rw=randwrite --group_reporting --ramp_time=300
Teljesítménnyel kapcsolatos szempontok a következőhöz: nconnect
A csatlakoztatási nconnect
beállítás használatakor alaposan ki kell értékelnie azokat a számítási feladatokat, amelyek a következő jellemzőkkel rendelkeznek:
- Késésre érzékeny írási számítási feladatok, amelyek egyszálasak és/vagy alacsony várólista-mélységet használnak (kevesebb, mint 16)
- Késésre érzékeny olvasási számítási feladatok, amelyek egyszálasak, és/vagy alacsony üzenetsor-mélységet használnak kisebb I/O-méretekkel kombinálva
Nem minden számítási feladat igényel nagy léptékű IOPS-t vagy teljes teljesítményt. A kisebb méretű számítási feladatok esetében lehet, nconnect
hogy nincs értelme. Az alábbi táblázat segítségével döntse el, hogy előnyös-e nconnect
a számítási feladat számára. A zöld színnel kiemelt forgatókönyvek használata ajánlott, míg a piros színnel kiemelt forgatókönyvek nem. A sárga színnel kiemelt forgatókönyvek semlegesek.