Iva*_*vic 29 linux performance filesystems ramdisk tmpfs
我需要为大约 10 GB 的数据设置一个内存存储系统,其中包含许多 100 kb 的单个文件(图像)。将会有大量的读取和相当周期性的写入(添加新文件,删除一些旧文件)。
现在,我知道tmpfs 的行为就像一个常规文件系统,例如,您可以使用df检查空闲/已用空间,这是一个很好的功能。但是,我感兴趣的是ramfs是否会在 IO 操作的速度方面提供一些优势。我知道在使用ramfs时我无法控制消耗的内存大小,并且如果它完全消耗可用 RAM,我的系统可能会挂起,但这在这种情况下不会成为问题。
总而言之,我感兴趣:
- 性能方面,哪个更快:ramfs或tmpfs(可能是为什么)?
- tmpfs 什么时候使用交换空间?它是否将已保存的数据移动到交换(为当前正在运行的其他程序释放 RAM)或仅在那时没有可用 RAM 时才移动新数据?
eww*_*ite 28
我的建议:
在正常条件下测量和观察现实生活中的活动。
这些文件不太可能总是被需要并从缓存中提供。但是有一个叫做vmtouch的好工具可以告诉你在给定时刻缓存中的内容。您还可以使用它来将某些目录或文件锁定到缓存中。所以看看一些经常使用后的情况。在这种情况下不需要使用 tmpfs 和 ramfs。
请参阅:http : //hoytech.com/vmtouch/
我想您会惊讶地发现最活跃的文件可能已经驻留在缓存中。
就 tmpfs 与 ramfs 而言,没有明显的性能差异。存在操作差异。一个真实的用例是 Oracle,其中 ramfs 用于允许 Oracle 管理 RAM 中的数据,而没有被交换的风险。tmpfs 数据可以在内存压力下换出。动态调整大小和修改设置也存在差异。
EEA*_*EAA 13
不要想太多。在您的系统中放置足够的 RAM,让内核的磁盘缓存为您处理事情。这样你就可以直接从内存中读取数据,同时仍然能够将数据保存在磁盘上。
1) 性能基准。
以这个页面为参考,我对tmpfs和ramfs进行了I/O对比,结果在性能上几乎是一样的:
# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)
# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s
# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s
# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s
# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s
Run Code Online (Sandbox Code Playgroud)
2)根据这个页面,tmpfs使用swap,而ramfs不使用swap。
归档时间: |
|
查看次数: |
28921 次 |
最近记录: |