python - SSD 与 tmpfs 速度

标签 python linux performance solid-state-drive tmpfs

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

$ 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 的替代缓存位置,这些位置更快并且可供多个工作进程使用。

最佳答案

来自评论的回答:
流逝的时间似乎是 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

关于python - SSD 与 tmpfs 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64066357/

相关文章:

python - 通过重复序列填充列

python - 如何在 Jython 项目中使用 Maven 导入 Python 模块?

linux - 使用信号捕获 fork 时程序变得无限

linux - 在 linux 中显示从今天起恰好 5 天前登录的用户列表?

c# - Entity Framework 在 x64 和 x86 上的启动速度要慢得多

html - 如何解决为响应目的缩放图像的性能问题?

performance - Delphi优化: constant loop

python - 将 Python Dataframe 中的一列转换为列表

python - 什么是 Python 的列表[ :x] in C++? 的等价物

linux - 确保 bash 脚本变量是有效权限位的有效方法是什么?