Google Cloud Platform 区域 SSD 比本地 SSD 具有更高的性能持久性?

Google Cloud Platform zonal SSDs higher performance persistence than local SSDs?

我一直是 运行 一个将数据同步写入磁盘的数据库应用程序,因此一直在寻找最佳的磁盘吞吐量。我发现 GCP 的本地 SSD 应该提供最佳性能(IOPS 和 MB/s)。但是,我尝试使用它们,发现在执行同步数据库写入基准测试时,持久区域 SSD 实现的吞吐量明显优于本地 SSD。通常,运行使用单个本地 SSD 比具有 4 个分区的 RAID 配置具有更好的性能。

为了测试性能,我 运行 一个由单个线程组成的基准测试,在循环中创建 t运行 个动作并执行 运行dom 4KB 写入。

永久区域 SSD 为 128GB,而本地 SSD 由 RAID 0 中的 4 个 SSD 组成。具有 32 vCPUs 的 N2D 机器用于消除 CPU 瓶颈。为了确保 OS 或文件系统没有问题,我尝试了各种不同的版本,包括 Google 推荐的版本。然而,结果总是一样的。

我的平均实验结果是:

SSD Latency Throughput
Zonal P SSD (128 GB) ~1.5ms ~700 writes/second
Local SSD (4 SSDs NVME RAID 0) ~14ms ~71 writes/second
Local SSD (1 SSD) ~13ms ~75 writes/second

我对如何进行有点不知所措,因为我不确定是否应该得到这个结果。如果是这样,我最好的选择似乎是使用区域永久性磁盘。您认为这些结果看起来正确吗,还是我的设置有问题?

建议关闭写入缓存等将提高性能,但是,这里的目标是获得同步磁盘写入的快速性能。否则,我最好的选择是区域持久性 SSD(它们提供复制存储)或只使用 RAM,它总是比任何 SSD 都快。

正如 AdolfoOG 所建议的那样,我的 RAID 配置可能存在问题,因此为了阐明这一点,我使用以下命令创建了包含四个设备的 RAID 0 设置。请注意,/dev/nvme0nX 指的是我正在使用的每个 NVMe 设备。

sudo mdadm --create /dev/md0 --level=0 --raid-devices=4 /dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 
sudo mkfs.ext4 -F /dev/md0 
sudo mkdir /mnt/disks/ 
sudo mkdir /mnt/disks/stable-store 
sudo mount /dev/md0 /mnt/disks/stable-store 
sudo chmod a+w /mnt/disks/stable-store 

这应该与 Google 建议的过程相同,当然除非我搞砸了!

编辑原始问题后完全编辑的答案:

我试图复制你的情况,我使用了一种更“普通”的方法,我没有编写任何代码来测试 MB/s,而是我只使用了“dd”和“hdparm”,我也使用 N2-standard-32 实例类型,将 100 GB Persistent SSD 作为启动盘,RAID 0 由 4 个 NVME Local SSD 组成。在我的结果下方:

Write tests:

root@instance-1:~# dd if=/dev/zero of=./test oflag=direct bs=1M count=16k 16384+0 records in 16384+0 records out 17179869184 bytes (17 GB, 16 GiB) copied, 18.2175 s, 943 MB/s

root@instance-1:~# dd if=/dev/zero of=./test oflag=direct bs=1M count=32k 32768+0 records in 32768+0 records out 34359738368 bytes (34 GB, 32 GiB) copied, 42.1738 s, 815 MB/s

root@instance-1:~# dd if=/dev/zero of=./test oflag=direct bs=1M count=64k 65536+0 records in 65536+0 records out 68719476736 bytes (69 GB, 64 GiB) copied, 83.6243 s, 822 MB/s

Local SSD:

root@instance-1:~# dd if=/dev/zero of=/mnt/disks/raid/test oflag=direct bs=1M count=16k 16384+0 records in 16384+0 records out 17179869184 bytes (17 GB, 16 GiB) copied, 10.6567 s, 1.6 GB/s

root@instance-1:~# dd if=/dev/zero of=/mnt/disks/raid/test oflag=direct bs=1M count=32k 32768+0 records in 32768+0 records out 34359738368 bytes (34 GB, 32 GiB) copied, 21.26 s, 1.6 GB/s

root@instance-1:~# dd if=/dev/zero of=/mnt/disks/raid/test oflag=direct bs=1M count=64k 65536+0 records in 65536+0 records out 68719476736 bytes (69 GB, 64 GiB) copied, 42.4611 s, 1.6 GB/s

Read tests:

Persisten SSD:

root@instance-1:~# hdparm -tv /dev/sda

/dev/sda: multcount = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 13054/255/63, sectors = 209715200, start = 0 Timing buffered disk reads: 740 MB in 3.00 seconds = 246.60 MB/sec root@instance-1:~# hdparm -tv /dev/md0

Local SSD

/dev/md0: readonly = 0 (off) readahead = 8192 (on) geometry = 393083904/2/4, sectors = 3144671232, start = unknown Timing buffered disk reads: 6888 MB in 3.00 seconds = 2761.63 MB/sec

所以,我实际上在本地 SSD raid 中看到了更好的性能,并且根据 table 的性能,我得到了预期的读取结果,并根据 this table:

Throughput (MB/s):  Read: 2,650;  Write: 1,400

因此,您测试性能的方式可能有些奇怪,正如您提到的那样,您编写了一个小脚本来执行此操作,也许如果您尝试使用更“常用”的方法,您会得到相同的结果正如我得到的。