是否可以禁用或调整OpenVZ的文件系统caching共享?

对于基于容器的虚拟化的OpenVZ,似乎主机和所有客户共享文件系统caching。 在谈论虚拟化时,这听起来似是而非,但这实际上是OpenVZ的一个特性。

这也是有道理的。 由于只有一个内核正在运行,因此可以通过在内存中共享文件系统caching的相同页面来获益。 虽然这听起来有益,但我认为这里的一个设置实际上受到它的影响。 原因如下:我的机器实际上并没有在磁盘上共享任何文件,所以我不能从中受益。

几个OpenVZ机器正在使用MyISAM表运行MySQL。 与InnoDB的缓冲池不同,MyISAM依靠系统的文件系统caching来caching数据文件。 还有一些虚拟机已知可以在主机的同一文件系统上执行大量的I / O操作。 出于testing目的,我在一台机器上的某个大型数据库上运行了cat *.MYD > /dev/null ,我看到另一个文件系统caching正在降低,由htop监控。 这基本上刷新了客户端(FIFO)中所有有用的文件系统caching,因此它刷新了客户端中的MySQLcaching。 在我的分析中,我直到这里吗?

现在用户抱怨MySQL很慢。 它是。 一些简单的SELECT查询需要几秒钟的时间磁盘I / O被其他机器大量使用。

所以,简单地说:

有没有办法避免基于容器的虚拟化中的其他虚拟机擦除文件系统caching?

而不是迁移到KVM或InnoDB(见下文),可能会有一个configuration选项,我错过了。

一些想法:

  • select在内核中刷新文件系统caching的algorithm。 (可能?如何?)
  • 为单个VM保留一定数量的页面。 (看起来没有select文件系统cachingtypes的页面,阅读man vzctl
  • 在另一个文件系统上运行MySQL会让我在哪里?
  • 升级机器中的RAM(如@ michael-hampton所示)。 虽然是一个便宜的select,它不可能解决它。 升级+ 8GB与磁盘I / O操作的数量不成比例,比如说几十千兆字节。

如果没有,我想我的select是:

  • 使用KVM运行MySQL-MyISAM运行的虚拟机。 KVM实际上将内存分配给VM,并且不允许交换caching,除非使用balloon驱动程序。
  • 移动到InnoDB并调整缓冲池,脏页面等。现在认为这是长期的“高兴”,因为不是每个负责系统pipe理的人都理解InnoDB。
  • 更多的build议欢迎。

系统软件:Proxmox(现在1.9,可升级到2.x)。 一个大的LV分配给虚拟机。

除了你已经有的想法,你可以添加更多的内存,虽然这似乎是一个昂贵的短期创可贴。

长期你最好的select可能是从OpenVZ转移。