问题描述
我使用以下命令在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的替代缓存位置,这些缓存位置更快并且可用于多个工作进程。
解决方法
评论中不断出现的答案
过去的时间似乎是蟒蛇,而不是选择的媒体。
在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,0.165582 s,633 MB/s
real 0m0.178s
user 0m0.000s
sys 0m0.060s