好的,首先,我要说我不是操作人员,而是开发人员。所以我要进入这里一片未知的土地,所以请多多包涵。
我想使用Azure虚拟机从1.9 GB的zip文件中提取50 GB的XML文件。因此,我一直在测试我应该使用Azure上的哪种实例大小来获得良好的性能,同时又不会支付超出所需的费用。
但是,Azure VM的磁盘性能并没有达到惊人的水平,我想知道是我做错什么了,还是可以预期的结果。
首先,我一直在测试什么?我有一个自定义.NET控制台应用程序,除了将zip文件作为参数外,它什么也不做,并立即开始将zip文件解压缩到该zip文件所在的目录中。在进行提取时,该应用程序会计算多少兆字节应用程序已每秒写入目标文件并输出。
在我的本地开发机器上,此应用程序的写入速度达到160-210 MB / s,因此性能非常好。因此整个提取过程大约需要8分钟。我本地计算机的规格是Intel Core i7 950、3 GHz,4核(8逻辑),12 GB RAM,Samsung SSD 830系列250 GB。
好的,所以我开始测试不同的实例大小,这是我的结果。
- 在具有Windows Server 2012 Datacenter R2(8核,14 GB RAM)的A4实例上,使用相同的存储帐户在没有主机缓存的情况下使用4个虚拟磁盘进行条带化RAID,我得到了稳定的30-35 MB / s,这意味着提取花费了24分48秒。我还尝试了启用主机缓存,但实际上并没有任何区别。
- 在具有Windows Server 2012数据中心(8核,28 GB RAM,500 GB本地SSD磁盘)的D4实例上,我在开始的几分钟内获得了非常好的性能(150+ MB / s),然后以200 MB / s和山谷速度为9 MB / s。平均性能在70到100 MB / s之间。提取耗时9分40秒。
- 在具有Windows Server 2012数据中心(4核,14 GB RAM,250 GB本地SSD磁盘)的D3实例上,我在开始的第一分钟就获得了非常好的性能(150+ MB / s),但是随后性能下降到了稳定的20-40 MB / s,使提取过程花费21分49秒。
在D2和D1实例上,磁盘性能比D3上差。
这真的让我感到惊讶。本地SSD磁盘在D1,D2和D3实例上的性能如何如此差?有谁知道为什么D1和D4之间的磁盘性能会有如此大的差异?这是内存问题吗?当我在提取作业进行期间查看任务管理器时,内存使用量呈爆炸式增长。我怀疑这是因为Windows正在缓存写入的数据,但是当内存不足时,它必须将数据刷新到磁盘。发生这种情况时,磁盘性能会下降。但这在我的本地计算机上不会发生,那么为什么在这些VM上需要这种激进的缓存?
我知道我的本地计算机与Azure中托管的虚拟机之间存在差异,但是我真的可以期待磁盘性能吗?
(我最初在Stackoverflow上发布了我的问题,因为我怀疑是我的应用程序引起了问题。但是我现在不确定了。)