免费注册 查看新帖 |

Chinaunix

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

请教关于smp系统中tlb刷新的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-23 09:32 |只看该作者 |倒序浏览
看情景分析第9章smp系统,其中说到内核线程一般是不需要冲刷tlb的,因为内核代码不会被换出,而且内核线程一般不会访问用户空间,因此如果一个内核线程接收到tlb冲刷的中断只会进入lazy tlb模式,从而忽略以后所有的tlb冲刷指令。
但是书中也提到,如果有以下几种情况,内核线程的页面映射也是会改变的:1.vmalloc, 2.kmap, 3.外设总线有关的映射。那么这三种情况发生的话是如何通知内核线程冲刷tlb的呢?我好像没有找到相关代码。
望知情者告知!

论坛徽章:
0
2 [报告]
发表于 2010-08-23 16:36 |只看该作者
自己想到了,似乎是这样的。因为内核空间使用的页表是一样的,因此在vmalloc等操作的时候只操作init_mm的页表,当内核线程访问虚拟地址发生缺页才会把init_mm的页表复制给当前内核线程,而冲刷tlb也是这个时候完成的。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
3 [报告]
发表于 2010-08-23 18:33 |只看该作者
回复 2# peimichael


    这个有点解释不通,如果内核线程访问虚拟地址没有发生缺页呢?

论坛徽章:
0
4 [报告]
发表于 2010-08-23 22:23 |只看该作者
回复 3# smalloc


    如果没发生缺页就说明映射没有改变,也就不需要刷新tlb。内核线程映射改变就是只操作init_mm的页表,而不改变当前进程的页表,而当前进程要访问那一块地址的时候就会发生缺页,这时候再把init_mm的那一部分页表拷贝到当前进程。也就有些copy on write的意思。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
5 [报告]
发表于 2010-08-23 22:36 |只看该作者
回复 4# peimichael


    没有缺页好象也不能表示映射没改变吧.
A,原先就有映射,被B改变了,比如free了,那就不一致.
只能解释说事先认定一个内核线程不受这些影响,才可以lazy

PS:是不是精读了情景分析的都不来这里了?记得以前有个家伙说他一同事情景分析读了7-8遍.

论坛徽章:
0
6 [报告]
发表于 2010-08-23 22:59 |只看该作者
回复 5# smalloc


恩,free是个问题,顺便问下一直也有个疑惑,你一说想起来了。新建立的映射可以通过缺页来把init_mm的页表拷贝过去,vfree是怎么做的?如何做到保持init_mm和其他进程的页表一致的?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
7 [报告]
发表于 2010-08-23 23:10 |只看该作者
回复 6# peimichael


  这方面我都没看过.等看了再发表看法.
但是我看情景分析上确实是这个意思,本内核线程不受其他线程的那些影响时,他才会做lazy
也就是说TLB并不用总是保证完全正确.

论坛徽章:
0
8 [报告]
发表于 2010-08-23 23:20 |只看该作者
回复  peimichael


  这方面我都没看过.等看了再发表看法.
但是我看情景分析上确实是这个意思,本内核 ...
smalloc 发表于 2010-08-23 23:10



    是的,情景分析说的不受影响是指用户空间的页表发生改变,而内核线程并不需要使用用户空间的页表,因此这种情况下就进入lazy_tlb模式,不理会后续的tlb刷新请求,只有当下次使用这个mm_struct的用户进程再被调度上cpu的时候才会刷新tlb。而我说的那三种情况就是书上列出的内核线程“会”受到影响的情况了,我就不明白的就是当进入lazy_tlb模式之后如果发生了那三种情况如何通知内核刷新tlb

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
9 [报告]
发表于 2010-08-23 23:25 |只看该作者
回复 8# peimichael


    不,情景分析上确实说的是我上面说的那个意思.
"因此只要一个内核线程与这些操作无关,那么这个内核线程就可以"任凭风浪起,稳坐钓鱼台"...."P 620

论坛徽章:
0
10 [报告]
发表于 2010-08-23 23:32 |只看该作者
回复  peimichael


    不,情景分析上确实说的是我上面说的那个意思.
"因此只要一个内核线程与这些操 ...
smalloc 发表于 2010-08-23 23:25



   不好意思,我大意了。。。但是还是有问题,就是怎么确定一个内核线程与这些操作无关呢?看代码似乎只要是内核线程就会进入lazy_tlb模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP