日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Alibaba Cloud Linux 3系統(tǒng)的NFS文件系統(tǒng)讀取文件性能不符合預(yù)期,如何處理?

在NFS(Network File System)文件系統(tǒng)中通過read、copy_file_range等系統(tǒng)調(diào)用讀取文件時,與同場景下的Alibaba Cloud Linux 2相比,可能會存在明顯的性能退化情況。本文介紹在Alibaba Cloud Linux 3系統(tǒng)的ECS實例中,在NFS文件系統(tǒng)下讀取文件時性能不符合預(yù)期的問題原因及解決方案。

問題描述

問題表現(xiàn)

在Alibaba Cloud Linux 3系統(tǒng)的NFS文件系統(tǒng)中讀取文件時性能不符合預(yù)期,典型表現(xiàn)如下:

  • 使用read、copy_file_range等系統(tǒng)調(diào)用從NFS文件系統(tǒng)中讀取大文件時,耗時較久。

  • 使用dd命令從NFS掛載點的文件中讀取數(shù)據(jù)時,Alibaba Cloud Linux 3比Alibaba Cloud Linux 2用時多。例如:

    dd if=<nfs_mntpoint>/<testfile> of=/dev/null bs=1M
    說明

    該示例命令表示從NFS掛載點的testfile文件中讀取數(shù)據(jù),并將其發(fā)送到/dev/null設(shè)備中。運行完畢后,dd 會輸出一些信息,包括讀取的總字節(jié)數(shù)以及操作耗費的時間,用來計算讀取數(shù)據(jù)的速率,可以評估NFS文件系統(tǒng)的性能表現(xiàn)。

影響范圍

該問題主要在以下ECS實例中存在:

  • 鏡像:aliyun_3_x64_20G_alibase_20210415.vhd及之后的所有鏡像版本。

  • 內(nèi)核:5.10.23-4.al8.x86_64及之后的所有內(nèi)核版本。

  • 文件系統(tǒng):掛載NFS文件系統(tǒng),讀取位于掛載點目錄下的文件。

問題原因

在上游Linux內(nèi)核中,read_ahead_kb表示塊設(shè)備的預(yù)讀窗口大小的參數(shù)。預(yù)讀(read-ahead)是一個性能優(yōu)化技術(shù),它允許系統(tǒng)預(yù)測接下來可能被讀取的數(shù)據(jù)并提前加載到內(nèi)存中,這樣當(dāng)這部分?jǐn)?shù)據(jù)被請求時,就可以直接從內(nèi)存中讀取,而不必等待磁盤I/O操作,從而降低延遲并提高數(shù)據(jù)讀取效率。

  • 在Linux內(nèi)核5.4版本之前,NFS文件系統(tǒng)的預(yù)讀量通常會基于掛載時設(shè)置的rsize 參數(shù)(即每次NFS讀請求的大小)。默認(rèn)情況下,NFS的預(yù)讀窗口read_ahead_kb大小被設(shè)置為rsize 參數(shù)的15倍。Alibaba Cloud Linux 2的內(nèi)核版本是4.19,默認(rèn)的rsize參數(shù)大小為1,024 KB,即read_ahead_kb大小為15,360 KB。

  • 然而,在Linux內(nèi)核5.4版本中引入了一個提交(index : kernel/git/torvalds/linux.git),隨后read_ahead_kb的值不再基于rsize參數(shù),而是與VM_READAHEAD_PAGES參數(shù)相關(guān)。Alibaba Cloud Linux 3的內(nèi)核版本是5.10,默認(rèn)的read_ahead_kb大小為128 KB。

所以,Alibaba Cloud Linux 3相比于Alibaba Cloud Linux 2的讀取文件性能有所下降。因此Alibaba Cloud Linux 3需要重新評估和調(diào)整預(yù)讀窗口大小,以優(yōu)化文件的讀取效率。

重要

在NFS文件系統(tǒng)中,較大的預(yù)讀窗口可能會提高大型文件連續(xù)讀取的性能,但如果窗口太大,也可能導(dǎo)致不必要的數(shù)據(jù)被加載到內(nèi)存中,尤其是在隨機讀取的場景中。因此建議您根據(jù)實際的業(yè)務(wù)場景,仔細(xì)評估實際的工作負(fù)載,調(diào)整read_ahead_kb參數(shù)值以確保找到最佳的預(yù)讀窗口大小。

解決方案

