Olvasás angol nyelven

Megosztás a következőn keresztül:


A fájlmegosztás teljesítményének optimalizálása nagy könyvtárak linuxos ügyfelekről való elérésekor

Ez a cikk javaslatokat tartalmaz a nagy számú fájlt tartalmazó könyvtárak használatához. Általában célszerű csökkenteni az egy könyvtárban lévő fájlok számát úgy, hogy a fájlokat több könyvtárra terjeszti. Vannak azonban olyan helyzetek, amikor a nagy könyvtárakat nem lehet elkerülni. Fontolja meg az alábbi javaslatokat, ha linuxos ügyfelekre csatlakoztatott Azure-fájlmegosztásokon használ nagy könyvtárakat.

A következőre érvényes:

Fájlmegosztás típusa SMB NFS
Standard szintű fájlmegosztások (GPv2), LRS/ZRS Igen, ez a cikk az LRS/ZRS standard SMB Azure-fájlmegosztásokra vonatkozik. Az NFS-megosztások csak prémium Szintű Azure-fájlmegosztásokban érhetők el.
Standard szintű fájlmegosztások (GPv2), GRS/GZRS Igen, ez a cikk a GRS/GZRS standard SMB Azure-fájlmegosztásokra vonatkozik. Az NFS csak prémium Szintű Azure-fájlmegosztásokban érhető el.
Prémium fájlmegosztások (FileStorage), LRS/ZRS Igen, ez a cikk a prémium szintű SMB Azure-fájlmegosztásokra vonatkozik. Igen, ez a cikk a prémium szintű NFS Azure-fájlmegosztásokra vonatkozik.

A következő csatlakoztatási lehetőségek az enumerálásra vonatkoznak, és csökkenthetik a késést a nagy könyvtárak használatakor.

actimeo

actimeo Az összes acregmin, acregmax, acdirminés acdirmax ugyanahhoz az értékhez tartozó beállítás megadása. Ha actimeo nincs megadva, az ügyfél az alapértelmezett értékeket használja az egyes beállításokhoz.

Javasoljuk, hogy nagy könyvtárak használatakor 30 és 60 másodperc közötti beállítást actimeo állítson be. Ha beállít egy értéket ebben a tartományban, az attribútumok hosszabb ideig érvényesek maradnak az ügyfél attribútum-gyorsítótárában, így a műveletek ahelyett, hogy a vezetéken keresztül kérik le a fájlattribútumokat a gyorsítótárból. Ez csökkentheti a késést olyan helyzetekben, amikor a gyorsítótárazott attribútumok lejárnak, miközben a művelet még fut.

Az alábbi grafikon összehasonlítja a különböző műveletek alapértelmezett csatlakoztatással történő befejezéséhez szükséges teljes időt, szemben a actimeo 30-zal egy olyan számítási feladat értékének beállításával, amely egy könyvtárban 1 millió fájlt tartalmaz. A tesztelés során a teljes befejezési idő néhány művelet esetében akár 77%-kal is csökkent. Minden műveletet nem rendelkező ls-ekkel hajtottak végre.

Gráf, amely összehasonlítja a különböző műveletek alapértelmezett csatlakoztatással való befejezésének idejét, és egy 1 millió fájlból álló számítási feladathoz 30 actimeo-értéket állít be.

nconnect

Nconnect az NFS-fájlmegosztások ügyféloldali csatlakoztatási lehetősége, amely lehetővé teszi több TCP-kapcsolat használatát az ügyfél és az NFSv4.1-hez készült Azure Premium Files szolgáltatás között. Javasoljuk a késés csökkentésének és a teljesítmény javításának optimális beállítását nconnect=4 . Nconnect különösen hasznos lehet olyan számítási feladatokhoz, amelyek több szálból származó aszinkron vagy szinkron I/O-t használnak. További információ.

Kivonatgyűjtők számának növelése

