鉴于大量的未命中处罚,为什么不进行分页会影响或降低程序性能?虚拟内存如何有效?
答案 0 :(得分:1)
简短的回答是确实会影响效果。
虚拟内存比主内存慢几个数量级。通常情况下,它没有被注意到,因为现在很多机器都有很多内存,人们很少会对机器施加压力。请记住,当机器耗尽物理内存时,VM系统 ONLY 会起作用。因此,暂停一段时间的进程可能会将整个地址空间换成磁盘,而当前正在运行需要更多内存的进程。这是由操作系统在后台完成的。因此,如果您在Unix上使用ps(使用-ale或-ax等选项,具体取决于您使用的Unix),top(也是Unix),或者查看Windows中的任务管理器,通常会有很多正在睡觉或等待某些事件发生的进程。这些是那些旨在将其内存换掉以便为实际运行的程序腾出空间的那些。有一大堆优化可以使它尽可能无缝地完成,而不会影响感知性能,如果有的话。
现在,当系统内存非常低时,应用程序需要大量内存和多个正在运行的进程,并且当系统开始在每个上下文切换(或大多数)上下交换页面时,那么你进入所谓的情况(如果我没记错的话)绝望的寻呼。您可以轻松识别这种情况,因为硬盘将开始磨削(或颠簸)并且机器将非常缓慢。
这是寻呼系统中大多数错误变得明显的地方,因为在这一点上,机器很可能会在一个或多个违规程序上丢弃核心,遭遇内核恐慌或蓝屏死机(在Windows系统上)。这就是为什么最简单,最便宜,最可靠的方法来显着提高任何机器的性能是为了增加内存。因为,你可以保留在内存中的东西越多,需要完成的分页就越少。
另一个优化是将交换空间或页面文件放入(或移动)到磁盘的物理外边缘,如果可能的话。硬盘驱动器以3600,5400,7200,10K RPM或更高的速度旋转(我已经看到一个以14K RPM的速度返回)。 RPM是角速度,数据密度是每平方英寸的比特(或公制的厘米)。这些天硬盘驱动器的工作方式,每个磁道有不同数量的扇区,因此介质上的数据密度是恒定的。其结果是外部轨道在一次旋转中在头部下方通过的数据多于在内部轨道上通过的数据。因此,在外部轨道上设置页面文件将有助于提高系统分页性能,因为每单位时间内可以获得更多数据通过头部。
对于它的价值,根据我的经验,我把机器的球放到墙上的唯一时间就是玩“魔兽世界”或“EvE Online”等游戏。在企业环境中,您拥有性能对分页非常敏感的服务器。如今,拥有64GB或更多RAM的庞大且繁忙的SQL服务器并非闻所未闻。即便是我的Sun Fire T2000服务器也有16GB的RAM,这比大多数机器都要多,那是在2007年。
这绝不是一个完整的解释,但我希望这能回答你的问题。