Performance

在 Linux VM 上掛載 Azure 文件共享時性能不佳

  • March 10, 2017

我已經嘗試將Azure 文件服務作為一種網路文件系統形式,可以同時由多個 VM 掛載——這是正常 Azure 虛擬硬槃無法做到的。Azure VHD 一次只能附加到一個 VM。

但是,當通過 SMB 協議掛載 Azure 文件共享時,我觀察到一些非常糟糕的寫入性能。

設置如下,我在Canonical:UbuntuServer:16.04-LTS:latest虛擬機上啟動了虛擬Standard_DS2機。

啟動過程完成後,我按照官方說明通過 SMB 掛載 Azure 文件共享。

sudo apt-get install cifs-utils
sudo mkdir -p /mnt/azure
sudo mount -t cifs //<storageaccount>.file.core.windows.net/<file-share-name> /mnt/azure/ -o vers=3.0,username=<storageaccount>,password=<base64-encoded>,dir_mode=0777,file_mode=0777,serverino

然後我執行這個簡單的寫入性能測試:

time for i in $(seq 1 500); do echo "hello!" > /mnt/azure/hello.txt; done

real    0m20.673s
user    0m0.032s
sys     0m0.124s

可以看出,完成需要超過 20 秒。作為比較,在我的本地機器(使用 SSD 驅動器)上執行相同的測試,我看到以下數字:

time for i in $(seq 1 500); do echo "hello!" > hello.txt; done

real    0m0.031s
user    0m0.004s
sys     0m0.024s

這是在大約 30毫秒內完成。因此,在針對 Azure 文件共享執行時,性能損失係數幾乎為 1000。

這樣的性能數字是可以預期的還是我錯過了什麼?

是的。

請記住,雖然本地磁碟和 Azure 文件基本上是網路儲存,但後者使用 I/O API 而不是直接硬體訪問。延遲會高很多。說,讓我們嘗試一個簡單的數學:

您正在發出 500 個請求,並且每次打開和關閉連接時:

500 個請求/20.673.sec = 24.18 請求/秒

24.18 / 1000 = 0,02418 秒完成每個請求,這很棒。

如果您需要針對小型和/或大量文件的性能,那麼 Azure 文件儲存不適合您的案例。理論上可以達到1000 IOPS和60MB/sec。

此外,讓我們面對現實吧,SMB/CIFS 處理小文件的速度非常慢。

引用自:https://serverfault.com/questions/837430