Az enumerálást végző rendszeren található RAM teljes mennyisége befolyásolja az olyan fájlrendszer-protokollok belső működését, mint az NFS és az SMB. Még ha a felhasználók nem is tapasztalnak magas memóriahasználatot, a rendelkezésre álló memória mennyisége befolyásolja a rendszer által használt inode kivonatgyűjtők számát, ami befolyásolja/javítja a nagy könyvtárak számbavételi teljesítményét. Módosíthatja azoknak az inode kivonatgyűjtőknek a számát, amelyeknek a rendszernek csökkentenie kell a nagy számbavételi számítási feladatok során esetlegesen előforduló kivonatos ütközéseket.

Ehhez módosítania kell a rendszerindítási konfiguráció beállításait egy további kernelparancs megadásával, amely a rendszerindítás során lép érvénybe, hogy növelje az inode kivonatgyűjtők számát. Kövesse ezeket a lépéseket.

  1. Szövegszerkesztővel szerkessze a /etc/default/grub fájlt.

    Bash
    sudo vim /etc/default/grub
    
  2. Adja hozzá a következő szöveget az /etc/default/grub fájlhoz. Ez a parancs az inode kivonattábla méreteként 128 MB-ot választ el egymástól, és legfeljebb 128 MB-tal növeli a rendszer memóriahasználatát.

    Bash
    GRUB_CMDLINE_LINUX="ihash_entries=16777216"
    

    Ha GRUB_CMDLINE_LINUX már létezik, adjon hozzá ihash_entries=16777216 szóközzel elválasztva, például:

    Bash
    GRUB_CMDLINE_LINUX="<previous commands> ihash_entries=16777216"
    
  3. A módosítások alkalmazásához futtassa a következőt:

    Bash
    sudo update-grub2
    
  4. Indítsa újra a rendszert:

    Bash
    sudo reboot
    
  5. A módosítások érvénybe lépésének ellenőrzéséhez a rendszer újraindítása után ellenőrizze a kernel parancsmag parancsait:

    Bash
    cat /proc/cmdline
    

    Ha ihash_entries látható, a rendszer alkalmazta a beállítást, és a számbavételi teljesítmény exponenciálisan javul.

    A dmesg-kimenetben azt is ellenőrizheti, hogy alkalmazták-e a kernel-parancsmagot:

    Bash
    dmesg | grep "Inode-cache hash table"
    Inode-cache hash table entries: 16777216 (order: 15, 134217728 bytes, linear)
    

Parancsok és műveletek

A parancsok és műveletek megadása hatással lehet a teljesítményre is. Egy nagy könyvtárban lévő összes fájl felsorolása a ls parancs használatával jó példa.

Megjegyzés

Egyes műveleteknek, például a rekurzívnak lsfinddu és a fájlattribútumoknak egyaránt szükségük van a fájlnevekre és a fájlattribútumokra, ezért a címtár-enumerálásokat (a bejegyzések lekéréséhez) kombinálják az egyes bejegyzések statisztikáival (az attribútumok lekéréséhez). Javasoljuk, hogy nagyobb értéket használjon az actimeo-hoz olyan csatlakoztatási pontokon, ahol valószínűleg ilyen parancsokat fog futtatni.

Nem használt ls használata

Egyes Linux-disztribúciókban a rendszerhéj automatikusan beállítja a ls parancs alapértelmezett beállításait, például ls --color=auto. Ez megváltoztatja ls a vezetéken végzett működést, és további műveleteket ad hozzá a ls végrehajtáshoz. A teljesítménycsökkenés elkerülése érdekében javasolt a nem megadott ls használata. Ezt háromféleképpen teheti meg:

  • Távolítsa el az aliast a paranccsal unalias ls. Ez csak ideiglenes megoldás az aktuális munkamenethez.

  • Végleges módosítás esetén szerkesztheti az ls aliast a felhasználó fájljában bashrc/bash_aliases . Az Ubuntu-ban szerkessze ~/.bashrc az alias eltávolításához a következőhöz ls: .

  • lsHívás helyett közvetlenül meghívhatja például /usr/bin/lsa ls binárist. Ez lehetővé teszi, hogy az aliasban esetlegesen elérhető beállítások nélkül is használható ls legyen. A bináris hely a parancs which lsfuttatásával kereshető meg.

Annak megakadályozása, hogy az ls rendezze a kimenetét

