And*_*oid 84 linux cache virtual-memory
我有一个相当旧的服务器,它有 4GB 的 RAM,它几乎整天都在提供相同的文件,但它是从硬盘驱动器这样做的,而 3GB 的 RAM 是“免费的”。
任何曾经尝试过运行 ram 驱动器的人都可以见证它在速度方面非常棒。这个系统的内存使用量通常不会超过 1GB/4GB,所以我想知道是否有办法使用额外的内存来做一些好的事情。
更具体地说,我不是在这里寻找“黑客”。我希望文件系统调用从 RAM 提供文件,而无需创建 ram 驱动器并手动复制文件。或者至少是一个为我做这件事的脚本。
这里可能的应用是:
有任何想法吗?
编辑:
小智 70
vmtouch似乎是完成这项工作的好工具。
强调:
编辑: 问题中所问的用法列在vmtouch Hompage上的示例 5 中
Example 5
Daemonise and lock all files in a directory into physical memory:
vmtouch -dl /var/www/htdocs/critical/
Run Code Online (Sandbox Code Playgroud)
eww*_*ite 31
这也可以使用vmtouch Virtual Memory Toucher实用程序实现。
该工具允许您控制 Linux 系统上的文件系统缓存。您可以强制或锁定 VM 缓存子系统中的特定文件或目录,或使用它来检查文件/目录的哪些部分包含在 VM 中。
How much of the /bin/ directory is currently in cache?
$ vmtouch /bin/
Files: 92
Directories: 1
Resident Pages: 348/1307 1M/5M 26.6%
Elapsed: 0.003426 seconds
Run Code Online (Sandbox Code Playgroud)
或者...
Let's bring the rest of big-dataset.txt into memory...
$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo oOOOOOOO] 6887/42116
[OOOOOOOOo oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116
Files: 1
Directories: 0
Touched Pages: 42116 (164M)
Elapsed: 12.107 seconds
Run Code Online (Sandbox Code Playgroud)
Dav*_*ley 20
Linux 会在内存中缓存尽可能多的磁盘 IO。这就是缓存和缓冲内存统计信息。在存储正确的东西方面,它可能比您做得更好。
但是,如果您坚持将数据存储在内存中,则可以使用 tmpfs 或 ramfs 创建一个 ram 驱动器。不同之处在于 ramfs 将分配您要求的所有内存,因为 tmpfs 将仅使用您的块设备正在使用的内存。我的记忆有点生疏,但你应该能够做到:
# mount -t ramfs ram /mnt/ram
Run Code Online (Sandbox Code Playgroud)
或者
# mount -t tmpfs tmp /mnt/tmp
Run Code Online (Sandbox Code Playgroud)
然后将您的数据复制到目录中。显然,当您关闭机器或卸载该分区时,您的数据将会丢失。
And*_*oid 18
在对 2.6 内核交换和页面缓存功能进行了大量阅读之后,我找到了“fcoretools”。其中包含两个工具;
(如果其他人觉得这很有趣,我会在这里发布)
即使不使用其他工具,也有两个内核设置可以提供很大帮助:
告诉 linux 内核它应该如何积极地使用交换。引用维基百科文章:
Swappiness 是 Linux 内核的一个属性,它改变了换出运行时内存之间的平衡,而不是从系统页面缓存中删除页面。Swappiness 可以设置为 0 到 100 之间的值。较低的值意味着内核将尽可能避免交换,而较高的值会使内核积极尝试使用交换空间。默认值为 60,对于大多数桌面系统,将其设置为 100 可能会影响整体性能,而将其设置得较低(甚至 0)可能会提高交互性(减少响应延迟)。
从vm.txt引用:
控制内核回收用于缓存目录和 inode 对象的内存的趋势。
在 vfs_cache_pressure=100 的默认值下,内核将尝试以相对于页面缓存和交换缓存回收的“公平”速率回收 dentry 和 inode。降低 vfs_cache_pressure 会导致内核更喜欢保留 dentry 和 inode 缓存。...
通过设置swappiness
高(如 100),内核移动它不需要交换的所有内容,释放 RAM 用于缓存文件。通过设置vfs_cache_pressure
较低(比方说设置为 50,而不是 0!),它将有利于缓存文件而不是将应用程序数据保存在 RAM 中。
(我在一个大型 Java 项目上工作,每次运行它都会占用大量 RAM 并刷新磁盘缓存,因此下次编译项目时,所有内容都再次从磁盘读取。通过调整这两个设置,我管理将源和编译输出缓存在 RAM 中,这大大加快了进程。)
归档时间: |
|
查看次数: |
76594 次 |
最近记录: |