代码之家  ›  专栏  ›  技术社区  ›  VolkerK

虚拟机的软件优化

  •  12
  • VolkerK  · 技术社区  · 16 年前

    4 回复  |  直到 16 年前
        1
  •  4
  •   MarkR    16 年前

    我发现这一切都与I/O有关。

    虚拟机在IO方面的表现通常非常糟糕。这使得各种事情比在真正的锡上要糟糕得多。

    交换尤其是一个糟糕的杀手——它完全破坏了VM的性能,即使是一点点,因为IO太慢了。

    因此,如果可以的话,请使用ramdisc存储临时文件,但不要让它交换,因为那会更糟。

        2
  •  3
  •   Tim Post Samir J M Araujo    16 年前

    我能给你的唯一建议是小心使用mlock()/mlockall()。。同时注意马车司机。

    例如,如果Xen客户机以1GB启动,然后膨胀到512 MB,那么特权域通常不会查看半虚拟化内核实际承诺给进程的内存量(即Committed_AS)。实际上,对于Xen,除非将此值放置在Xenbus上,否则特权主机不知道这样的气球会做什么。我相信这也与KVM相吻合,具体取决于内核的配置方式。.但你的问题假定我们对这些事情一无所知:)

    因此,保护那些根本无法被调出的东西(要小心,但要谨慎),始终要考虑到“天要塌下来”的情况。

    同样,使用posix_fadvise()/posix_madvise()来告诉PV内核你需要或不需要缓冲多少总是一个好主意。

    除此之外,你几乎无能为力。因为您只谈论半虚拟化内核,它的设计初衷是让进程从一开始就忽略虚拟化。

    好问题,顺便问一下:)

    编辑:

    当我说“小心但谨慎”时,我的意思是比保守派高出一步。如果你的程序分配了大多数函数所需的作业结构,请锁定它。如果你分配缓冲区来读取大型文件,请不要锁定它们。.并且一定要调用posix_fadvise(),让内核知道你只打算访问它一次(如果是这样的话)。此外,一定要建议内核使用内存映射文件,特别是如果它们用于组织并发性。

    简而言之,帮助你的主机内核管理内存,不要让关键的分配块被扔进脏分页,不要通过锁定它分配的所有内容来假设你的程序比其他任何东西都重要:)

    很抱歉出现歧义。我能想到的最好的短语是“小心,但谨慎”。

        3
  •  1
  •   Adam Hawes    16 年前

    我唯一的建议是尽可能降低内存和IO的使用率。

    与物理硬件相比,VM中的IO非常慢。如果你能避免这样做,那么就避免它。

        4
  •  1
  •   user25148 user25148    16 年前

    在真实硬件上速度较慢的东西在系统虚拟化时甚至更慢。这取决于所使用的虚拟化技术,它们变得有多慢。

    特别是避免与虚拟环境之外的世界进行任何需要I/O的操作。根据设置方式,这包括在屏幕上绘图、交换以及磁盘和网络I/O。这大致按重要性降序排列。

    如果可能的话,假设你在为一台十年前的电脑写作。如果你的应用程序可以在1999年的台式电脑或笔记本电脑上运行,它应该可以正常工作。