从内存上传到 S3 并对其进行基准测试

从内存上传到 S3 并对其进行基准测试

我正在 S3 读/写上运行一些非常基本的时间命令。问题是,我不希望它受到系统IO的影响,并且想从内存中对其进行测试。一位朋友建议使用 /dev/null 作为管道,但我有一个包含 1000 个文件的文件夹,大小约为 1GB。

我的 bash 命令现在看起来像这样:

time aws s3 cp folder s3://mybucket/folder

你有什么建议,只对内存中的写入进行计时?

非常感谢

答案1

将目录复制到 ramdisk,从那里上传(和测试)。

什么虚拟盘?有几个选项:

  1. 也许您的操作系统中已经有一个并且它的大小足够大。检查df(更方便的是:df -h,如果支持的话)类型文件系统的输出tmpfs。可能是/dev/shm。我希望/dev/shm它是世界可写的,所以如果它是一个虚拟磁盘并且它不是太小,那么你就可以使用它。

  2. 可能有一个专门供您的用户使用的单独的 ramdisk。看这个文件夹是什么/run/user/1000在我的 Debian 或 Kubuntu 中,df -h "$XDG_RUNTIME_DIR"我可以确认它是 tmpfs,了解它的大小和挂载点。

  3. 这个答案给出了如何按需创建 tmpfs 的示例(大小为 16 GiB,根据您的需求和资源进行调整):

    mount -o size=16G -t tmpfs none /mnt/tmpfs
    

    您需要 root 访问权限才能执行此操作。

有这样一个问题:tmpfs 的大小由什么决定?满了会发生什么?你可能会觉得很有趣。


作为替代方案,您可以使用vmtouch读取目录中的所有文件并映射到虚拟内存中。如果我是你,我会更喜欢 ramdisk。不过,如果由于某种原因您无法使用 ramdisk,那么最好了解一下vmtouch可以做什么。

作为普通用户,您可以使用vmtouch -t

-t
触摸虚拟内存页面。从文件的每一页读取一个字节。如果该页面未驻留在内存中,则会生成页面错误,并且该页面将从磁盘读取到文件系统的内存缓存中。

-t可能还不够:

注意:虽然保证每个页面都已放入内存,但在命令vmtouch完成时该页面可能会从内存中逐出。

作为 root 您可以使用vmtouch -l

-l
将页面锁定到物理内存中。此选项的工作原理与此相同,-t只是它调用mlock(2)所有内存映射并且完成后不关闭描述符。爬行结束时,如果成功,vmtouch 将无限期阻塞。文件将被锁定在物理内存中,直到vmtouch进程被终止。

相关内容