免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3524 | 回复: 10
打印 上一主题 下一主题

虚拟内存中的交换功能是否已经过时? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-28 13:30 |只看该作者 |倒序浏览
Chuck Thacker在“五个软件思想将很快过时”的文章中提到,第一个过时的软件思想是虚拟内存(Virtual Memory)。提出虚拟内存的最初原因是真实内存价格比较高,只好采用在硬盘上开辟某一块空间作为虚拟的内存。但由于硬盘速度所限,虚拟内存的速度远远不如真实内存。但随着内存价格的大大降低,虚拟内存失去了主要作用,同时,因为硬盘速度成为整个系统的瓶颈,也导致虚拟内存成了“鸡肋”。

个人感觉linux内核中页面交换相关的部分是比较难理解的地方,若能去掉对页面交换的支持,那么将大大简化内存管理模块的设计,比如说:一个物理页有可能被多个进程共享,当该物理页被换出到磁盘时,操作系统需要找到共享该物理页的所有的页表项,把页表项的present位清空。

在linux 2.4之前的版本中,为了找到共享某个物理页的所有的页表项,linux内核需要遍历每个进程的页表,在linux 2.4之后的版本中引入了反向映射,内存管理模块为每一个物理页建立了一个链表,记录了共享该物理页的进程的页表项,这种方案提高了交换页面算法的效率,但是在很大程度上复杂了内存管理模块的设计,内存管理模块必须小心翼翼的维护物理页和页表项之间的正向、反向的映射关系,linux一直到2.5版本才引入反向映射的算法,可以看出维护反向映射是一件比较复杂的事情。

论坛徽章:
0
2 [报告]
发表于 2009-12-28 15:24 |只看该作者
交换功能应该不会过时,因为有mmap的需求

论坛徽章:
0
3 [报告]
发表于 2009-12-28 15:26 |只看该作者
不做交换的话,如果我分配N G内存怎么办?资源总是有限的阿,总要有个办法吧

论坛徽章:
0
4 [报告]
发表于 2009-12-28 15:41 |只看该作者
内存足够大的话,确实可以swapoff。 ssd的普及,将使得内存和硬盘的区别越来越小(特别期望直接挂在北桥的 ssd硬盘, 而不是挂在南桥的SATA controller上)

还有, ssd的普及, 对传统os技术的第一冲击是:page cache。

论坛徽章:
0
5 [报告]
发表于 2009-12-28 17:28 |只看该作者

回复 #4 albcamus 的帖子

swapoff? ACPI S4怎么办?

论坛徽章:
0
6 [报告]
发表于 2009-12-28 17:36 |只看该作者
>> 不做交换的话,如果我分配N G内存怎么办?资源总是有限的阿,总要有个办法吧
如果系统使用了过多的交换空间,性能就无法接受了。多年以前在一台只有64M内存的老机器上运行过Linux,仅仅运行些简单的控制台程序系统还是很顺畅的,但当我尝试启动X的时候,硬盘就开始狂闪,等了好几分钟还是黑屏。换了一台有128M内存的笔记本运行同样版本的Linux,启动X的速度基本可以接受了。

从这个例子可以看出,当用了一倍物理内存左右的交换分区的时候,系统性能下降的很厉害,因此在基本不降低效率的情况下,交换功能最多可以模拟出一倍左右的物理内存,再多就没有意义了。

>> 还有, ssd的普及, 对传统os技术的第一冲击是:page cache。
对。不过,当ssd性能和价格接近内存的时候,内存还有存在的必要吗?

论坛徽章:
0
7 [报告]
发表于 2009-12-28 17:38 |只看该作者
原帖由 b4fan 于 2009-12-28 13:30 发表
个人感觉linux内核中页面交换相关的部分是比较难理解的地方,若能去掉对页面交换的支持,那么将大大简化内存管理模块的设计,比如说:一个物理页有可能被多个进程共享,当该物理页被换出到磁盘时,操作系统需要找到共享该物理页的所有的页表项,把页表项的present位清空。 ...


我觉得如果linux内核把swap功能去掉并不能带来多大的简化。 页面交换和文件读写的实现是很类似,去掉swap仅仅只能减少一些分支,并不能“大大简化”。
比如你举的例子,就算没有swap,内核为了实现磁盘文件的读写,还是得保留这么一套机制。

论坛徽章:
0
8 [报告]
发表于 2009-12-28 22:53 |只看该作者
原帖由 qtdszws 于 2009-12-28 15:24 发表
交换功能应该不会过时,因为有mmap的需求



mmap与交换关系不大吧,只有通过mmap映射的匿名页才会与交换有关系吧

>>提出虚拟内存的最初原因是真实内存价格比较高,只好采用在硬盘上开辟某一块空间作为虚拟的内存。
虚拟内存除了这个原因外,对于当今系统,为所有进程提供统一的用户虚存空间,这点更重要吧,而交换的作用已经比较弱了吧

>>但由于硬盘速度所限,虚拟内存的速度远远不如真实内存。但随着内存价格的大大降低,虚拟内存失去了主要作用,同时,因为硬盘速度成为整个系统的瓶颈,也导致虚拟内存成了“鸡肋”。

用上ssd,这句话的条件还有效吗?

论坛徽章:
0
9 [报告]
发表于 2009-12-28 23:41 |只看该作者
看具体的应用环境吧~

当实际内存比所需要的内存少时虚拟内存还是有作用的~

不过虚拟内存随着内存的进步而变化~ 说不定以后L1 L2才叫内存~ 而现在的主存变成了外部存储设备充当虚拟内存~ 哈哈~

论坛徽章:
0
10 [报告]
发表于 2009-12-29 00:27 |只看该作者
支持3L, 7L
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP