2008-6-22 22:04
orian
AIX Kernel 终结者
陆陆续续看4天书,头晕脑胀,庆幸的是终于有了结论。:lol 于是把标题名改成了一个恰当的名字,方便读者。休息休息,看看还有什么topic可以讨论,想在这个帖子里把aix kernel的4大嫡系都说一说,process, vmm, lvm, tcpip,也许以后又可以攒一本书《AIX/pSeries未公开的秘密》:lu4:
回想这几天看书的过程:
1. 争论发现困惑,这是一丝惊奇
2. 寻找资料支持自己的结论,这是一个信仰
3. 分析,分析,分析,同时找到更多的信息,这是一种方法
4. 走啊走啊,似乎无穷无尽,已经失去了主题,但还在走啊走啊,忽然间发现了需要的结论。这是一念坚持
自我表扬一下:victory: 不过很遗憾,结果是平局,哈哈,不过我很高兴,这个结果也正和我意。
这个著名的疑问是:aix如何处理dirty的非计算内存?(非计算内存、文件内存、file cache等等在文中可能有点混淆使用,他们之间区别不大,尽管还有些不同,看完本文,你大概能完全理解他们的相同和区别)
正方:Larry老大,偷页时dirty文件内存回写磁盘
反方:本猪,偷页时dirty文件内存写交换区
结果:。。。。。。 你看完就知道了。。。哈哈,我就是不告诉你,急死你!:lol :lol
-----------------------------------
前几天小河沟翻船,发现自以为很清楚的东西其实还是不清楚。:lu4: 人无完人猪无完猪嘛!
整理磁盘,若干年的东西已经凌乱不堪。清理一下,看好玩的顺手就扔到这,先圈地,最近房价似乎不涨,正好买入。
继续说内存
aix的内存采用了Segment结构,操作系统为每个进程分配地址空间,使这个进程以为自己是系统”唯一“的进程。32位cpu有16个segments: 0-F, 64位的可以提供2^36个(需要64 bit hardware)
AIX 5L支持多种页面4k/64k/16M/16G,所有硬件平台都支持4k,是否支持别的页面大小则依硬件而定,每个单独的segment为256MB。这种内存使用自然需要Virtual address space,我们以后再说如何进行virtual和real对应。先说virtual的Addresses
每个address包括3部分组成,segment, page, page offset
例如: F10006000 35A6C00
F...0是segment地址(9个16进制数),35...00是page和page offset (7个16进制数),共计16个,即2^16=64K地址
如果是4k页面,4个页面数,3个偏移量
64k页面,3 page, 4 offset
16M, 1 page, 6 offset
16G, 另外考虑,略。
一个segment中所有页面大小都相同,9位segment号叫做effective segment id (ESID)
32 bit applications 用1个16进制表示,64位则用全部的9个16进制表示。进程的地址用ESID定位,而系统范围的sgement则需要用VSID (virtual sgement id),这是由于一个进程只能访问分配给他的有限几个segment,而系统则需要访问所有的。硬件vmm机制进行这个转换,不需要程序操心,除非你想开发aix kernel接口
[[i] 本帖最后由 orian 于 2008-6-24 05:05 编辑 [/i]]
2008-6-22 22:09
闲云
抢沙发:victory:
2008-6-22 22:20
meteor06
占位先 :lol
2008-6-22 22:21
yddll
真不好意思加塞了。:lol
2008-6-22 22:32
orian
太快了吧?!
------------
其实ESID/VSID都是一回事,到底用那个看谁在使用,如果是process(进程)使用,则是ESID,如果是内核使用,则是VSID,名称不同,位数表现都是一样的。
进程或者内核需要内存的时候,就会弄出来segment,具体怎么弄的,不知道,估计是某个函数,例如xxxmalloc()之类的,这种东西对于我来说已经到头,不准备研究。跳过。
刚开始,sgement中没有任何一个物理页面对应,空地址。但随着使用,会真正有物理页面被分配或者释放。当程序reference某个地址的时候(什么?你连什么叫reference都不知道?就是两个人谈话,甲说:我刚去东城买了两棵大白菜。。。他就reference了东城这个地址), 硬件(cpu内部机制,以Larry老大的话形容, 太JB深了,本猪不够长,已经鞭长莫及,跳过)会先校验这个地址是否是合法的(狗仔队:东城?没听说啊,在哪旮旯呢?)。如果合法,下一步,如果不合法,直接杀掉程序,core!这就是”靠“这个名句的由来。要是狗仔队自己reference非法地址呢?(系统内核访问非法地址),这个core可大了,直接dump,狗仔队瘫痪。
咱们继续说守法的。狗仔队,哦错了,系统内核先检查掏出自己的小本本,看看该地址以往是否有所耳闻。如果没听说个,赶快记下来,本子上分配一页,也就是从物理内存free list中拿出一页,写上:东城。
小本本其实还很复杂:
eXternal Page Tables (XPT)用来跟踪paging space相关的页面
另一些系统的例程管理File system pages
-------------
谁来放个茶几?:lu4:
2008-6-22 22:35
workaholic
茶几来了 :victory:
昨晚聊吧,刚刚铺好笔墨纸砚,TNND电话来了,一直到今天上午11点才回家,累得吐血。
下午一直睡到晚上9点,起来洗澡、吃饭,开笔记本。。。。
正好赶上开场
上茶!
2008-6-22 22:37
giant#kenh
再来点茶,就是看不懂啊 底层的东西!
2008-6-22 22:38
orian
Segments按照使用目的被分类
注意: 不同使用者对该segment的不同使用目的可以更改分类!也就回答了Larry老大的一个问题:working memory, file memory是可能可以转换的!到底可不可以换,什么情况下能换,如何换?请看下集。。。:lu4:
相同VSID的segment一定被影射到相同的物理内存,不同分类将影响到内存管理机制、安全等等问题。
2008-6-22 22:48
orian
基本分类在此,这是权威的,别的说法都是通俗的,不可靠的,如有不同,以本猪本帖为准,以前的都不算,洗了重来!(被害死了不要找我!)
Working包括:
Kernel ,用于内核,所有进程都可访问(当然是有授权的情况下,例如拥有root权利的进程),进程包括用户进程和内核进程
Text/shared library text 用于执行代码,特点:不可修改(除了使用dbx之类的可以进行debug的程序), 被多个进程共享,也就是如果你执行了100遍同一个程序,物理上只保存一份
Data – 通常不共享,每个进程有自己私有的(你主动曝光给别人除外)
mbuf – 用于网络内存
另一大类:Mmap/shmat’ed, 不知道干什么用的,没有看到说明,进程使用,存放各种数据,但通常不属于任何进程(可以属于某个/些进程),看起来有点类似为提供内存通信机制而设计,
2008-6-22 22:49
meilixueshan
没有下文了,听得正起劲呢:lol
2008-6-22 22:53
orian
下一类:
Persistent – JFS file segment 老熟人了,不说了,属于kernel的
再下:
Client – Non-JFS file segment – JFS2/NFS/Veritas/etc, jfs、persistent的引申
多个进程可以利用这两类segment打开文件,如果两个进程map了相同的这两类segment,就相当于两个进程同时打开了同一个文件。
另外关于所有segment类型,进程对于segment的访问权是要有全有,要无全无,也就是只要能访问segment中的任何一页,则可以访问该segment的所有页。
2008-6-22 22:57
orian
关于paging, 也就是内存交换
主要用于working类型的页面,但是有些例外:lu4: 我得意地笑,狂笑
偷页算法用于paging,很大路,不说了
但可以强制只在内存中分page (pinned),或者只在paging space中(鬼知道这是干什么用的),或者两者都有
XPT表进行分配管理, 程序不能直接控制paging,当然可以间接。。。。
2008-6-22 23:12
orian
这张图很好。哦,另一张是埃舍尔的版画《博物馆》,我喜欢埃舍尔的作品,顺便推荐一下。
[[i] 本帖最后由 orian 于 2008-6-22 23:14 编辑 [/i]]
2008-6-22 23:25
orian
略去若干细节,详情请参考《aix/pSeries未公开的秘密》,顺便做一下广告,预计明年底。。。。写书很累的,写书很不赚钱的,写书很。。。。其实写书就是自学笔记,我很懒惰的。。。
关于file system cache
将会持续增长,直到用光所有可用页面,当然系统通过偷页来维持一定量的free list
file只被操作系统cache一次(程序自己cache除外),所有打开同一个文件的进程共享这个文件所有被cache的页面
除非文件系统umount, 此文件被unlinked(我理解是被删除,从inode中做掉),或者cache页面被偷,除此之外,被cache的页面将一直保存在内存中,永不释放。那系统reboot怎么算?这是谁问的?讨厌,不要捣乱!
执行程序经常被从file pages reclassified toworking pages。我猜想编译就是其中一种情况,别的情况呢?没想呢。
2008-6-22 23:32
orian
file cache到底需要多少内存?
还是依赖于使用者。
数据库自己cache数据,所以可以使用CIO禁止AIX caching
如果不想让数据库cache(有这么干的么?也许)则需要更多的内存
任何系统都多少需要一点file cache,所以不要让内存太紧张
无论内存有多少,只要应用访问的文件总量(大小)超过系统内存,内存总会被用到min free list
以上是AIX的正常行为,如果你修改参数,可能看到不同结果。
2008-6-22 23:58
orian
剩余疑问:
inode算什么?如何cache? 我猜测是inode也不过是个文件,特殊一点的文件,因此等同普通文件,不过此文件不能被普通进程拥有,kernel专有,除非CIO/DIO之类的情况下。
文中提到的某些例外,都是那些例外?在某些极端情况下(例如瞎设置参数)是否会有很多?
JFS/2 log?
LTG?
MWC?
以上这些特殊的东西呢?:funk:
2008-6-23 00:05
orian
最新消息是J2使用单独的inode cache做这件事情,所以,inode不用文件cache,至于是working还是别的内存,还在研究中。
2008-6-23 02:40
giant#kenh
orian的图不错啊 拿来到屏保!:lol :lol
2008-6-23 09:01
myciciy
不错 就是看不太懂
2008-6-23 10:51
benq011
很久没来听课了
2008-6-23 10:53
sinister
所谓的 segment 是一个抽象结构,在内核用 vmmdseg 结构表示,这是与体系无关的。
vmmdseg 其中的 scb (段控制块) 通过 sid 来标明索引页相关结构。系统使用 scb->pft->pte
之间的一系列映射关系最终定位物理地址。这副图还有很多细节与结构没有标明。而所谓的
“工作” 与 “计算” 内存也仅是一个抽象出来的概念。VMM 整体太过庞杂,要想讲清楚且经的起
推敲几本书都够了。要想提纲携领的概括出来那更是难事。要想概括全局必须深入细节,而要
想深入细节则又要把握全局。呵,这本就是矛盾的。
2008-6-23 10:58
banker
精深啊,学习。
2008-6-23 11:44
darkbug
继续路过打酱油
2008-6-23 12:04
老农
光顾一下:lol
页:
[1]
2
3
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.