Python SSD与tmpfs速度

Python SSD与tmpfs速度,python,linux,performance,solid-state-drive,tmpfs,Python,Linux,Performance,Solid State Drive,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/s

我使用以下命令在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)都快吗

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

这怎么解释呢


本实验的背景是,我试图找到硬盘和Redis的替代缓存位置,这些位置更快,可供多个工作进程使用。

从评论中得出的答案如下:

时间流逝似乎是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

如果你很匆忙,你不会使用
cpickle
吗?与其说是一个答案,不如说是一个讨论点;很抱歉,这会造成格式问题。我使用与您相同的方法创建了一个tmpsfs(在我的家,space下使用相同的名称)<代码>$time-dd-if=/dev/zero-of=space/test.img-bs=1048576 count=100 100+0记录在100+0记录中,输出104857600字节(105 MB,100 MiB),0.0231555秒,4.5 GB/s实时0m0.030s用户0m0.000s系统0m0.030s和SSD:
时间-dd-if=/dev/zero-of=test.img-bs=1048576 count=100+0记录在100+0记录中,输出104857600字节(105MB,100MIB)复制,0.165582秒,633 MB/s真正的0m0.178s用户0m0.000s sys 0m0.060s
可能是python负责时间,而不是FS/选择的媒介。
0m0.030s
vs
0m0.178s
…似乎是tmpfs的明显赢家…@tink是的,我可以复制你的观察结果,所以可能是python的问题。我推测,可能是Python数据结构的重构需要考虑大部分时间,因此短的读取时间不会显著改变总时间。