Ha más parancsokkal használja ls , javíthatja a teljesítményt, ha megakadályozza ls a kimenet rendezését olyan helyzetekben, amikor nem érdekli a fájlok visszaadásának ls sorrendje. A kimenet rendezése jelentős többletterhelést jelent.

Ahelyett, hogy a ls -l | wc -l fájlok teljes számát szeretné lekérni, a -f-U parancsokkal ls megakadályozhatja a kimenet rendezését. A különbség az, hogy -f a rejtett fájlokat is megjeleníti, és -U nem.

Ha például közvetlenül az Ubuntu-ban hívja meg a ls bináris fájlt, futtathatja vagy /usr/bin/ls -1U | wc -l./usr/bin/ls -1f | wc -l

Az alábbi diagram összehasonlítja az eredmények kimenetéhez szükséges időt a nem megadott, a rendezetlen ls és a rendezés lsnélküli eredményekkel.

A rendezetlen ls művelet végrehajtásához másodpercben megadott teljes időt összehasonlító grafikon.

Fájlmásolási és biztonsági mentési műveletek

Ha adatokat másol egy fájlmegosztásból vagy biztonsági másolatot készít a fájlmegosztásokról egy másik helyre, az optimális teljesítmény érdekében javasoljuk, hogy az aktív I/O-val rendelkező élő fájlmegosztás helyett használjon megosztási pillanatképet forrásként. A biztonsági mentési alkalmazásoknak közvetlenül a pillanatképen kell futtatniuk a parancsokat. További információ: Pillanatképek megosztása az Azure Filesszal.

Alkalmazásszintű javaslatok

Nagy könyvtárakat használó alkalmazások fejlesztésekor kövesse ezeket a javaslatokat.

  • Fájlattribútumok kihagyása. Ha az alkalmazásnak csak a fájlnévre van szüksége, és nem a fájlattribútumokra, például a fájltípusra vagy a legutóbbi módosításra, akkor több hívás is használható a rendszerhívásokhoz, például getdents64 jó puffermérettel. Ezzel a fájltípus nélkül kapja meg a megadott könyvtár bejegyzéseit, így a művelet gyorsabb lesz, mivel elkerüli a felesleges műveleteket.

  • Interleave stat hívások. Ha az alkalmazásnak attribútumokra és a fájlnévre van szüksége, javasoljuk, hogy a stat-hívásokat ahelyett getdents64 , hogy az összes bejegyzést a fájl getdents64 végéig lekérte volna, majd az összes visszaadott bejegyzésre vonatkozó statisztikát kellene elvégeznie. A stat-hívások összekapcsolása arra utasítja az ügyfelet, hogy egyszerre kérje le a fájlt és az attribútumait is, csökkentve a kiszolgáló felé irányuló hívások számát. Magas actimeo értékkel kombinálva ez jelentősen javíthatja a teljesítményt. Például ahelyett [ getdents64, getdents64, ... , getdents64, statx (entry1), ... , statx(n) ], hogy a statx-hívásokat a következőhöz hasonló módon getdents64 helyeznék el: [ getdents64, (statx, statx, ... , statx), getdents64, (statx, statx, ... , statx), ... ].

  • Az I/O mélységének növelése. Ha lehetséges, javasoljuk, hogy konfiguráljon nconnect egy nem nulla értékű (1-nél nagyobb) értéket, és ossza el a műveletet több szál között, vagy használjon aszinkron I/O-t. Ez lehetővé teszi az aszinkron műveletek használatát a fájlmegosztás több egyidejű kapcsolatának kihasználásához.

  • Kényszerítő gyorsítótár. Ha az alkalmazás olyan fájlmegosztás fájlattribútumait kérdezi le, amelyet csak egy ügyfél csatlakoztatott, használja a statx rendszerhívást a AT_STATX_DONT_SYNC jelzővel. Ez a jelző biztosítja, hogy a gyorsítótárazott attribútumok a kiszolgálóval való szinkronizálás nélkül legyenek lekérve a gyorsítótárból, így elkerülve a hálózati adatátjárásokat a legújabb adatok lekéréséhez.

Lásd még