SSD与tmpfs的速度



我在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(都快吗?

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

这怎么解释呢?

这个实验的背景是,我正在努力寻找硬盘和Redis的替代缓存位置,这些位置更快,可用于多个工作进程。

来自评论的答案:

过去的时间似乎是蟒蛇的事情,而不是媒体的选择。

在Linux上使用操作系统命令的类似设置(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

相关内容

  • 没有找到相关文章

最新更新