我有一个相当老的服务器,有4GB的内存,它几乎是整天服务于相同的文件,但它是从硬盘驱动器,而3GB的RAM是“免费的”。
任何曾经尝试过运行ram-drive的人都可以见证它的速度真棒 。 这个系统的内存使用率通常不会高于1GB / 4GB,所以我想知道是否有一种方法可以使用额外的内存。
更具体地说,我不是在这里寻找“黑客”。 我想要文件系统调用来从RAM提供的文件,而不需要创build一个ram驱动器,并手动复制那里的文件。 或者至less有一个脚本,为我做这个。
这里可能的应用是:
有任何想法吗?
编辑:
vmtouch似乎是一个很好的工具。
强调:
vmtouch手册
编辑:问题中问的使用情况在vmtouch主页上的示例5中列出
Example 5 Daemonise and lock all files in a directory into physical memory: vmtouch -dl /var/www/htdocs/critical/
编辑2:正如在评论中指出的那样 ,现在有一个可用的git仓库 。
这也可以使用vmtouch 虚拟内存 Toucher工具 。
该工具允许您控制Linux系统上的文件系统caching。 您可以强制或locking虚拟机caching子系统中的特定文件或目录,或者使用它来检查虚拟机中包含的文件/目录的哪些部分。
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
要么…
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
经过对2.6内核交换和页面cachingfunction的大量阅读,我发现了“fcoretools”。 它由两个工具组成;
(如果有人发现这个有趣的我在这里发布这个)
Linux将尽可能多地在内存中caching磁盘IO。 这是caching和缓冲区内存统计信息。 在储存正确的东西方面,它可能会做得更好。
但是,如果您坚持将数据存储在内存中,则可以使用tmpfs或ramfs创buildram驱动器。 不同之处在于ramfs会分配你所要求的所有内存,因为tmpfs只会使用你的块设备正在使用的内存。 我的记忆有点生疏,但你应该能够做到:
# mount -t ramfs ram /mnt/ram
要么
# mount -t tmpfs tmp /mnt/tmp
然后将您的数据复制到目录。 显然,当您closures机器或卸载该分区时,您的数据将会丢失。
一个穷人把文件放到文件系统caching中的技巧就是简单地把它放到/ dev / null中。
有两个内核设置可以在不使用其他工具的情况下提供相当大的帮助:
告诉Linux内核它应该使用交换的积极性。 引用维基百科的文章:
Swappiness是Linux内核的一个属性,它改变了运行时内存之间的平衡,而不是从系统页面caching中删除页面。 Swappiness可以设置为0到100之间的值。 一个较低的值意味着内核将尝试尽可能地避免交换,而更高的值会使内核积极尝试使用交换空间。 默认值为60,对于大多数桌面系统,将其设置为100可能会影响整体性能,而将其设置为较低(即使为0)可能会提高交互性(降低响应延迟)。
从vm.txt引用:
控制内核回收用于caching目录和inode对象的内存的趋势。
在vfs_cache_pressure = 100的默认值下,内核将尝试以相对于pagecache和swapcache回收的“公平”的速率回收dentries和inode。 减lessvfs_cache_pressure会导致内核倾向于保留dentry和inodecaching。 …
通过将swappiness
设置swappiness
高(如100),内核将移动不需要交换的所有内容,释放RAM以caching文件。 通过设置vfs_cache_pressure
(比方说50,而不是0!),它将有利于caching文件,而不是将应用程序数据保存在RAM中。
(我在一个大型的Java项目上工作,每次运行它时,都花费了大量的RAM和刷新磁盘caching,所以下次我编译项目时,所有的东西都是从磁盘上读取的。通过调整这两个设置,我pipe理保持源和编译输出caching在RAM中,这大大加快了处理速度。)
我非常怀疑它实际上是提供3 GB的RAM免费的磁盘文件。 Linux文件caching非常好。
如果你看到磁盘IO,我会查看你的日志configuration。 许多日志被设置为无缓冲,以保证最新的日志信息在发生崩溃时可用。 在必须快速运行的系统中,使用缓冲的日志IO或使用远程日志服务器。
如果你有足够的内存,你可以简单地读取你想要caching与猫或类似的文件。 然后,Linux会做好保持的工作。
你可能有一个程序,只是mmap
你的文件,然后保持运行。
有各种各样的ramfs系统可以使用(例如,ramfs,tmpfs),但是一般来说,如果文件经常被读取,它们就坐落在文件系统caching中。 如果你的工作集文件比你的免费内存大,那么文件将被清除 – 但是如果你的工作集大于你的免费内存,那么你也不可能把它全部装入虚拟内存中。
在shell中检查“free”命令的输出 – “Cached”下的最后一列中的值是多less免费ram用于文件系统caching。
至于你的后一个问题,确保你的RAM坐在不同的内存通道上,以便处理器可以并行取数据。
我认为这可能会在应用程序层面更好地解决。 例如,可能有专门的Web服务器,或者你可能会考虑Apache的mod_cache 。 如果你有一个特定的目标,比如更快地提供networking内容,那么你可以从我认为的这种事情上得到改进。
但是你的问题本质上是一般的,Linux内存子系统被devise为提供RAM的最佳通用。 如果要针对某些types的性能,请考虑查找/ proc / sys / vm中的所有内容。
fcoretools包很有趣,我会对任何有关它的应用的文章感兴趣… 这个链接讲述了在应用程序中使用的实际系统调用。
台式电脑(例如ubuntu)已经在启动时使用预加载文件(至less是stream行的共享库)到内存。 它用来加速FF,OO,KDE和GNOME等不同恶意软件的启动和启动时间(使用evolution bloat-mailer)。
该工具名为readahead http://packages.ubuntu.com/dapper/admin/readahead
还有相应的系统调用: readahead(2) http://linux.die.net/man/2/readahead
还有一个预加载守护程序的项目: http : //linux.die.net/man/8/preload
http://www.coker.com.au/memlockd/这样做
虽然你真的不需要它,但linux会自动caching你正在使用的文件。
我只是试图dd if = / dev / yourrootpartition = / dev / null \ bs = 1Mcount = howmuchmemoryyouwanttofill
它并没有给我你想要的控制权,但它至less试图使用浪费的内存
我使用find / -name stringofrandomcharacter帮助很多
不是确切的问题,但我使用
findBASE_DIRECTORY -type f -exec cat {}> / dev / null \;
触发从快照创build的AWS卷中的文件的初始化。 如果你只是想读一些文件,它比官方build议使用dd更为重要。
有时候我可能想caching某个文件夹及其子文件夹中的文件。 我只是去这个文件夹,并执行以下内容:
找 。 -exec cp {} / dev / null \;
这些文件被caching