高速运行的秘密
摩尔定律说集成电路每18月内单位面积内集成的晶体管数量都会翻一翻。从而CPU的主频得到快速提升。最近媒体上都在报道摩尔定律到达了一个极限,摩尔自己说摩尔定律也将在短期内失效,度过目前的技术瓶颈以后仍将适用。
然而大部分计算机系统的运行瓶颈不在CPU,而在于IO。为什么这么说呢,因为IO技术的发展远远没有CPU技术发展那样迅速,CPU访问CPU cache比访问Memory快很多倍,Memory又比磁盘快很多倍,如果再进行网络访问,速度会更慢。
下面是从scaling oracle8i一书中摘取的数据
Typical Typical
From TO Access Time Price per MB Size Ranges
CPU register CPU register 2 ns N/A 8–4096 bytes
CPU Primary cache(on chip) 8 ns N/A 8KB
CPU Secondary cache(off chip) 30 ns $150 1–4MB
CPU System memory(off CPU
board, over system bus) 100 ns $15 1–16GB
Memory Local disk (DMA over
system bus) 3 *10^7 ns $0.15 200–n0,000GB
Local disk
(via memory) Networked host 1*10^8 ns N/A 15,000,000GBb
upward
a. All figures derived from manufacturer specifications for typical parts in 1997.
b. Based on 30,000,000 Internet hosts with an average of 500MB of storage on each.
当发生IO尚未返回结果的时候,CPU所做的工作就是等待,远远没有得到充分利用。为了提升速度,就需要Cache数据,所以Cache is the king。于是Oracle中有了DB BUFFER来Cache数据,LOG BUFFER来Cache日志,SHARE BUFFER来Cache数据字典和程序, SORT_AREA_SIZE来加快排序。
Cache大了,数据的管理就是成为一个大问题。为了能够快速的访问数据,我们不可能来遍历数据,我们需要将数据按照一定的特征来组织,从而根据特征来访问数据,缩小查询范围。最常见的就是Hash算法,Hash算法所做的一个比喻就是上面的武当派与日月神教。
一件事情可以分为多个部分来同时处理,人多好办事,加快处理速度。例如多CPU同时进行计算和处理的SMP系统,多个节点进行处理的cluster SMP系统或者进一步说MPPs,RAID中多个磁盘同时响应操作。
扩展开来,高速运行的秘密就是Cache、分而治之和并行处理。
不过任何事情都是有代价和局限的, Cache需要管理,如果存在多个Cache(如多CPU系统中的CPU Cche)则需要同步,并行处理不同节点间需要沟通,甚至说系统中某一位置存在瓶颈,我们所需要做的工作,就是在个体与群体,时间与空间中如何平衡和选择,跟这个社会一样。