为什么 EC2 实例上的“/dev/shm”具有与 EBS 驱动器相当的 I/O 吞吐量?

为什么 EC2 实例上的“/dev/shm”具有与 EBS 驱动器相当的 I/O 吞吐量?

我最近了解了方便的“共享内存”文件系统/dev/shm。我想看看是否可以使用它来加速有时会在目录中写入和读取的磁盘绑定程序,因此我在 EC2 实例(运行 Ubuntu 16.04 的 c4.8xlarge)上进行了一些实验:

$ time yes asdfjkl | head -1000000000 > /mnt/fake.txt
real    0m21.381s
$ time yes asdfjkl | head -1000000000 > /dev/shm/fake.txt
real    0m20.266s
$ time yes asdfjkl | head -1000000000 > /dev/null
real    0m14.334s

EC2 实例的写入吞吐量似乎/dev/shm/与 EBS 驱动器相当,这令人惊讶。htop表示机器未使用交换空间来写入/dev/shm.第三种情况下的写入速度明显更快,这表明在前两种情况下/dev/null我可能不受某些其他因素(例如通过实现的 CPU)的约束。yes

我在我的个人计算机上运行了相同的实验——默认情况下有足够的内存/dev/shm可以容纳 7.5 GB asdfjkl\n,如果有人认为它们很重要,我可以挖掘更多硬件细节——也运行 Ubuntu 16.04:

$ time yes asdfjkl | head -1000000000 > /mnt/fake.txt
real    0m36.520s
$ time yes asdfjkl | head -1000000000 > /dev/shm/fake.txt
real    0m12.516s
$ time yes asdfjkl | head -1000000000 > /dev/null
real    0m11.252s

这与我的预期更加接近。两台机器上和两个文件系统上的读取吞吐量(写入/dev/null)大致与相应情况下的写入吞吐量成正比。

另外两个观察结果,我不太知道如何解释:

  • 在 EC2 实例上,htop表示内存使用量与写入后的大小相当/dev/shm/fake.txt,而在我的桌面上则不然。
  • 在 EC2 实例上,并发磁盘写入拥塞似乎会减慢对共享内存的写入速度,其减慢程度与对磁盘的写入速度减慢的速度相当,而在我的桌面上则不然。

答案1

如果我不得不猜测,我会说基础卷实际上是由 EBS 支持的。创建由 EBS 支持或由实例存储支持的根卷类型取决于 AMI。

然后它也取决于/dev/shm 指向什么。我最近了解到EC2实例上通常有2个磁盘。您可以通过运行以下命令来查看哪个是哪个:sudo nvme list

也可以看看:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.htmlhttps://docs.aws.amazon.com/AWSEC2/latest/UserGuide/add-instance-store-volumes.html

相关内容