指示Linuxcaching交换文件中的文件

背景:Linux VFScaching将caching从内存中读取的所有文件。 这一直持续下去,直到内存已满,此时最早的文件被从caching中踢出。

我正在运行带有networking连接存储的XenServer。 我的服务器在networking附加存储上有它们的根文件系统。 我在每个XenServer主机中都有一个本地磁盘。 我的服务器在本地存储上有它们的交换分区。 在我的具体情况下,networking附加存储是加载和磁盘io可以很慢。 我有这样的东西安装,因为本地磁盘没有使用RAID或以任何方式保护。 我的系统可以容忍本地磁盘故障,因为我将失去的是我的交换分区。

我想知道是否有人知道如何指示Linux填充caching文件的交换分区(除了RAM)? 对于使用所有本地磁盘的物理服务器,这不会带来任何速度上的好处,但对于我的服务器来说,这是很有意义的。

你要做什么的问题是,VFScaching完全在内核中控制,而你的问题空间是一个很小的问题 – 一般来说,将caching放入交换将完全破坏caching的目的(尽pipe我同意你的用例是有效的)。 我的观点是,内核当前支持的内容不太可能(当然,我从来没有听说过任何你想做的事情)。

如果您运行的是更虚拟化的虚拟化技术,例如qemu,则可以“过度使用”虚拟机使用的内存。 通过这种方式,虚拟机使用的内存对于主机来说更像是“常规”进程内存,而当不需要的时候,您可以使用主机的交换空间将其分页。 如果虚拟机中的进程实际上需要所有的内存,或者虚拟机中的caching压力很大,这可能会导致交换机器的风险,但可以通过一些小心的调整来实现。

任何试图在用户空间pipe理这类事情的尝试都不太可能发挥作用,因为VFScaching是所有内核级别的,并且在用户空间中用于pipe理它的(再一次)用例是非常小的。 如果是要caching的应用程序数据,则可以为数据提供用户空间caching(如果您需要的文件系统可以使用FUSE,但特定于应用程序的数据存储会更好),但这样做很多工作(caching不是很简单),当它是你需要caching的根文件系统时,它将不起作用。

如果你确定这是值得的,我认为你将花费大量时间编写和debugging你自己的内核级代码来支持这个用例。 而不是把问题概括为“将caching存储在交换空间”(这将直接得到很多人的防范),可能更容易的是某种“SAN设备caching”机制,它使用交换空间而不是VFS – 内存caching。 注意我说“容易”,而不是“容易” – 这仍然是一个很大的工作。

在考虑修改内核之前,我愿意花费大量的精力(和金钱)来提高我的NAS / SAN的性能,因为老实说,它会比caching提供更多的优势。 通过caching,初始访问总是和基础访问机制一样慢,如果能够更快地进行访问,则可能会提高percieved性能,而不是通过快速(不频繁)重复访问来缓慢访问初始访问。 还要考虑为所有虚拟机提供更多内存的成本 – 你可以花费大量的RAM来花费一个月或两个内核的时间。