【问题标题】:SSD vs. tmpfs speedSSD 与 tmpfs 速度
【发布时间】:2020-09-25 14:42:53
【问题描述】:

我使用以下命令在 Ubuntu 的主目录中创建了一个 tmpfs 文件系统:

$ mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0777 tmpfs space
$ df -h space .
File system                  Size    Used Avail. Avail% Mounted at
tmpfs                        1,0G    100M  925M   10%   /home/user/space
/dev/mapper/ubuntu--vg-root  914G    373G  495G   43%   /

然后我写了这个 Python 程序:

#!/usr/bin/env python3

import time
import pickle


def f(fn):
    start = time.time()
    with open(fn, "rb") as fh:
        data = pickle.load(fh)
    end = time.time()
    print(str(end - start) + "s")
    return data


obj = list(map(str, range(10 * 1024 * 1024)))  # approx. 100M


def l(fn):
    with open(fn, "wb") as fh:
        pickle.dump(obj, fh)


print("Dump obj.pkl")
l("obj.pkl")
print("Dump space/obj.pkl")
l("space/obj.pkl")

_ = f("obj.pkl")
_ = f("space/obj.pkl")

结果:

Dump obj.pkl
Dump space/obj.pkl
0.6715312004089355s
0.6940639019012451s

我对这个结果感到困惑。 tmpfs 不是基于 RAM 的文件系统吗?RAM 不应该比任何硬盘(包括 SSD)快得多吗?

此外,我注意到当我将目标文件大小增加到大约 15GB 时,该程序使用了超过 15GB 的 RAM。 1 GB。

如何解释?

这个实验的背景是,我正在尝试寻找替代硬盘和 Redis 的缓存位置,这些位置更快并且可供多个工作进程使用。

【问题讨论】:

  • 如果你赶时间,你不使用cpickle吗?
  • 更多的是讨论点而不是答案;对这造成的格式感到抱歉。我使用与您相同的方式创建了一个 tmpsfs(在我的家下使用相同的名称,空间)。 $ time dd if=/dev/zero of=space/test.img bs=1048576 count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.0231555 s, 4.5 GB/s real 0m0.030s user 0m0.000s sys 0m0.030s
  • 到 SSD:$ time dd if=/dev/zero of=test.img bs=1048576 count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.165582 s, 633 MB/s real 0m0.178s user 0m0.000s sys 0m0.060s
  • 可能是 python 负责时间,而不是选择的 FS/媒体。 0m0.030s vs 0m0.178s ... 似乎是 tmpfs 的明显赢家 ...
  • @tink 是的,我可以复制您的观察结果,所以可能是 Python 问题。我推测,可能是 Python 数据结构的重构考虑了大部分时间,因此较短的读取时间不会显着改变总时间。

标签: python linux performance solid-state-drive tmpfs


【解决方案1】:

来自 cmets 的答案:

经过的时间似乎是 python 的事情,而不是选择的媒体。

在 Linux 上使用 OS 命令的类似设置(SSD 与 tmpfs)中,写入 100MB 文件的速度差异很明显:

tmpfs

$ time dd if=/dev/zero of=space/test.img bs=1048576 count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0231555 s, 4.5 GB/s

real    0m0.030s
user    0m0.000s
sys 0m0.030s

SSD

$ time dd if=/dev/zero of=test.img bs=1048576 count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.165582 s, 633 MB/s

real    0m0.178s
user    0m0.000s
sys 0m0.060s

【讨论】:

猜你喜欢
  • 2018-07-14
  • 1970-01-01
  • 2013-06-10
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多