在Linux VM上安装Azure文件共享时性能较差

我曾尝试将Azure文件服务作为networking文件系统的一种forms,可以同时由多个虚拟机进行安装 – 这是常规的Azure虚拟硬盘所不具备的function。 Azure VHD一次只能连接到一个虚拟机。

但是,通过SMB协议安装Azure文件共享时,我观察到一些非常差的写入性能

设置如下,我已经在Standard_DS2虚拟机上启动了Canonical:UbuntuServer:16.04-LTS:latest虚拟机。

启动过程完成后,请按照官方说明通过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 

然后我运行这个简单的写性能testing:

 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驱动器)上运行相同的testing,我看到以下数字:

 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。

这样的performance数字是预期还是我错过了什么?

是。

请记住,尽pipe本地磁盘和Azure文件基本上是networking存储,但后者使用I / O API而不是直接硬件访问。 延迟会更高。 说,让我们试试一个简单的math:

您正在发出500个请求,每次打开并closures一个连接:

500个请求/ 20.673.sec = 24.18 Req / sec

24.18 / 1000 = 0.02418s来完成每个请求,这很好。

如果您需要针对小文件和/或大量文件的性能,则Azure文件存储不适合您的使用情况。 理论上,它可以达到1000 IOPS和60MB /秒。

另外,让我们面对它,SMB / CIFS处理小文件的速度非常慢。

我不确定这是什么问题,因为这看起来有很大的不同,但请记住:

  1. Azure文件存储是标准存储,而不是高级,所以它都是旋转磁盘,没有固态硬盘,它总是比你的SSD慢。
  2. 现在你在networking上运行,这也增加了一些时间。 不同大小的VM具有不同的限制,D2将被限制在约1.5Gb / s