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
因此,您测试性能的方式可能有些奇怪,正如您提到的那样,您编写了一个小脚本来执行此操作,也许如果您尝试使用更“常用”的方法,您会得到相同的结果正如我得到的。
我一直是 运行 一个将数据同步写入磁盘的数据库应用程序,因此一直在寻找最佳的磁盘吞吐量。我发现 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
因此,您测试性能的方式可能有些奇怪,正如您提到的那样,您编写了一个小脚本来执行此操作,也许如果您尝试使用更“常用”的方法,您会得到相同的结果正如我得到的。