![对 Azure 的高级存储 P30 磁盘进行基准测试](https://linux22.com/image/652085/%E5%AF%B9%20Azure%20%E7%9A%84%E9%AB%98%E7%BA%A7%E5%AD%98%E5%82%A8%20P30%20%E7%A3%81%E7%9B%98%E8%BF%9B%E8%A1%8C%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95.png)
我们正在两个新的标准 DS13(8 核,56 GB)虚拟机(均使用最新/默认的 Windows 2012 R2 映像)上运行性能测试,这些虚拟机均由高级存储支持,并且在测试本地 SSD 性能的第一步中遇到了障碍。
我们了解到,这些虚拟机的 400GB 本地 SSD 中有 25% 用作临时存储,另外 75% 用于高级存储缓存: http://azure.microsoft.com/blog/2014/12/11/new-premium-storage-backed-virtual-machines/
对于剩下的 25%,我们期望看到以下表现: http://www.brentozar.com/archive/2014/09/azure-really-60-faster/ http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations/
...但 Crystal Disk Mark 显示了它爬行沿着:
Sequential Read : 4.097 MB/s
Sequential Write : 4.096 MB/s
Random Read 512KB : 4.112 MB/s
Random Write 512KB : 4.112 MB/s
Random Read 4KB (QD=1) : 2.057 MB/s [ 502.3 IOPS]
Random Write 4KB (QD=1) : 2.057 MB/s [ 502.2 IOPS]
Random Read 4KB (QD=32) : 2.048 MB/s [ 500.0 IOPS]
Random Write 4KB (QD=32) : 2.047 MB/s [ 499.7 IOPS]
Test : 50 MB [D: 7.2% (8.1/112.0 GB)] (x5)
Date : 2015/02/14 15:35:41
OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)
OS 磁盘的性能更好,但远不及 P20 磁盘所期望的 150 MB/s(假设这是为默认的 127GB OS 磁盘分配的)。
预期:
http://azure.microsoft.com/en-us/documentation/articles/storage-premium-storage-preview-portal/
看到:
Sequential Read : 66.031 MB/s
Sequential Write : 63.034 MB/s
Random Read 512KB : 65.861 MB/s
Random Write 512KB : 63.580 MB/s
Random Read 4KB (QD=1) : 2.097 MB/s [ 511.9 IOPS]
Random Write 4KB (QD=1) : 2.047 MB/s [ 499.7 IOPS]
Random Read 4KB (QD=32) : 2.086 MB/s [ 509.3 IOPS]
Random Write 4KB (QD=32) : 2.078 MB/s [ 507.4 IOPS]
Test : 50 MB [C: 12.9% (16.4/127.0 GB)] (x5)
Date : 2015/02/14 15:46:35
OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)
以及P30磁盘(带有只读缓存)也好不到哪里去:
Sequential Read : 204.567 MB/s
Sequential Write : 39.677 MB/s
Random Read 512KB : 204.549 MB/s
Random Write 512KB : 34.865 MB/s
Random Read 4KB (QD=1) : 20.951 MB/s [ 5114.9 IOPS]
Random Write 4KB (QD=1) : 1.666 MB/s [ 406.7 IOPS]
Random Read 4KB (QD=32) : 20.893 MB/s [ 5100.9 IOPS]
Random Write 4KB (QD=32) : 20.944 MB/s [ 5113.4 IOPS]
Test : 50 MB [E: 0.0% (0.2/1023.0 GB)] (x5)
Date : 2015/02/14 15:22:59
OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)
与我们目前的情况相比云盘在 D13s 上部署主机缓存(注意 4KB 随机读取的性能):
Sequential Read : 136.711 MB/s
Sequential Write : 10.210 MB/s
Random Read 512KB : 190.744 MB/s
Random Write 512KB : 9.063 MB/s
Random Read 4KB (QD=1) : 10.813 MB/s [ 2639.8 IOPS]
Random Write 4KB (QD=1) : 0.508 MB/s [ 107.5 IOPS]
Random Read 4KB (QD=32) : 106.533 MB/s [ 26009.1 IOPS]
Random Write 4KB (QD=32) : 9.363 MB/s [ 2286.0 IOPS]
Test : 50 MB [F: 4.1% (24.9/600.0 GB)] (x5)
Date : 2015/02/14 20:25:01
OS : Windows Server 2012 Datacenter (Full installation) [6.2 Build 9200] (x64)
以下是 SQLIO 针对本地 SSD 报告的内容:
C:\Program Files (x86)\SQLIO>sqlio -dD
sqlio v1.5.SG
1 thread reading for 30 secs from file D:testfile.dat
using 2KB IOs over 128KB stripes with 64 IOs per run
size of file D:testfile.dat needs to be: 8388608 bytes
current file size: 0 bytes
need to expand by: 8388608 bytes
expanding D:testfile.dat ... done.
initialization done
CUMULATIVE DATA:
throughput metrics:
IOs/sec: 499.38
MBs/sec: 0.97
对于 P30:
C:\Program Files (x86)\SQLIO>sqlio -dE
sqlio v1.5.SG
1 thread reading for 30 secs from file E:testfile.dat
using 2KB IOs over 128KB stripes with 64 IOs per run
size of file E:testfile.dat needs to be: 8388608 bytes
current file size: 0 bytes
need to expand by: 8388608 bytes
expanding E:testfile.dat ... done.
initialization done
CUMULATIVE DATA:
throughput metrics:
IOs/sec: 5103.03
MBs/sec: 9.96
P30 宣传的 5000 IOPS 可以满足要求,但是每个磁盘 200 MB/s 的吞吐量又如何呢?
注意:尝试使用 ReadWrite 缓存策略创建 P30 数据盘会导致:
Update-AzureVm:BadRequest:DataVirtualHardDisk 不支持磁盘缓存设置 ReadWrite。
任何指导将不胜感激:
- 为什么本地 SSD 存储的吞吐量限制在 500 IOPS 和 1-4 MB/s?
- 正如我们在 P30s 上的读取那样,我们如何实现 200MB/s 的写入速度,要运行什么测试?
- MS:您能发布我们可以运行以验证最大限制的 I/O 基准吗?
答案1
回答您的问题:
- 本地存储被限制为 500 IOPS @8KB。这些限制是一个错误,很快就会大幅提高。
- 为了达到 200 MB/秒的写入速度,您需要 (a) 使用至少 40KB 的块大小(否则您首先会遇到 5,000 IOPS 的限制),以及 (b) 使用至少 25 的队列深度(对于 40KB 的块,随着块大小的增加,您可以使用较小的队列深度)。
- 我们同意,如果我们发布可用于验证限制的基准,那就太好了。如果我们这样做,可能要等到我们退出预览版后才会这样做。
David Berg - Microsoft Azure 性能团队
答案2
高级存储仅支持读取缓存,而不支持像标准磁盘那样的读/写
答案3
SQLIO 测试的吞吐量有限,因为您使用的是默认的 2KB IO 块大小。将您当前获得的 P30 磁盘上的 IOPS 乘以块大小,您将得到 5103 IOPS * 2 KB = 10206 KB/s 或 9.97 MB/s,这是测试中报告的吞吐量。增加 SQLIO 命令中的块大小(请参阅http://www.mssqltips.com/sqlservertip/2127/benchmarking-sql-server-io-with-sqlio/),您将能够找到吞吐量限制。64 KB 的 IO 块大小应为您提供 5103 IOPS * 64 KB = 326592 KB/s 或 318.94 MB/s,并测试 Microsoft 宣传的限制。
我还没有在我的 D 系列 VM 上测试过本地 SSD,但我还没有访问高级存储的权限,所以在这种情况下它不会有帮助。我唯一的猜测是,一旦你在使用 75% 本地 SSD 容量的机器上使用高级存储,它可能会限制你的本地 SSD 访问以保证高级存储性能。