您可以選擇以下任意一種方式修改read_ahead_kb參數(shù)來設(shè)置預(yù)讀值。

通過echo命令修改(單個文件系統(tǒng)修改)

  1. 查看NFS系統(tǒng)目標(biāo)設(shè)備當(dāng)前的預(yù)讀參數(shù)。

    cat /sys/class/bdi/$(mountpoint -d <nfs_mountpoint>)/read_ahead_kb

    其中<nfs_mountpoint>需替換為實際的NFS掛載點路徑,可以通過cat /proc/self/mountinfo命令獲取。

  2. 適當(dāng)調(diào)大NFS文件系統(tǒng)所對應(yīng)設(shè)備的預(yù)讀參數(shù)。

    sudo sh -c 'echo <num> > /sys/class/bdi/<major>:<minor>/read_ahead_kb'

    您需要根據(jù)實際環(huán)境替換以下參數(shù):

    • <num>:需要設(shè)置的預(yù)讀窗口大小(單位KB)。

    • <major>:<minor>:NFS文件系統(tǒng)的主要和次要設(shè)備號,可以通過sudo mountpoint -d <nfs_mountpoint>命令獲取。

    例如:

    sudo sh -c 'echo 15360 > /sys/class/bdi/0:422/read_ahead_kb'
    說明

    如果您掛載了多個NFS文件系統(tǒng),需要重復(fù)執(zhí)行命令修改每一個設(shè)備的預(yù)讀參數(shù)。

通過udev機制自動修改(多個文件系統(tǒng)修改)

您也可以利用udev機制,添加udev規(guī)則,為所有已掛載的設(shè)備手動觸發(fā)一次udev事件,使其觸發(fā)udev規(guī)則檢查并自動修改預(yù)讀參數(shù),也可以使后續(xù)新掛載的文件卷自動修改其預(yù)讀參數(shù)。操作步驟如下:

說明

udev(用戶空間設(shè)備管理器)是Linux內(nèi)核的一個子系統(tǒng),負(fù)責(zé)設(shè)備節(jié)點的管理和自動化。udev機制的核心組件是udev守護進程,它運行于用戶空間,并與內(nèi)核通過uevent機制進行通信。

  1. 打開并編輯NFS的udev rules配置文件(位于/etc/udev/rules.d/目錄)。如果不存在udev rules配置文件,請先自行創(chuàng)建。例如:

    sudo vim /etc/udev/rules.d/99-nfs.rules
  2. 在打開的文件中,添加udev規(guī)則,以自動修改預(yù)讀參數(shù)。

    該示例表示將read_ahead_kb的值設(shè)置為15,360 KB,您可以根據(jù)需要修改預(yù)讀參數(shù)。

    SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="/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"
  3. 保存并關(guān)閉文件。

  4. 重新加載udev規(guī)則,使新增規(guī)則生效。

    sudo udevadm control --reload
  5. 為所有已經(jīng)掛載的設(shè)備手動觸發(fā)一次udev事件,將已掛載設(shè)備的read_ahead_kb值一并修改。

    sudo udevadm trigger -c add -s bdi

通過修改NFS的配置文件(2.3.3-57.0.1.al8.1及之后版本的多個文件系統(tǒng)修改)

如果您的Alibaba Cloud Linux 3的NFS文件系統(tǒng)版本是nfs-utils-2.3.3-57.0.1.al8.1及之后的版本(可以通過rpm -qa | grep nfs-utils命令查詢 ),可以通過修改NFS的配置文件來修改read_ahead_kb參數(shù)(位于 /etc/nfs.conf目錄 )。

  1. 打開并編輯NFS的配置文件。

    sudo vim /etc/nfs.conf 
  2. 修改默認(rèn)預(yù)讀值,然后保存并關(guān)閉文件。

    [nfsrahead]
    nfs=15000
    nfs4=16000

    請根據(jù)實際掛載的NFS文件系統(tǒng)版本(nfs/nfsv4)修改對應(yīng)參數(shù)值。nfs表示NFS文件系統(tǒng)協(xié)議版本是3;nfs4表示NFS文件系統(tǒng)協(xié)議版本是4,您可以通過mount -v | grep nfs命令查詢。

  3. 對于已掛載的NFS文件系統(tǒng),需要手動卸載后重新掛載使配置生效。

    sudo umount <nfs_mountpoint>
    sudo mount -t nfs -o vers=<NFS協(xié)議版本> <NFS服務(wù)器地址> <nfs_mountpoint>