📄 00000003.htm
字号:
空间的最前面, 其他的地方放data block.导致浪费掉许多seek time. <BR> <BR>s5fs fragmentation的问题也没有处理得很好.用free block list的方法只能 <BR>在档案系统刚建立的时候拥有良好的连续配置,用久了fragmentation就严重了. <BR> <BR>block size也有问题. block size大会增加效率,但是浪费空间,反之减少效率, <BR>但是空间利用率较高. <BR> <BR>s5fs单一的super block也很危险, super block 毁了整个filesystem就完了. <BR> <BR>s5fs还有一个缺点是14个字的档名限制. <BR> <BR>FFS的出现就是解决这些问题的. How? s5fs把disk看成是一个磁带般处理, <BR>没有考虑实体结构, FFS设计的时候就面对现实,把实体结构考虑进去,也就是 <BR>考虑了disk的head, track, cylinder等性质. hard disk由好几片platter <BR>(硬碟片)组成.cylinder就是不同platter下相同track所组成的圆柱体. <BR> <BR>FFS把一个disk划成好几个cylinder group. 一个cylinder group <BR>由相邻的cylinder组成.简单的说,FFS就是把一个disk划成几个小 <BR>disk (cylinder group),每个cylinder group (disk)上面放个s5fs <BR>就是了. 这样子作可以让某个cylinder group内的资料限制在几个 <BR>cylinder的□围内,减少seek time. <BR> <BR>针对fragmentation的问题则是使用bitmap来解决. FFS使用超大 <BR>的data block以降低fragmentation带来的影响. <BR> <BR>但是对於小的档案(和大档案的尾巴,不满一个block的部份),则是把data block <BR>切成几个小块,存放好几个小档来节省浪费掉的空间.存放在fragmented <BR>block的资料一定要是一个档案的最尾端,而且在此block内的资料必须 <BR>连续存放,不可以说A档的tail住在一block的第1/4, 3/4块, B档比较小, <BR>住在同一 block的第2/4块.这种情形要把A档的block移到另一个新的block <BR>上,让A的最後一个block连续存放. <BR> <BR>为了避免因为一个档案慢慢的成长导致不必要的搬移, FFS限制只有direct <BR>block可以用fragmentation.也就是档案超过一定大小就不用fragmentation block <BR>了. <BR> <BR>除了架构上的改变, allocation policy也很重要. FFS这样配置硬碟空间: <BR> <BR> * 同一个目录的档案(inode)都放在同一个cylinder group上. (localizing <BR> policy) <BR> * 每个新的目录都和其parent位於不同的cylinder group上. (distributing <BR> policy) <BR> * 档案的data block放在和其inode相同的cylinder group上(localizing policy) <BR> * 档案超过48kb,以及以後每增加1MB,就要换跑道,喔是cylinder <BR> group.免得某个档案灌爆一个cylinder. <BR> * 配置data block时考虑disk的interleave factor.(不懂?那你一定没有 <BR> 用过MS-DOS的floppy加速程式:) 没关系, 本书有图解) <BR> <BR>s5fs的super block被分成两部份. FFS4每个cylinder group都有记录 <BR>自己的空间使用状况. 而整个disk的super block只记录整体性的资料, <BR>如cylinder的大小位置, block的大小位置等等资料.每个cylinder group <BR>都有一个super block的备份. FFS把这些备份分散开来, 使得没有单一的 <BR>磁头,磁轨,磁柱或碟片存放这些备份. (没有把所有的鸡蛋放在同一篮子 <BR>上的意思.) <BR> <BR>即使目前的SCSI硬碟并不区分head, cylinder, sector,制造商提供的资料只是 <BR>让他乘起来和硬碟的大小相同而已, 但是实验显示FFS的方式还是可以得到 <BR>良好的效能. <BR> <BR>FFS还有很多chache的改进可以提高他的效能,不过要自己看书:) <BR> <BR>Temporary File System <BR> <BR>temporary file system对於需要暂时使用档案的场合可以增进效率. <BR>以前的方式是把一块ram划下来作ram disk.这样子浪费记忆体. BSD用memory file <BR>system (mfs)的方式, 让一个io server用他的address space当作空间来提供 <BR>temporary file system的暂存空间,不过最大的缺点是context switch使 <BR>performance不好. Sun的方式最好, tmpfs整合了vnode/vfs介面和VM介面, <BR>让整个virtual memory来提供tmpfs的空间. 整个存取的方法和一般的filesystem <BR>没有两样,是最理想的方法. 另外一个方法是设定file system write back的时间, <BR>以企图延後所有档案系统的资料写入disk来达到temp file system的目的. (期望 <BR>他没被写入前就杀掉了). <BR> <BR>Unix用到暂时档的地方很多(如cc).所以temporary file system的发展 <BR>是很有价值的. <BR> <BR>Chapter 9结束的时候提到了Buffer Cache.这个东西在Bach的书里是重点,但是 <BR>目前的Unix已经不用Buffer Cache,改采整合file system和virtual memory的方式, <BR>更为有效的运用记忆体. <BR> <BR> <BR>Chapter 10 Distributed File Systems <BR> <BR>本章介绍..NFS/RFS/AFS/DFS. <BR>NFS其实算蛮简单的,他只是把kernel往disk写回的动作(& reading),换成 <BR>network packet送出去而已.对kernel的介面则是藏在vnode/vfs下. <BR> <BR>NFS performance bottleneck在於NFS要求每次的write()不能够cache,一定要 <BR>马上写回,而档案属性必须一个一个档询问,使得ls -l产生大量的traffic. <BR>当然现在已有方法改进. <BR> <BR>NFS version 3於1995年公布,更正了NFS v2的大部份的问题. (security <BR>的问题是在RPC上面. RPC本来就有提供security的机制,只是少有实作而 <BR>已...) 由於NFS v3出现蛮晚的,有支援的Unix可能算很赶的上流行了:) <BR> <BR>本章提到两个dedicated NFS server. 我比较有兴趣的是Auspex NS5000. <BR>另外一个是IBM的, focus在容错. Auspex NS5000有好几个CPU, 每个CPU <BR>都作单一个事,分成两组,一组处理网路上的需求,另一组处理硬碟档案系 <BR>统的IO.另外有一个CPU跑修改过的SunOS,admin用,其他的CPU都跑一个叫 <BR>做functional multiprocessing kenel (FMK)的系统,彼此间用message <BR>passing交谈. FMK的好处是他只提供作NFS server所必要的function, <BR>而不提供Unix的语意/环境,使得系统省下不少负担. <BR> <BR>RFS没什麽好提的... <BR> <BR>AFS, Andrew File System是CMU发展的系统, 後来成立Transarc <BR>Corporation.继续发展. 後来AFS演变成OSF DCE的Distributed File <BR>System.本书AFS/DFS都有详细的介绍.他们太复杂了,看书比较清楚. <BR>结论是AFS比较不好, DFS作了很多改善, 功能也比较多. DFS比较特 <BR>别的是对分散式档案系统cache的改进. DFS server会给他的client <BR>一个(read/write/status/lock..)token, 允许他(read/write/status <BR>/lock..)等等的动作而不需要与server synchronize,也不用 <BR>update cache.也就是说该client拥有该资料的使用权(token,权杖之意). <BR>client拥有token直到kernel撤回这样权力为止.kernel随时可撤回 <BR>这些token,表示有人要更改data,需要synchronize了. <BR> <BR>token的想法非常的高明,因为传统的方法所有的时间都要synchronize.但是 <BR>token的想法则是考虑到大部份的时间内皆不会产生race condition,所以 <BR>不需要每个动作都synchronize. <BR> <BR>不过文中也指出, DFS非常的复杂, 不好实作就是了. <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -