2010年10月25日星期一

最大的PC瓶颈

当前所有的台式机或者笔记本的配置都已经相当快了,除了一个家伙。即使你花了大量的钞票配了4核,8核的处理器,超牛的显卡,你会发现系统的整体性能还是达不到想象中的样子。这就是"木桶效应",每片木头都要长短一样,否则花出去的钱都会严重打折。这片最短的木头就是硬盘。目前硬盘多采用SATA接口
SATA 1.0 1.5Gbit/s
SATA 2.0 3Gbit/s
SATA 3.0 6Gbit/s
而且最流行的就是SATA2.0,该接口的理论传输速度是3Gbit/s,也就是380MByte/s,这个速度是个什么概念,USB 2.0 high speed是480Mbit/s,即60MByte/s,也就是说SATA2.0的速度是USB 2.0的4倍,总的来说还是比较快的。可是你买个USB的移动硬盘用用,会发现它的速度和内装的硬盘也差不了多少。
哎!对了!我前面说的是接口速度,就是说硬盘的最快可以达到的传输速度。实际的硬盘的速度你如果测试一下会让你大跌眼镜。根据主流的硬盘的测试结构,台式机机械硬盘的读速度为110MByte/s,笔记本机械硬盘的读速度为60Mbyte/s,他们都远低于SATA可以提供的传输速度。这就是瓶颈,真正的瓶颈。
因此我想说,当你想配置一台PC时,不妨多花些钱在高速度的硬盘配置上,比花在CPU上有效果的多。这话在当前是有效的,可是若干年后就不一定了。
这个PC最大的瓶颈,其实已经被一些厂商意识到,只是他们不强调。目前解决硬盘的瓶颈问题有两种方法,一种是使用RAID的条带,一种是新流行的SSD,当然还有更高性能的SSD+RAID。苹果已经在他部分高性能产品中使用SSD硬盘,而intel直接在他的P55 platform controller hub中集成了RAID控制器。SSD没话说必然是未来的趋势,它的优点太多了,可是目前价格不菲,而且软件的技术上也还不成熟。至少我认为机械硬盘+RAID是当下性价比最高的解决办法。
P55和H55主板的差价在100元左右,他们的主要差别也就是有无RAID控制器,和你单独买个RAID PCI卡差不多。这样硬盘你就"掰成两半"来买,比如你想买240G硬盘那就买两个120G组成RAID0是个不错的选择。

2010年10月22日星期五

UBI到nand驱动判断坏块的call path

MTD如何判断NAND flash坏块

nand_block_bad()在nand_base.c中定义,它是NAND MTD的通用函数,用于坏块的判断。市面上现有的NAND flash都是在page的spare area开始部分标记是否是坏块。
Spare area在MTD中就对应的是OOB,所以猜测一下,nand_block_bad()会读取OOB,然后对标记进行检测。

代码一看果然如此。
先通过cmdfunc来个NAND_CMD_READOOB,再来个read_byte把标记读出来,判断是不是0xFF就知道是不是坏块儿了。

struct nand_chip结构体的函数指针表中的block_bad默认就是指向这个函数。

UBI内核模块需要参数

加载UBI kernel module需要参数来制定底层要使用哪个mtd设备,参数如mtd=/dev/mtd0

MTD夹心UBI

"This is a small driver which implements fake MTD devices on top of UBI volumes. This sounds strange, but it is in fact quite useful to make MTD-oriented software (including all the legacy software) work on top of UBI."

作者留下了关于gluebi.c的设计目的,可以看出UBI的下层是MTD,结果上层还是MTD。这种肉夹馍的结构,只是上层的MTD是一个虚拟层,用于兼容以前的驱动

2010年10月21日星期四

Linux MTD nand read page抽象方法

Nand_read_page_hwecc()是抽象了硬件以后的接口,也是NAND flash一个最为基本平常的操作page read。和我见过的所有的其他的平台完全不一样,Linux MTD将硬件的NAND controller抽象成了,hwctl() 紧接着read_buf()这样的操作序列。可以看出hwctl负责下命令,包括read ,program ,erase等等。

2010年10月20日星期三

phone modem RT OS can disable time slice to improve performance

ThreadX具有时间片功能,但是这样的实时操作系统往往用在一下小型的系统上,比如phone modem里。在这样的应用中,由于内部的中断非常频繁,所以往往会disable time slice,来减小上下文切换开销,而达到高效的效果。