一个在windows下进行MD5校验的工具

MD5summer就是一个这样的工具,我也不必多说了,需要的下了。

推荐阅读:
一直用ubuntu作为自己的开
Xdebug是一个很方便的PH
正如之前说的,很多情况下我们需

FireFox的优化工具——firetune

Friefox最近的势头非常猛,不但几乎所有的linux的发行版都将其作为默认的浏览器,连windows平台下的Firefox的占有率也几乎一夜之间成为仅次于IE的第二大浏览器。

曾经看到过有篇介绍怎样优化friefox的帖子,其主要内容是在地址栏中输入“about:config",就会出现Firefox的隐含控制面板,对其作一系列的调整,比较麻烦也便于初学者掌握,于是就有这么一个工具面市,试用了一下,非常方便,不敢独享,提供给各位。

这里下载

解包后运行FireTune.exe-〉选择"language"-〉chinese-gb.lng可选用简体中文界面。

推荐阅读:
一直用ubuntu作为自己的开
Xdebug是一个很方便的PH
正如之前说的,很多情况下我们需

Regulatory Risk ——且谈规范化的风险

今天,得知我原先公司的某位高层领导,我曾经的顶头上司辞职,特发感慨,感慨于如今各公司各行业都在进行的“规范化”所带来的风险。

那是一家经营药品制造的企业。大约就是在1年前,我从那家公司辞职——其实也不能称之为辞职,公司出台文件指出“非关键性岗位”在年底之前自动提请辞职可享受作为补偿的2个月工资。作为IT部门,一个被老板认为是烧钱的岗位,我自然属于“非关键性岗位”之列。算了,项目搁置,ERP停机,网站关闭,找到了一份收入类似的工作我便辞职走人了。

真正说起来,这家公司也并非是一家新企业,也并非从来就没有赚到过——其实这家公司有这近30年的历史,原先公司的业绩是非常不错的,公司控股方也包含了上海公交行业的巨鳄(他们的投资方针似乎有些滑稽)、上海某知名的医科类大学,事实上正是“大鳄”吞并了“大学”的原校办企业。公司在短短2年间从一个30人左右的校办厂,一下子成长成了又有近40亩面积的厂房,职工超过150人的企业,当然这只是在最辉煌的时期。

公司败落也就是从那时开始……

2001年,国家出台法律,要在药品制造行业强制推行GMP生产规范,同时,“大学”由于市政搬迁,出让原有校舍。于是公司高层在上海近南郊买下了一片土地,开工新的厂房。也许是我少见多怪,“大学”时代依赖于“大学”这棵大树,很多开销小到可以忽略不计。正如水电之类的,有很多操作也管理不严,节省了很多人力成本。可到了新厂区,一切全都变了——宽敞的车间的确漂亮,但是带来的后果是更多的电力消耗,更多的清洁成本,工人的积极性更加低下等等一系列的毛病随之而来;GMP规范确实是造福了病患,然而对于一家药品制造企业而言也就意味着更高成本带来的更低利润空间;新的设备确实漂亮,然而带来的后果确实工艺因为改进不及时而带来的废品率增加、正常损耗提高;严格的筛选的结果确实使产品更加安全和可靠,然而废品如何处理?GMP的要求——“只能销毁,不得他用”。

最终的结果是:人员翻了2番仍然人手不够,能源和原料多耗3成产量只减不增,产能只能勉强与“大学”时代持平(其实个人怀疑产能是可以开发的,只是担心销售跟不上而造成货品积压)。

这还不是最要命的,原先“大学”时代的水电是仰仗于国家对于事业单位的优惠政策而已极低的价格购买的;加热是借用“大学”的蒸汽,每月只是象征性的支付少的可怜的几千块罢了。后来呢?光自己的一个锅炉每天(8小时)就要烧掉进1.5吨多的柴油,近2万元!

就这样,一家公司就慢慢的耗用完了。

难道“新厂”时代没有盈利吗?诚然,有!但那时正值“非典”时期,赶工“防非”药物,供给“大鳄”的各个驾驶员等高危人群,但一个企业总不至于依靠这种突发事件就能生存吧,“非典”就迎来了公司的寒冬……

标准化也好,规范化也罢对于一个国家而言固然重要,但对于公司而言也许真的没有想象中的那么美好,但似乎前些年所有的企业都一古脑的申办ISO认证,“有条件要上,没有条件创造条件也要上”的一窝蜂似乎有点讽刺了。

罢了罢了,也就不谈什么了,这篇东西自然与我所专长的IT没有任何关系,一个行外人的话语自然不要放在心上,只当是我为了纪念我曾经上司的辞职,以及我在那家公司工作的那些年的一篇回忆录而已吧。


PS:

该公司现已表示将不再与任何员工续签2006年的劳动合同。

推荐阅读:
这些年,作为某芯片企业的软件工
事出上个月偶然收到一封私人邮件
“产业升级”这个词汇最近几年经

一个IP建多个Web站点–主机头名法(apache篇)

首先,编辑httpd.conf文件,在尾部加上

NameVirtualHost *

编辑虚拟主机配置文件:

<VirtualHost *>
DocumentRoot "/htdoc" 
#html文件目录
ServerName  test.com 
#虚拟主机名
ServerAlias *.test.com
#做出响应的域名

##具体的目录配置

<Directory "/htdoc">
allow from all
</Directory>
DirectoryIndex index.php
</VirtualHost>

注意: ServerAlias 一栏,如果想让你的虚拟主机对应多个域名,可以将他们列出,并一一用空格隔开。

小窍门:
    如果你同时管理多个虚拟主机,而且经常变动,那就可以在httpd.conf文件的末尾加上一句
      
       include DIR/*.conf #DIR为你虚拟主机配置文件的目录

    然后,将每一个虚拟主机的配置做一个单独的.conf文件,放在DIR目录下,到时候只要添加删除文件就可以了。

推荐阅读:
评价一个网站的“大小”,处于视
碰到这样一种情况:在使用新浪微
种种原因,站长已经很久没有关注

精打细算用Linux

按:不知是从什么地方翻出的老文档(至少在RH7.3之前)老的有点落后,仅供参考。有部分命令是8.0后没有了的,而且核心还是2.4.*的。


所有的操作系统都要求"给我更多!"– 它们要求更多的磁盘空间,更多的内存,很高的cpu工作频率–令人欣慰的是拯救我们这些没有最新硬件的人的救世主出现了,是的,我说的是Linux。
 
虽然Linux作为网络操作系统很出色,但实际上,作为单用户的操作系统,工作在未连网的家庭PC上,它也是非常不错的。考虑到这种情况,你有很多方法可以从你的系统中挤出更多的资源,甚至在一台象仅有8M内存的486这样的老机器上也可以。
 
现在请记住你需要以 root 身份登录到系统来做下面的所有事情,我们的目的将有两个分支:使内存的使用量最小,和节省磁盘空间。
 
节省内存!
重新编译内核
内 核在没有安装到你的机器里以前就已经被编译好了,但是它是一个带有所有功能的内核,把每样东西都编译了进去。这就意味着它比你要专用的大。如果你从内核源 代码编译一个你自己的内核的话,它会比缺省的vmlinuz的内核小100kB以上。此外,这还有助于你了解如何编译内核。实际上,这十分简单。你要首先 设置,就是说你的内核里都需要什么功能。然后编译它就行了。Linux已经发展到了一个很高的阶段,以至于它内核的设置可以是图形化的。内核的源代码通常 在这里:/usr/src/linux。要运行图形界面的设置程序,执行这个命令 make menuconfig (这个是基于文本菜单的),或者执行 make xconfig (这个是在X中的图形界面),你将会看到一个很长的设置选项列表,在做选择以前,建议你仔细看看每一项所带的帮助提示。这些提示总是会给出合理的建议,你 应该遵循它。如此,你将会确切的得到那些你需要编译进你的内核的东西,而不包含其他。我也建议你读一读源码路径下的README文件。一旦你设置好了,退 出X(如果你运行了它),在文本模式下编译它,这样做没有笨重的X运行可以有更多的内存可用,编译起来快一些。执行 make dep ; make zImage ,然后去喝杯咖啡,做完这些,README文件会很通俗的解释你应如何使用这个新内核,我不再赘述。

停止某些服务!
当Linux 系统运行的时候,通常会有很多后台作业在运行,这些作业都是有特殊功能的,它们叫做deamon。例如 sendmail,是邮件的daemon,它处理所有邮件的发送和邮件递送安排。有许多这样的daemon在系统启动的时候开始运行,系统中有几个 runlevel,它们是一些启动和停止的服务的组合。例如,在通常的Linux系统的runlevel 1上,(这是单用户模式),就会明显地比多用户模式的runlevel 3需要较少的服务。缺省情况下,Linux 启动进入 runlevel 3。现在它会启动很多服务在这个runlevel上,它们中的一些对未连网的家庭PC来说没用。例如,你显然不想运行sendmail来浪费
宝 贵的内存。是的,它可以把邮件在root@localhost和someuser@localhost两个本地用户间发来发去,但是这会消耗系统资源,而 且没有丝毫用处。如何从一个runlevel里删去一项服务在RedHat里,这非常简单。系统管理是RedHat比其他发布强的地方。在以root登录 以后,启动X,然后在一个 xterm 里启动 tksysv ,这是一个图形界面的runlevel编辑器。你可以看到六个列,每个runlevel占一个。现在我们仅注意runlevel3就可以了,就是系统通常 启动进入的那个runlevel。每个列都有两部分,上面的是系统启动时开始执行的服务,下面的是在系统shutdown时停止的服务。你要做的就是选择 你想删去的项,然后按del,就是这样,另外记得在你退出以前保存你的修改。
哪些服务要留下,哪些要删去事实上,告诉你留哪些很简单。记住,所有的这些办法都是在runlevel 3上有效。这是几条要点:
kerneld – 如果没有它的话,那什么都工作不起来了!
syslog – 必须保留,来记录log信息。这些log在万一系统出现错误的时候,可以帮助你看看系统哪里出错了(实际上,在Linux系统里什么错误都不会出现)
keytable – 如果你还想使用键盘的话就得留下这个!
rc.local – 这是那些日常的工作启动的地方,在所有其他的服务都启动以后执行你仅仅需要上面的4项服务,没有它们,就象有人说的," 一切都歇菜了"
你可能想保留的服务
下面是一些要不要两可的服务,一些你可能想要保留的无关紧要的服务。你可能需要它们,或者喜欢它们。
crond – 它周期性的运行一些日常的作业,最重要的事情就是确保你的log文件不会太大。你可以在你需要的时候来运行它。
atd – 如果你想要使用 at ,你就需要这个deamon,也就是说,作业按你指定的时间来执行,在一个多用户的24小时都不停机的大系统中,人们通常使用它来指定在晚上运行一些非常 繁重的计算任务。但是在简单的家用机器上,一般不怎么使用,毕竟你是使用它的唯一的人。
gpm – 它可以让你在文本模式下使用鼠标,它仅在你工作在文本模式下的时候才有用, 而当你工作在X下的时候就是一种浪费。

节省磁盘空间
事实上,这里你没有什么可做的,除了删掉一些你不想要的包。RedHat有一个极好的,很容易使用的包管理系统,它会记录你硬盘上的几乎所有的非用户文件。每个安装到你的系统里的文件都是这些包的一部分,这些包能够被反安装。
如何删除一个包
在x中以命令行来运行 " glint ",这是一个图形界面的RedHat包管理系统,你会得到一个图形界面显示你的系统中安装的所有的包。这些包被分类,并以目录列表的形式显示出来。要删掉一个包,选择它,然后按一下右面的"uninstall"按钮就可以了。
我应该删掉哪些包?
请 注意,有一些要紧的包是不应该被删除的。在glint里,通常比较可取的做法是不要动 base 和 library 的包,除非你确切的知道你到底在做什么。其他的,看看它们的描述(点 query 按钮)。如果你很久都没有使用一个包的话, 或者预计以后也不会用它,那么删掉它通常是安全的。万一删掉一个包会影响其他的包 的话,glint会告诉你。它很安全。如果你误删了一个一个包,你总能从光盘上重新安装 它的。

结尾
这些仅是你可以试试的建议。Linux你用的越多,尝试的越多,你就会从你的系统中
挤出更多的资源。

推荐阅读:
一直没有写过关于Linux内核
尽管当前已经是多核心SMP时代
近一段时间一直在做些任务负载特

FreeBSD 5.3 下Raid的制作(GEOM)

从FreeBSD5.3开始引进了对geom的支持

FreeBSD 5.3下面用geom来创建raid是很方便的
除开可以用geom这个程序来创建,还提供了个单独的程序,例如
gconcat, gmirror, graid3, gstripe. 另外还有个尚未完成的gvinum(即将代替vinum)

CONCAT版RAID

concat其实并不算是raid,因为没有性能上的提升,也没有数据保护作用。只是简单的将各磁盘串起来利用磁盘空间。

下面例子将对ipsd1,ipsd2这两个磁盘系统进行concat

首先重置这两个磁盘
bsdlabel -r -w ipsd1 auto
bsdlabel -r -w ipsd2 auto

使用gconcat连接两个磁盘,并且命名为data
gconcat label -v data /dev/ipsd1 /dev/ipsd2

使用gconcat以后,将会在/dev/concat下面多出一个设备名叫data,对应早先命令的data名字
ls /dev/concat

格式化,如果你需要关闭Soft-Update,只需要去掉-U
newfs -U /dev/concat/data

创建mount point
mkdir /data

挂上新建的concat
mount /dev/concat/data /data

修改fstab让系统重启后自动mount
vi /etc/fstab
内容
/dev/concat/data /data ufs rw 2 2

增加开机自动装载geom_concat.ko这个模块
vi /boot/loader.conf
内容
geom_concat_load="YES"

很简单的concat已经做好了

stripe raid (RAID0)
创建一个stripe raid (RAID0)
RAID0具有最高性能,也是最差安全性的

使用gmirror连接两个磁盘,并且命名为data
gstripe label -v -s 4096 data /dev/da1 /dev/da2
-s 4096: 是分开在每个磁盘的块大小为4k

创建mount point
mkdir /data

挂上新建的Raid

mount /dev/concat/data /data

增加开机自动装载geom_mirror.ko这个模块
vi /boot/loader.conf
内容
geom_stripe_load="YES"

kern.geom.stripe.fast
设置是否使用fast模式.gstripe有两个模式,一个是fast,一个是economic.
fast模式消耗更多的内存,但是速度更快.当内存不足的时候会自动切换到economic模式.

kern.geom.stripe.maxmem
设置fast模式下面最大使用内存数,该选项是只读.只能在启动时候才能设置.因此如果需要更改该选项,需放在 /boot/loeader.conf

kern.geom.stripe.fast_failed
记录了fast模式失败次数,如果次数很大,你就要调大kern.geom.stripe.maxmem的数值

MIRROR raid (raid1)

创建一个mirror raid (也就是俗称的RAID1)
RAID1具有最高的安全性,具有快速的读操作,不提高磁盘的写性能

下面例子将对da0 da1这两个磁盘系统进行mirror

首先重置这两个磁盘
bsdlabel -r -w da0 auto
bsdlabel -r -w da1 auto

使用gmirror连接两个磁盘,并且命名为data
gmirror label -v -b split -s 2048 data da0 da1
稍微解释一下上面的命令,详细的查询man gmirror
-b split: 告诉gmiiror创建的mirror,在读取的时候将读操作分开到各磁盘上面,这样能够提高读取性能
-s 2048: 告诉mirror只分开读取大于2k 的文件
除开spilit,还有其他平衡形式.split比较适合大众
round-robin : 在各磁盘轮流读取数据
prefer: 更高优先权的读取数据
load: 更低负荷的读取数据

使用gmirror以后,将会在/dev/concat下面多出一个设备名叫data,对应早先命令的data名字
ls /dev/concat

格式化,如果你需要关闭Soft-Update,只需要去掉-U
newfs -U /dev/concat/data

创建mount point
mkdir /data

挂上新建的Raid

mount /dev/concat/data /data

修改fstab让系统重启后自动mount

vi /etc/fstab
内容
/dev/concat/data /data ufs rw 2 2

增加开机自动装载geom_mirror.ko这个模块
vi /boot/loader.conf
内容
geom_mirror_load="YES"

mirror raid已经做好了

创建一个当前磁盘的mirror:

gmirror label -v -b round-robin data da0
gmirror insert data da1


除开上面,geom还提供了raid3的制作
graid3 label -v -r data da0 da1 da2

上面贴子说的gconcat,gmirror,gstripe都可以用geom一个来搞定
例如
geom stripe label -v -s 4096 data /dev/da0 /dev/da1 /dev/da2
等于
gstripe label -v -s 4096 data /dev/da0 /dev/da1 /dev/da2

推荐阅读:
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基
之前收到公司一个大牛的PPT,

且谈google左侧排名

在网站推广方法中,搜索引擎推广是最重要的方法之一,而Google目前是世界最NB的搜索引擎了,占全球56%的搜索引擎市场,所以网站在Google 中的推广不可忽视。不过,目前大多网站在Google中的推广都是给Google钱,做Google右边的广告。 Google右侧广告虽然效果还凑合,但是价格毕竟太高了(每次点击,0.05美元),不是我们平常的网络老百姓能够承受了的。如何不给Google一分 钱在Google中更好的推广自己的网站呢?这里我教大家一套秘笈—- Google左侧排名。
Google
左侧排名,主要是通过技术手段,提高网站在Google中的综合评分自然的获得较好的排名的。这里我们一下Google左侧排名技巧:


第一步:Google排名第一步要先了解Google排名的因素: Google排名因素据说超过300种,这个数据是一个国外的著名的SEO(搜索引擎优化研究)研究者提供的,不过我们必须研究那么深,因为我们祖先有句非常有道理的话是这么说的:万变不离其宗!

Google排名因素主要有以下几条:
A:
网站结构:合理的网站结构可以让Google轻松搜索到你网站的大多内容,收录你大量的页面,更多的关注你这个网站。是排名很重要的一条因素。
B:
标签设计:搜索引擎都喜欢通过一些标签来认识网页,判断网页,Google也不见外。此条因素也非常重要。
C: PageRank
:也就是常说的PR值。Google对网页的等级评分。是排名因素中的重中之中,下面会给大家详细谈一下。
D:
网站流量:网站流量越大,Google越关注,而且不光对你网站更新非常快,而且对排名的好处也是非常大的。
E:
其他因素还有很多很多,这里就不列出来了,只要前面那四项我们想办法做好就OK

第二步:优化网站:优化网站主要包括:网站结构优化,网站标签优化,网站页面优化,为的是让Google更容易搜索你的网站并且关注你想排的关键词。这里举个实际例子给大家谈:

A: 结构优化:让想GOOGLE收录你网站更多的网页,关键就是要让各个页面之间相互都有连接。另外最好再做一个详细的网站地图页面。

B: 标签设计:网页标签主要是两个标签,一个是网页标题,一个是简介标签,一个是关键词标签。标签中要适当的突出关键词。例如在Google中输入“电子商务”一次排名第一的网站首页标签是这么设计的:


.”>

“>

这三段标签要放在与之间
注:标题标签长度不可超过40个字符(20个汉字)为好。
注:简介标签要清晰明了的写出网页简介内容,另外突出关键词。不要过长和写与网页内容不相干的内容
注:关键词标签写太多容易被认为作弊,老实写出就OK,不要写与自己网页无关的词。


C:
网页优化:
首页:许多网站首页都是纯FLASH或者是一个图片,这样结构的网站很不合理,首页是一个网站的入口,起到的主要就是导航作用。首页最好一个清晰明了又有内容的页面。

另外,网页文本内容中要突出关键词,里面遇到的关键词可以用加粗。另外文本中有其他页面的关键词的话,可以将这个关键词加上超链接,导向相关页面。

注:每个网页突出的关键词越少越好,最好不要超过3个。另外,网页中的关键词的密度一定要把我好一个度,不要太低,也不高太高。一般在3%左右比较合适。

第三步:提高网站的PR. PR值是Google对网页的评分,主要根据网页之间的连接来计算:比如,A站有B站的连接,一个用户从A站点击B站在A站的连接进入B站,就表示A站投了B站一篇,将被GOOGLE记录。一个网页的外部连接越多,它的PR值就越高。

提高网页PR值主要有以下几中方法:
A:
PR值高的网站做友情连接。
B:
登陆YAHOO, DMOZ 等许多网页目录。
C:
到一些自助连接站点登陆自己网站的连接。
D:
优化网站结构,让网站自身页面之间都有很好的连接。

第四步:提高网站流量:想让自己网站本身的流量越好越好,首先第一条就是要把网站自身内容做好,粘住浏览过你网站的客流,让他们第一次上你网站就记住你网站,并且下次需要相关信息了还会来你的网站。另外就是配合着做其他方面的推广。

Google左侧排名不给Google一分钱,而且如果左边排名达到后,效果是Google右侧广告效果的三十倍以上。还犹豫什么,赶快行动吧!


几款搜索引擎优化检测工具


Google
链接广泛度检测器(Google Backlink Checker): http://www.webconfs.com/google-backlink-checker.php 输入你的网站URL,程序将搜索到Google中有哪些网站链接了你的站点,以及链接所用的文本标题。由于不支持中文字符,中文文本内容是乱码,但链接的URL一目了然。

搜索引擎抓取内容模拟器(Search Engine Spider Simulator): http://www.webconfs.com/search-engine-spider-simulator.php 输入你要查询的URL,获知Google可以抓取到的该页文本内容和链接。不妨对比测试一下使用大量文本和大量图片的页面所获得的内容悬殊的抓取结果。网络营销人也可以利用此工具来检测优化后的页面质量。支持中文字符。

搜索引擎抓取页面数量统计器(Search Engine Saturation): http://www.marketleap.com/siteindex/ 输入你的网站URL和随机显示的进入代码,你将获得搜索引擎AllthewebAltaVista Google/AOLHotBot/Inktomi所抓取到的你的网站页面数量。你也可以同时输入3个竞争对手网站URL以进行对比,了解自己在竞争中所处地位。

链接广泛度检测器(Link Popularity Check): http://www.marketleap.com/publinkpop/ 输入你的网站URL和随机显示的进入代码,你将获知在搜索引擎Alltheweb AltaVista Google/AOL HotBot/Inktomi MSN 中有哪些网站链接了你的网站,以及同一URLDmozExciteiWonLycosOverture等搜索引擎中的详细链接资料。你也可以同 时输入5个竞争对手网站URL以进行对比,了解自己在竞争中所处地位。 同样的工具还有 http://www.trafficzap.com/linkpopularity.php ,可检测网站在YahooGoogleMSNLycosAltavista的链接总数和具体链接的网站。 Google排名监测工具(Free Monitor for Google): http://www.cleverstat.com/google-monitor.htm 需要下载使用。该工具可以报告你的网站以某关键词在Google中的排名情况,以及同一关键词下排名前N位(自己设定位数)的网站URL

相似页面检测器(Similar Page Checker): http://www.webconfs.com/similar-page-checker.php 众所周知,Google会对拷贝页面内容进行排名惩罚。该工具可以检验两个页面的相似度,来判断是否会受到惩罚。如 http://www.sitepronews.com/freebooks.html http://www.allbusinessnews.com/freebooks.html ,相似度达到80%,后者在Google中的PageRank排名值通过工具栏显示为0.

推荐阅读:
评价一个网站的“大小”,处于视
碰到这样一种情况:在使用新浪微
种种原因,站长已经很久没有关注

中国顶级门户网站架构分析

 某日上网,遇一强贴,正巧最近也在使用一些类似的技术实现我们公司的网站,现将其贴出。

首先声明,下面的内容都是我个人根据一些工具形成的猜想。并不保证和现实中各大门户网站所用的架构一摸一样,不过我认为八九不离十了。

  新浪和搜狐在国内的知名度可谓无人不知无人不晓。他们每天的点击率都在千万以上。这样大的访问量对于新浪和搜狐来说怎样利用有限的资源让网民获得最快的速度成为首要的前提,毕竟现在网络公司已经离开了烧钱的阶段,开始了良性发展,每一笔钱砸下去都需要一定回响才行的。另一方面,技术人员要绞尽脑汁,不能让用户老是无法访问、或者访问速度极慢。这样就算有再好的编辑、再好的销售,他们也很难将广告位卖出去,等待他们的将是关门。当然这些情况都没有发生,因为他们的技术人员都充分的利用了现有资源并将他们发挥到了极至。说到底就是用squid做web cache server,而apachesquid的后面提供真正的web服务。当然使用这样的架构必须要保证主页上大部分都是静态页面。这就需要程序员的配合将页面在反馈给客户端之前将页面全部转换成静态页面。好了基本架构就这样,下面说说我怎么猜到的以及具体的架构:

  法宝之一:nslookup

  实战:

nslookup www.sina.com.cn
Server: ns-px.online.sh.cn
Address: 202.96.209.5

Non-authoritative answer:
Name: taurus.sina.com.cn
Addresses: 61.172.201.230, 61.172.201.231, 61.172.201.232, 61.172.201.233
61.172.201.221, 61.172.201.222, 61.172.201.223, 61.172.201.224, 61.172.201.225
61.172.201.226, 61.172.201.227, 61.172.201.228, 61.172.201.229
Aliases: www.sina.com.cn, jupiter.sina.com.cn

  这里可以看到新浪在首页上用到了那么多IP,开始有人会想果然新浪财大气粗啊。其实不然,继续往下看:

nslookup news.sina.com.cn
Server: ns-px.online.sh.cn
Address: 202.96.209.5

Non-authoritative answer:
Name: taurus.sina.com.cn
Addresses: 61.172.201.228, 61.172.201.229, 61.172.201.230, 61.172.201.231
61.172.201.232, 61.172.201.233, 61.172.201.221, 61.172.201.222, 61.172.201.223
61.172.201.224, 61.172.201.225, 61.172.201.226, 61.172.201.227
Aliases: news.sina.com.cn, jupiter.sina.com.cn

  细心的人可以发现了news这个频道的ip数和首页上一样,而且IP也完全一样。也就是这些IP在sina的DNS上的名字都叫 taurus.sina.com.cn,那些IP都是这个域的A记录。而news,sports,jczs.news。。。都是CNAME记录。用DNS 来做自动轮询。还不信,再来一个,就体育频道好了:

nslookup sports.sina.com.cn
Server: ns-px.online.sh.cn
Address: 202.96.209.5

Non-authoritative answer:
Name: taurus.sina.com.cn
Addresses: 61.172.201.222, 61.172.201.223, 61.172.201.224, 61.172.201.225
61.172.201.226, 61.172.201.227, 61.172.201.228, 61.172.201.229, 61.172.201.230
61.172.201.231, 61.172.201.232, 61.172.201.233, 61.172.201.221
Aliases: sports.sina.com.cn, jupiter.sina.com.cn

  其他的可以自己试。好了再来看看sohu的情况:

nslookup www.sohu.com
Server: ns-px.online.sh.cn
Address: 202.96.209.5

Non-authoritative answer:
Name: pagegrp1.sohu.com
Addresses: 61.135.132.172, 61.135.132.173, 61.135.132.176, 61.135.133.109
61.135.145.47, 61.135.150.65, 61.135.150.67, 61.135.150.69, 61.135.150.74
61.135.150.75, 61.135.150.145, 61.135.131.73, 61.135.131.91, 61.135.131.180
61.135.131.182, 61.135.131.183, 61.135.132.65, 61.135.132.80
Aliases: www.sohu.com

--------------------------------------------

nslookup news.sohu.com
Server: ns-px.online.sh.cn
Address: 202.96.209.5

Non-authoritative answer:
Name: pagegrp1.sohu.com
Addresses: 61.135.150.145, 61.135.131.73, 61.135.131.91, 61.135.131.180
61.135.131.182, 61.135.131.183, 61.135.132.65, 61.135.132.80, 61.135.132.172
61.135.132.173, 61.135.132.176, 61.135.133.109, 61.135.145.47, 61.135.150.65
61.135.150.67, 61.135.150.69, 61.135.150.74, 61.135.150.75
Aliases: news.sohu.com

  情况和sina一样,只是从表面来看sohu的IP数要多于sina的IP数,那么sohu上各个频道用的服务器就要多于sina了?当然不能这么说,因为一台服务器可以绑定多个IP,因此不能从IP数的多少来判断用了多少服务器。

  从上面这些实验可以基本看出sina和sohu对于频道等栏目都用了相同的技术,即squid来监听这些IP的80端口,而真正的web server来监听另外一个端口。从用户的感觉上来说不会有任何的区别,而相对于将web server直接和客户端连在一起的方式,这样的方式明显的节省的带宽和服务器。用户访问的速度感觉也会更快。
  1. 难道就根据几个域名的ip相同就可以证明他们是使用squid的嘛?

  当然不是,前面都只是推测。下面才是真正的证实我上面的猜测。先nslookup一把sina的体育频道。

nslookup sports.sina.com.cn
Server: ns1.china.com
Address: 61.151.243.136
Non-authoritative answer:
Name: taurus.sina.com.cn
Addresses:61.172.201.231, 61.172.201.232, 61.172.201.233, 61.172.201.9
61.172.201.10, 61.172.201.11, 61.172.201.12, 61.172.201.13, 61.172.201.14
61.172.201.15, 61.172.201.16, 61.172.201.17, 61.172.201.227, 61.172.201.228
61.172.201.229, 61.172.201.230
Aliases: sports.sina.com.cn, jupiter.sina.com.cn

  然后直接访问这些ip中的任意一个ip试试看,访问下来的结果应该是如下图所示:

  由此可以证明sina是在dns中设置了很多ip来指向域名sqsh-19.sina.com.cn,而其他各种相同性质的频道都只是sqsh- 19.sina.com.cn一个别名,用CNAME指定。dns的设置应该是这样的,然后server方面,通过squid 2.5.STABLE5(最新的稳定版为STABLE6)来侦听80端口。上面这些是根据一些信息分析而出的,应该基本正确的。下面一些就是我的个人的猜想:

  它的真正的web server也同样是侦听80端口,因为在squid配置文件中有一项是:

httpd_accel_port 80

  如果你设成其他端口号(比如88)的话,那上图的错误信息就会变成

While trying to retrieve the URL: http://61.172.201.19:88

  工具2:nmap扫描程序:可以用来检查服务器开了什么端口。

  我现在用nmap来扫描sina的一个ip:61.172.201.19来进行分析

bash-2.05$ nmap 61.172.201.19

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-07-30 13:31 GMT
Interesting ports on 61.172.201.19:
(The 1657 ports scanned but not
shown below are in state: filtered)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http

Nmap run completed — 1 IP address (1 host up) scanned in 73.191 seconds

  可以看到他对外只开了2个端口,80端口就是刚才我们说的squid打开的,这点刚才已经验证过了。而22端口是用来ssh远程连接的,主要是sa用来远程操作服务器用的安全性非常高的方法。

  工具3:lynx或者其他可以读取http头文件的工具及小程序:

  直接看例子比较好理解:

HTTP/1.0 200 OK
Date: Fri, 30 Jul 2004 05:49:47 GMT
Server: Apache/2.0.49 (Unix)
Last-Modified: Fri, 30 Jul 2004 05:48:16 GMT
Accept-Ranges: bytes
Vary: Accept-Encoding
Cache-Control: max-age=60
Expires: Fri, 30 Jul 2004 05:50:47 GMT
Content-Length: 180747
Content-Type: text/html
Age: 37
X-Cache: HIT from sqsh-230.sina.com.cn
Connection: close

  上面是sina的http头的反馈信息。里面有很多有价值的东东哦:)譬如,它后面的apache是用2.0.49,还设了过期时间为2分钟。最后修改时间。这些都是要在编译apache的时候载入的,特别是Last-Modified还需要小小的改一把源码–至少我是这样做的。

  综上所述

  sina的架构应该是前面squid,按照现在的服务器2u,2g内存一般每台服务器至少可以跑4个squid2.5stable5. 这样它16个ip就用了4台服务器。后面一层是apache2.0.49应该会用2台。这2台可能用的全是私有ip,通过前面的squid服务器在 hosts文件中指定。具体的实现方法我会下次整理出我做实验的文档:)而apache的htdocs可能是有一个或2个磁盘阵列作nfs。apache mount nfs server的时候应该是只读的,然后另外还有服务器转门用来做编辑器服务器,用来编辑人员更新文章。这台服务器应该对nfs server是具有可写的权限。

  —-这就一套完整的sina所运用的方案,当然很多是靠猜测的,我没有和sina的技术人员有过任何沟通(因为一个也不认识),否则我也就不会写出来了。其他sohu,163应该也有这样的架构。

  最后声明:这只是一些静态页面组成频道的一个架构,sina还有很多其他服务器,什么下载,在线更新等不在这个架构中。

推荐阅读:
去年的DCDC,我主要介绍了基
任何一个合理的应用程序的运行时
5月中旬,我参加了在加利福尼亚

硬盘的N个秘密

硬盘的主要技术指标

在我们平时选购硬盘时,经常会了解硬盘的一些参数,而且很多杂志的相关文章也对此进行了不少的解释。不过,很多情况下,这种介绍并不细致甚至会带有一些误导的成分。今天,我们就聊聊
这方面的话题,希望能对硬盘选购者提供应有的帮助。

 

首先,我们来了解一下硬盘的内部结构,它将有助于理解本文的相关内容。

工作时,磁盘在中轴马达的带动下,高速旋转,而磁头臂在音圈马达的控制下,在磁盘上方进行径向的移动进行寻址

硬盘常见的技术指标有以下几种:

1、 每分钟转速(RPM,Revolutions Per Minute):这一指标代表了硬盘主轴马达(带动磁盘)的转速,比如5400RPM就代表该硬盘中的主轴转速为每分钟5400转。

2、平均寻道时间(Average Seek Time):如果没有特殊说明一般指读取时的寻道时间,单位为ms(毫秒)。这一指标的含义是指硬盘接到读/写指令后到磁头移到指定的磁道(应该是柱面,但对于具体磁头来说就是磁道)上方所需要的平均时间。除了平均寻道时间外,还有道间寻道时间(Track to Track或Cylinder Switch Time)与全程寻道时间(Full Track或Full Stroke),前者是指磁头从当前磁道上方移至相邻磁道上方所需的时间,后者是指磁头从最外(或最内)圈磁道上方移至最内(或最外)圈磁道上方所需的时间,基本上比平均寻道时间多一倍。出于实际的工作情况,我们一般只关心平均寻道时间。

3、平均潜伏期(Average Latency):这一指标是指当磁头移动到指定磁道后,要等多长时间指定的读/写扇区会移动到磁头下方(盘片是旋转的),盘片转得越快,潜伏期越短。平均潜伏期是指磁盘转动半圈所用的时间。显然,同一转速的硬盘的平均潜伏期是固定的。7200RPM时约为4.167ms,5400RPM时约为 5.556ms。

4、 平均访问时间(Average Access Time):又称平均存取时间,一般在厂商公布的规格中不会提供,这一般是测试成绩中的一项,其含义是指从读/写指令发出到第一笔数据读/写时所用的平均时间,包括了平均寻道时间、平均潜伏期与相关的内务操作时间(如指令处理),由于内务操作时间一般很短(一般在0.2ms左右),可忽略不计,所以平均访问时间可近似等于平均寻道时间+平均潜伏期,因而又称平均寻址时间。如果一个5400RPM硬盘的平均寻道时间是9ms,那么理论上它的平均访问时间就是 14.556ms。

5、 数据传输率(DTR ,Data Transfer Rate):单位为MB/s(兆字节每秒,又称MBPS)或Mbits/s(兆位每秒,又称Mbps)。DTR分为最大(Maximum)与持续(Sustained)两个指标,根据数据交接方的不同又分外部与内部数据传输率。内部DTR是指磁头与缓冲区之间的数据传输率,外部DTR是指缓冲区与主机(即内存)之间的数据传输率。外部DTR上限取决于硬盘的接口,目前流行的Ultra ATA-100接口即代表外部DTR最高理论值可达100MB/s,持续DTR则要看内部持续DTR的水平。内部DTR则是硬盘的真正数据传输能力,为充分发挥内部DTR,外部DTR理论值都会比内部DTR高,但内部DTR决定了外部DTR的实际表现。由于磁盘中最外圈的磁道最长,可以让磁头在单位时间内比内圈的磁道划过更多的扇区,所以磁头在最外圈时内部DTR最大,在最内圈时内部DTR最小。

6、缓冲区容量(Buffer Size):很多人也称之为缓存(Cache)容量,单位为MB。在一些厂商资料中还被写作Cache Buffer。缓冲区的基本要作用是平衡内部与外部的DTR。为了减少主机的等待时间,硬盘会将读取的资料先存入缓冲区,等全部读完或缓冲区填满后再以接口速率快速向主机发送。随着技术的发展,厂商们后来为SCSI硬盘缓冲区增加了缓存功能(这也是为什么笔者仍然坚持说其是缓冲区的原因)。这主要体现在三个方面:预取(Prefetch),实验表明在典型情况下,至少50%的读取操作是连续读取。预取功能简单地说就是硬盘“私自”扩大读取范围,在缓冲区向主机发送指定扇区数据(即磁头已经读完指定扇区)之后,磁头接着读取相邻的若干个扇区数据并送入缓冲区,如果后面的读操作正好指向已预取的相邻扇区,即从缓冲区中读取而不用磁头再寻址,提高了访问速度。写缓存(Write Cache),通常情况下在写入操作时,也是先将数据写入缓冲区再发送到磁头,等磁头写入完毕后再报告主机写入完毕,主机才开始处理下一任务。具备写缓存的硬盘则在数据写入缓区后即向主机报告写入完毕,让主机提前“解放”处理其他事务(剩下的磁头写入操作主机不用等待),提高了整体效率。为了进一步提高效能,现在的厂商基本都应用了分段式缓存技术(Multiple Segment Cache),将缓冲区划分成多个小块,存储不同的写入数据,而不必为小数据浪费整个缓冲区空间,同时还可以等所有段写满后统一写入,性能更好。读缓存(Read Cache),将读取过的数据暂时保存在缓冲区中,如果主机再次需要时可直接从缓冲区提供,加快速度。读缓存同样也可以利用分段技术,存储多个互不相干的数据块,缓存多个已读数据,进一步提高缓存命中率。

这是我们经常能看到的硬盘参数指标,正确理解它们的含义无疑对选购是有帮助的

7、噪音与温度(Noise & Temperature):这两个属于非性能指标。对于噪音,以前厂商们并不在意,但从2000年开始,出于市场的需要(比如OEM厂商希望生产更安静的电脑以增加卖点)厂商通过各种手段来降低硬盘的工作噪音,ATA-5规范第三版也加入了自动声学(噪音)管理子集(AAM,Automatic Acoustic Management),因此目前的所有新硬盘都支持AAM功能。硬盘的噪音主要来源于主轴马达与音圈马达,降噪也是从这两点入手(盘片的增多也会增加噪音,但这没有办法)。除了AAM外,厂商的努力在上文的厂商介绍中已经讲到,在此就不多说了。至于热量,其实每个厂商都有自己的标准,并声称硬盘的表现是他们预料之中的,完全在安全范围之内,没有问题。这一点倒的是不用担心,不过关键在于硬盘是机箱中的一个组成部分,它的高热会提高机箱的整体温度,也许硬盘本身没事,但可能周围的配件却经受不了,别的不说,如果是两个高热的硬盘安装得很紧密,那么它还能承受近乎于双倍的热量吗?所以硬盘的热量仍需厂商们注意

对硬盘认识的常见误区

1、 转速与寻道时间:

现在不少人都认为硬盘转速越快寻道时间就越快,但这是最常见的错误认识,事实上寻道速度根本不决定于转速,因为两者的控制设备就不一样
。转速是由主轴马达控制,寻道则由音圈马达控制。寻道时间说白了就是体现了磁头臂径向运动的速度与控制能力,音圈马达与相应的伺服系统起着重要作用。另外,磁头的高灵敏度也有助于在高密度磁盘上准确捕获伺服标记,进而快速定位。很多情况下,我们都可以看到5400RPM硬盘的寻道时间与7200RPM硬盘一样(如三星的V40与P40)。之所以有些高速硬盘(如SCSI硬盘)的寻道时间更快,是因为厂商的有意设计,就好像一台Pentium4电脑只配 32MB内存让人觉得不平衡一样,厂商也会给高速硬盘配上更快的寻道时间(也意味着更好的元件与更高的成本,显然厂商要根据市场的需要权衡利弊)。实际上,通过上文有关平均访问时间的解释,大家应该明白,提高转速的主用意就是减少平均潜伏期,进而加快整体的访问速度,也许很多人不认同这是它最重要的用意,由此就又引出了下一个误区。

2、 转速与数据传输率:

在很多人的印象和厂商的宣传中,更高的转速的主要用意在于提高数据传输率,但这并不正确。持续数据传输率决定于很多指标,并不光只是转速。当然,有人会说转速更高,磁头单位时间划过的扇区就越多,不错,但前提是线密度一样。线密度可理解为每磁道扇区数(SPT,Sectors Per Track)。低速硬盘完全可以通过提高SPT来加大数据传输率, SCSI硬盘就是追求SPT的典型。事实上,很多厂商在相同单碟容量上对于不同的转速采用了不同的SPT设计,如金钻七的最外圈磁道扇区数为837个,而星钻三代则为896个。有人可能会问,那如何保证容量一致呢?这就涉及到每英寸磁道数(TPI,Tracks Per Inch),它代表了磁道密度。SPT高则TPI就会相应减少,如金钻七为60000TPI,星钻三代则是57000TPI。本次测试最典型的例子是 Caviar系列硬盘,WinBench测得的数据传输率与某些7200RPM产品相当。虽然我没有该系列硬盘最外圈SPT资料,但肯定不会低于1000 (若转速实为5400RPM),即使转速真的是6000RPM,也在900之上。因此5400RPM硬盘完全可以通过提高33%(7200RPM比 5400RPM转速高33%)的SPT来得到相同的数据传输率。

综上所述,7200RPM相对于5400RPM硬盘的最大优势就在于更短的平均潜伏期,进而减少平均访问时间。毕竟转速是死的,5400RPM永远处于劣势。

3、 真正的内部数据传输率:

随着硬盘知识的普及,硬盘DTR这一指标也逐渐被人们所认识,但又出现了新的误区——拿以Mbps为单位的最高内部DTR说事,这其中某些厂商与所谓高手的误导有着不可推卸的责任,后果也是相当严重。由于内部DTR决定了硬盘的实际数据传输性能,所以很多人都在关心硬盘的内部DTR,而厂商也投其所好,在产品资料中基本都公布了最大内部传输率,但多是以Mbps为单位,不少人因此拿这个数值来预测硬盘的性能,甚至分析到接口速率的瓶颈(这些人通常将其换算成 MBPS,而目前最高的数值将近80MBPS,离Ultra ATA-100的最大速率已相差不远了)。但是,它恰恰不能通过除8来换算成MBPS,因为这个数值是磁头处理二进制0/1信号(即bit)的纯理论性能,而磁头处理的信号很大部分并不是用户需要的数据(存入的数据都是经过编码的,包含许多辅助信息),因此不能以字节为单位。很多硬盘这一数值都是相当高的,如以前的富士通硬盘,指标很好,但实际性能却是另一码事。完全可以说,这个Mbps值没有什么实际价值,给人的是一种假象。

在硬盘中,真正重要的是内部持续DTR,它分为单磁道瞬间DTR与持续DTR两个指标,单磁道瞬间DTR的计算公式是“512字节×SPT×磁盘每秒所转圈数”或“512字节×SPT÷磁盘转一圈所用时间”,由于磁盘转一圈所用时间一般不能除尽,所以经常用前一种公式。持续DTR的计算公式则为 “512字节 ×SPT×磁头数/总耗时”,其中“总耗时=(磁头数-1)×磁头切换时间+道间寻道时间+磁头数×磁盘转一圈的时间”。磁头切换时间一般在产品的用户手册中有标注,大约在1ms左右。单磁道瞬间DTR表明了硬盘实际上所能达到的最大内部DTR,持续DTR则体现了硬盘真正的数据传输能力。很遗憾的是,目前只有迈拓和IBM提供了内部持续DTR数据,其他厂商仍然用Mbps数值迷惑普通大众。但是,厂商心里是明白的,他们自己也不会混淆概念(只是没事偷着乐),在数据的说法上也是非常严谨,如果你哪天发现厂商公布的内部DTR使用了MB/s为单位,那么这很可能就是我们所真正需要的数据,而不要再用 Mbps去除8了。

IBM 120GXP的技术资料,其中有两个内部DTR,我们只需关心第二个

4、 缓冲区容量与性能:

上文说过内部DTR决定了外部DTR的实际表现,但为了将内部DTR对外部DTR的影响降至最低,产生了缓冲区设计。理论上讲,缓冲区越大,即使内部DTR 不变,硬盘的性能也会更好,这就好比CPU中的缓存一样。不过,要做到缓冲区容量的增加并提高性能还是有一定难度的。这主要体现在缓存功能管理与数据安全两个方面。缓存功能管理决定了缓冲区智能化与缓存效果,简单的说就是一种管理算法与替换策略,负责这一任务的就是缓存控制器。上文已经讲到目前都将缓冲区做分段处理,并且是动态的,根据数据流情况自动划分。以120GXP为例,在读操作时可最多划分12个数据段(平均容量约155KB),在写操作时数据段可高达52个(平均容量约35KB)。那么怎么去动态的划分区段,怎么去选择最不常用的区段以替换成新的数据,都将影响最终的性能表现。比如区段划分不合理将影响缓冲区空间的利用率和预读效果,数据替换不合理将影响缓存命中率,这样一来说不定与小容量缓冲区性能差不多。讲到这,大家肯定会想到了CPU缓存的算法(比如N路级联与更新策略等),的确两者有相同之处。对于更大容量的缓冲区,肯定就不能照搬小容量缓冲区的缓存管理算法。因此,缓冲区越大性能越好是有前提的,这对厂商的缓存管理技术水平提出了更高的要求。

大容量缓冲区的数据安全性主要是指在突然断电的情况下,缓冲区中的待写数据将如何处理的问题。这方面笔记本电脑硬盘就有了得天独厚的优势,因为有电池为后盾,笔记本电脑硬盘的缓冲区容量已经提升到了16MB。但对于台式机,这是个不小的考验。WD公司在这方面做出了有意义的探索,主要方法是通过将数据暂时保存在最外圈暂存区(因为最外圈的写入速度最快),下次开机再写入原目的地址的方法来保证缓冲区中待写数据的安全,显然这需要特殊的管理机制,也是厂商的自由发挥了。

最后我们再谈谈目前普遍流行的说法——大容量缓冲区对零散数据非常有利,这是很片面的认识。当然,这种说法可以理解,也没有什么根本性错误,但容易误导人们对大容量缓冲区的认识。从分段式缓存结构可以看出,更大的缓冲区理论上可以划分出更多的数据段,能容纳更多的互不相干的小数据块。而这种随机的、不连贯的、小数据量的读取行为在Web服务、数据库服务与日常办公应用中很常见。如在Web服务中,经常出现对一个网页同时有多个请求的情况,而一个网页的大小也就是几十到几百KB的容量,如果缓冲区能缓存更多的页面,那么服务器的表现也会越好。因此大容量缓冲区在这方面的贡献,我们完全肯定。但另一方面,对于大容量,连续读写的数据操作,大容量缓冲区同样能发挥重要的作用。更大的缓冲区此时意味可一次缓冲更多的数据(硬盘会根据数据量将区段合并),即能在相同的时间内向主机或磁头发送更多的数据,而磁头的连续读写扇区的能力更容易发挥。所以,在音频、视频处理等经常用到大数据量连续读写的场合,大容量缓冲区硬盘是最佳之选。在下面的测试中,大家也会发现8MB缓冲区硬盘相对于2MB缓冲区硬盘的整体优势。

5、 SCSI与IDE的性能:

在WD1000JB推出时,有些读者就根据其与低端SCSI硬盘的对比测试数据,曲解原文的用意发表了IDE硬盘性能已经可与
SCSI硬盘相抗衡的看法,这显然是一种误导。在测试原文中与WD1000JB做对比的是希捷早期万转SCSI硬盘——Cheetah 36XL。单碟容量为9GB,不到1000JB单碟容量的1/3,缓冲区容量为4MB,而WD1000JB则是8MB,但两者的持续传输率基本一致,因此有一定可比性。原文将当时最高配置的IDE硬盘与较低配置的SCSI硬盘作对比的主要用意在于证明8MB缓冲区的作用,并通过测试表明在此情况下最高端 IDE的性能完全可以与低端SCSI一争高低,而不是给“IDE性能可与SCSI对抗”这一笼统的错误说法提供论据,因为这种比较是有条件的。从测试成绩上看,Cheetah 36XL全面落后,但这是在单盘情况下。而随着硬盘数量的增多,SCSI共享数据通道的优势将逐渐体现,此时就不是IDE硬盘可比的了,即使你接满4块 IDE硬盘也于事无补,况且随着更高单碟容量(如18GB)的万转SCSI与15000转SCSI硬盘的普及,IDE的单盘优势也不明显了。所以SCSI 与IDE根本就针对着不同的市场与操作应用。做对比测试的原作者也只是借WD1000JB证明,目前最高端IDE硬盘完全可以在负荷不很繁重的中低端单盘工作站市场一展身手,而不是全面冲击SCSI硬盘,这一点一定要认清楚,不要误解原文作者的用意。

6、 总容量与性能:

如果单碟容量相同,那么总容量的不同就意味着磁头数量(即数据面数,一张磁盘有两个数据面,但有时只用一个,而一个数据面对应一个磁头)的不同,这其中会与性能有什么关系呢?由此就要联系到柱面这一概念,柱面是指硬盘中每张磁盘上编号(位置)相同的磁道集合,硬盘操作时,是从最外圈柱面开始,当该柱面所有磁道用完后,再移至内圈的下一个柱面,而不是先存完一张盘再存一张盘。同系列的硬盘的柱面数是一样的,但每个柱面包含的磁道数要因磁头数而异,计算公式为:磁道数=磁头数×柱面数。如迈拓D740X,20GB型号由于只有一个磁头,所以一个柱面的容量是一个磁道,而80GB型号则是4个磁头,一个柱面的容量就是4个磁道。以最外圈柱面为例,D740X是外圈磁道是837个扇区,按每扇区512字节计算,20GB型号的最外圈柱面的容量为 418.5KB, 80GB型号的最外圈柱面容量为1674KB 。也就是说如果连续存储500KB的数据,20GB就要移动磁头进行道间寻道了,但80GB的还不会,只是存在同一柱面内磁头切换的延迟。大家可以这么认为,80GB型号中一个柱面相当于20GB型号中的4个柱面,而同一柱面内的磁道切换速度通常要快于柱面间的切换,对保持数据传输率更为有利。

柱面示意图

由此,很多人可能得出结论,同一产品系列中,磁头数越多的型号的连续读写性能越好(如果是零散读写根本不受柱面容量的影响)。这个说法基本正确,但是有忽略的地方。首先,目前的硬盘都采用了区域数据记录,在同一区域内,每磁道扇区数固定,比如D740X分为15个数据区(最外圈还有一个但用于存储系统数据,可不计),最外圈数据区中有2582个柱面,这些柱面的扇区数是相同的,所以即使是20GB型号,也只会在存满1.03GB左右的数据后才转入下一个 SPT更少的数据区。而且也有柱面切换速度比磁头切换快的硬盘,D740X就是,因此在这头1个GB的数据区中,80GB的D740X型号性能也许更差。但我们一般使用硬盘都要分区,C盘大概在5-10GB左右,此时20GB的型号已用到了第4个数据区,而10GB的容量在80GB型号中还没有超出第二个数据区,因此就这个分区的整体性能而言,80GB的显然要占优势。从WinBench的硬盘传输率曲线上就能看出这一点, 80GB型号的最高传输率范围覆盖了更多的空间。不过,上面的对比是较极端的,如果是40GB与60GB的型号去对比就不会这么明显,可以说磁头数相差如果在3个以内,性能的差距将非常微弱,但对有的硬盘,即使磁头数相差3个也基本不会有什么差距。


上为D740X-80GB型号的DTR曲线图,下为D740X-40GB型号的DTR曲线图,以10GB容量为界,可发现40GB型号已经用到了DTR更低的第三个数据区,而80GB型号仍处在DTR更高的第二个数据区,理论性能要强于40GB型号

现在再让我们看看另一个例子——酷鱼四,从曲线图上可以看出其第一个数据区占据了1/3多的柱面,也就是说即使是20GB的酷鱼四,在前10GB 容量的性能不见得就比80GB的型号差。所以,具体的差别除了要看磁头相差数量还要看数据区的设置。另外,在产品的生产过程中,厂商可能随时进行改进(不仅指 Firmware,还包括元件的优化与改良等),往往会出现新的产品比老产品性能更好的情况,比如WD的CaviarXL系列,评测的1200BB是 2001年9月的产品(10月才发布单碟40GB的CaviarXL系列),800BB与400BB都是今年一月和二月的产品(Firmware版本没变),后两者的表现与1200BB相比并无劣势。而IBM则为不同磁头数的型号开发了不同版本的Firmware,使得各型号的性能表现都趋于一致。因此,影响容量与性能的可变因素很多。


上为酷鱼四-60GB型号的DTR曲线图,下为酷鱼四-80GB型号的DTR曲线图,即使以20GB容量为界,可发现60GB型号仍在DTR最高的第一个数据区,理论上性能和80GB型号一样

不过,在一些测试中,最大容量型号的表现基本都很出色,有的大容量5400RPM的性能甚至好过一些小容量的7200RPM硬盘。

7、 FDB的作用:

FDB 马达对于很多人来说是比较新鲜的,在很多公司的宣传中,FDB的作用被定为减少噪音与热量,甚至能提高性能。这么说似乎有道理,但容易产生误导。BB轴承使用圆形滚珠(材料可为金属或陶瓷)作为主轴与基座之间的运动连接/支撑体,由于滚珠加工精确度产生的必然差异,在主轴高速运转中,滚珠之间会发生碰撞而振动,这就是马达(主轴)噪音的主要根源(其他原因还包括轴承装配精度与力矩的平衡),FDB则使用了液态润滑物质代替滚珠,这样就完全消除了因碰撞产生的噪音。但是,主轴的噪音在硬盘整体噪音中的强度比重较小,而且人耳对其远不如音圈马达寻道噪音敏感(因为频率较低),所以FDB的减噪功能确切的说只有在硬盘空闲时(磁盘空转,磁头不寻址)才能体现。另外,对于热量,滚珠之间磨擦肯定是一个热源,但这与马达电机相比也不算什么,而且FDB的效率往往并不如BB,马达功耗可能会更大。第一块使用FDB的IDE硬盘——希捷的“大灰熊”,其热量之高想必是很多老玩家记忆犹新的,而且即使是不用滚珠的音圈马达的热量也很高。因此主轴马达的主要热源并不在轴承。我们在测试中也发现,现阶段FDB并没有体现出对BB的降热优势。

综上所述,大家要对FDB有一个客观的认识,不能盲目听信宣传,认为FDB肯定比BB好(毕竟转速是固定的,性能不会改变)。至少在目前,FDB并没有多大优势,这可能也是为什么IBM与WD仍没有使用FDB的一大原因。

8、 怎么测试硬盘:

看过不少的硬盘横向测试,虽然使用的软件都一样,但其中的测试方法实在不敢认同。硬盘测试有两个方面,一是硬盘本身的性能,另一个是硬盘对整机性能的影响。对于前者,很多测试人员将被测硬盘也当作是系统硬盘,也划出成多个分区。虽然比较符合实际的应用,但不能真正反映硬盘的性能,而真正符合实际应用的测试并不在于硬盘的单独测试上。事实上,最合理的硬盘单独测试方法是,操作系统与测试软件装在另一个硬盘上,被测硬盘单独接在一个硬盘接口,接下来就是分区,此时必须要将全部容量分成一个区才能体现硬盘的综合性能。现在最常用也是最好用的硬盘测试软件WinBench99就是以分区大小来确定测试区域的,包括 DTR、访问时间、应用模拟测试等,在DTR测试中以分区的最外圈磁道开始到分区的最内圈磁道终止,所以如果只用头10GB的容量为一个分区,那么测出来的就是这10GB之内的DTR而不是整个硬盘的,这也是为什么有些数据中,结束端比起始端的数值还要高的原因(如果分区容量没有超出数据区,那么很容易因为误差产生这种结果)。另外,如果测试区域很小,则磁头寻道的时间也会限制在更低的范围内(因为寻道的范围也小了),同样有利于得高分,类似的影响也体现在商业与高端测试中。所以,硬盘单独测试时必须进行全分区!至于用什么样的文件系统就不是很重要了,不过FAT32的得分一般都比NTFS的高,但如果测试条件统一,那么都是有说服力的,成绩排名也不会因为文件系统的改变而改变。

现在再说说整机测试。虽然是硬盘横向测试,但要想知道哪个硬盘对整机性能提升最大,就必须动用Winstone系列软件来进行对比测试了,这可以说是对硬盘的性能终极考试,因为WinBench99相对简单,也不是很全面,更容易被厂商钻空,而Winstone就不一样了,硬盘只是其中的一个子系统,但它也会影响最终的成绩。遗憾的是很多硬盘横向测试中都没有这一项,只是简单的跑跑WinBech99就完了。Winstone测试就要在接近真实使用情况的设置下进行,此时就不能用全分区了,因为现实中很少有人这么做。而测试一般都在被测硬盘的C区,所以容量通常为5-10GB。当然,也可以进行全分区的整机测试,这就取决于测试人员自己的决定了。

在经过正确的硬盘单独与整机测试后,我们就能对被测产品性能有一个比较全面的认识和客观的评价了。

推荐阅读:
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基
之前收到公司一个大牛的PPT,

Solaris中的酷命令

Solaris 中的命令非常之多,以致很难从中分离出那些很酷的命令。例如,有些命令报告程序进行每个系统调用时所要花费的时间,有些命令动态地显示系统活动信息,而且 这些命令大部分都同时包含在了 Solaris 8 和 Solaris 9 中。这里,我将重点介绍其中一些命令,您或许会发现它们特别有用。

    系统管理员是工具的使用者。通过实践经验,我们掌握了更多工具,并且增强了诊断问题以及实施解决方案的能 力。本次专栏中包含的命令是通过经验、朋友、熟人以及出席 9 月举行的 SunNetwork 2002 大会收集到的。Solaris 内核的开发人员 Brian Cantrill 和 Mike Shapiro 所讲的"The /procodile Hunter"让人很有启发并令人感到惊恐,因为 Cantrill 编写代码来说明一个观点的速度比 Shapiro 能够讲解该观点的速度还要快!

有用的 Solaris 命令

truss -c (Solaris >= 8):这是个令人震惊的 truss 选项,它提供了被追踪命令的全面概要信息:

$ truss -c grep asdf work.doc
syscall seconds calls errors
_exit .00 1
read .01 24
open .00 8 4
close .00 5
brk .00 15
stat .00 1
fstat .00 4
execve .00 1
mmap .00 10
munmap .01 3
memcntl .00 2
llseek .00 1
open64 .00 1
---- --- ---
sys totals: .02 76 4
usr time: .00
elapsed: .05

它还能显示正在运行的进程的概要数据。在本例中,数据表明了从启动 truss 命令到用 control-c 来终止 truss 执行的期间,进程到底做了些什么。这对于判断进程为何被挂起是很理想的,因为您无须费力浏览整个 truss 的输出。

truss -d 和 truss -D (Solaris >= 8):这两个选项表明与truss显示的每个系统调用相关的时间信息。这对于找出定制代码或商业代码中的问题很有帮助。例如:

$ truss -d who
Base time stamp: 1035385727.3460 [ Wed Oct 23 11:08:47 EDT 2002 ]
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0032 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0037 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0042 open("/usr/local/lib/libc.so.1", O_RDONLY) Err#2 ENOENT
0.0047 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0051 fstat(3, 0xFFBEF42C) = 0
. . .
truss -D 对于显示系统调用间的延迟时间更加有用:


Dilbert> truss -D who
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0028 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0005 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0006 open("/usr/local/lib/libc.so.1", O_RDONLY) Err#2 ENOENT
0.0005 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0004 fstat(3, 0xFFBEF42C) = 0

这个例子中,stat 这个系统调用要比其他系统调用占用更长的时间。

truss -T:这是个很棒的调式帮助选项。在执行指定的系统调用时,它可以终止进程("-U"也执行同样的操作,不过是在进行用户级的函数调用时)。此时,将会获取用于进一步分析的 core 文件,或者使用一些 /proc 工具来确定进程各个方面的状态。

truss -l(在 Solaris 9 中已改进):显示多线程进程中每个调用的线程号。Solaris 9 中的 truss -l 经过了改进,最后还可以监视多线程的应用程序的执行。

Truss 的确是个功能强大的工具。例如,可在 core 文件中用于分析问题产生的原因。还可以通过"-u"选项来显示用户级的库(既可以为系统库,也可为程序员库)调用的详细信息。

pkg-ge:这是个用于自动获取免费软件包的好工具(http: //www.bolthole.com/solaris)。它通过 /etc/pkg-get.conf 来配置。一旦配置好并运行后,就运行 pkg-get -a 来获取可用包的列表以及运行 pkg-get -I 来获取并安装给定的包。

Plimit (Solaris >= 8):这个命令用于显示并设置正在运行的进程中的每个进程的限制。如果一个长时间运行的进程超过了某个限制(如打开的文件数目),使用该命令就十分方便。 因为无须使用 limit 命令后重新运行该进程,plimit 就可以修改正在运行的进程。

coreadm (Solaris >= 8):在以前没有 coreadm 命令时,core dumps 被置于进程的工作目录下。并且 core 文件将会互相覆盖。而这个问题和其他更多问题都可以由 coreadm 来处理,它是一个管理 core 文件生成的工具。您可以通过该工具指定是否保存 core、core存储的位置和应保留的版本数目,等等。所有这些设置信息都是在重启前通过 coreadm 修改 /etc/coreadm.conf 来保存的。

pgrep (Solaris >= 8):pgrep 在 /proc 中搜索符合给定规则的进程,并返回进程的 ID。其中一个很棒的选项是"-n",它返回的是最新的满足条件的进程号。

preap (Solaris >= 9):除去僵尸进程。任何困于"z"状态(由 ps 命令显示)的进程,该命令都可将之从系统中清除。

pargs (Solaris >= 9):显示进程的参数及环境变量。

nohup -p (Solaris >= 9):nohup 命令可以用于启动一个进程,因此即使用于启动进程的 shell 被关闭(即进程获得"SIGHUP"信号),该进程仍然可以继续运行。这对于让一个后台任务不管碰到何种情况仍然可以继续运行是很有用的。但是如果您已经 启动了一个进程,但稍后希望使它免受 HUP 信号的影响,该怎么办呢?在Solaris 9中, nohup -p 可以获取进程 ID 并使之忽略 SIGHUP 信号。

prstat (Solaris >= 8):prstat 也是 top 命令,但拥有更多功能。这两个命令都可以提供一个屏幕的关于进程的有用信息以及其他的相关信息,并且能频繁地更新,总之是个很棒的显示系统性能的窗口。但 prstat 要比 top 更加精确。它还提供了一些很好的选项。"-a"可以同时显示进程与用户的信息(默认由 CPU hog 排序)。"-c"使其执行很像 vmstat(在前一个报告下面接着显示新的报告)。"-C"显示在处理器集中的进程。"-j"显示一个"工程"中的进程。"-L"显示每个线程和每个进 程的信息。"-m"和"-v"显示每个进程的很多详细的性能信息(包括 pages、traps、lock wait 和 CPU wait)。所有输出数据都可以按照在内存中设置的大小、虚拟内存大小、运行时间等等条件来排列。prstat 在没有 top 的系统中是个十分有用的工具,并且由于它的精确性,所以很可能取代 top(有些地方考虑到它是个被支持的程序而使用它)。

trapstat (Solaris >= 9):trapstat 以及 lockstat 和 kstat 是 Solaris 中最难以理解的命令。它们显示一个运行的操作系统内部中最具体的细节信息。每个命令对于解决 Solaris 系统中发生的古怪问题都是必不可少的。最好是将它们的输出随错误报告一起提交,但进一步的研究揭示,它们也能为一般应用提供有用信息。

vmstat -p (Solaris >= 8):在这个选项可以使用之前,要确定是哪种类型的内存命令导致系统页面调度几乎是不可能的(请查阅"se toolkit")。vmstat -p 可以解决此问题,因为它不但显示您的系统是否处于内存紧缺的情况(通过"sr"栏),而且还显示是否是由以下内容导致的:应用程序的代码,应用程序的数据 或 I/O 。"-p"能够真正帮助找出 Solaris 中导致神秘的内存问题的原因。

pmap -x (Solaris >= 8,Solaris >= 9中进行了错误修复):如果已经得知进程中有内存问题,并且需要获得更多内存使用的详细信息,就可以使用 pmap -x。该命令将解释指定 ID 的目标进程的整个内存映射信息,如下:

# pmap -x 1779
1779: -ksh
Address Kbytes RSS Anon Locked Mode Mapped File
00010000 192 192 - - r-x-- ksh
00040000 8 8 8 - rwx-- ksh
00042000 32 32 8 - rwx-- [ heap ]
FF180000 680 664 - - r-x-- libc.so.1
FF23A000 24 24 - - rwx-- libc.so.1
FF240000 8 8 - - rwx-- libc.so.1
FF280000 568 472 - - r-x-- libnsl.so.1
FF31E000 32 32 - - rwx-- libnsl.so.1
FF326000 32 24 - - rwx-- libnsl.so.1
FF340000 16 16 - - r-x-- libc_psr.so.1
FF350000 16 16 - - r-x-- libmp.so.2
FF364000 8 8 - - rwx-- libmp.so.2
FF380000 40 40 - - r-x-- libsocket.so.1
FF39A000 8 8 - - rwx-- libsocket.so.1
FF3A0000 8 8 - - r-x-- libdl.so.1
FF3B0000 8 8 8 - rwx-- [ anon ]
FF3C0000 152 152 - - r-x-- ld.so.1
FF3F6000 8 8 8 - rwx-- ld.so.1
FFBFE000 8 8 8 - rw--- [ stack ]
-------- ------- ------- ------- -------
total Kb 1848 1728 40 -

这里,我们可以看到每一块内存,它们被用于做什么,占用了多大的(虚拟的和真实的)空间以及其模式信息。

df -h (Solaris >= 9):这个命令在 Linux 上已经应用十分普遍,刚刚转移到了 Solaris 平台。df -h 以一种方便阅读的形式显示文件系统的概要信息:

$ df -h
Filesystem size used avail capacity Mounted on
/dev/dsk/c0t0d0s0 4.8G 1.7G 3.0G 37% /
/proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
fd 0K 0K 0K 0% /dev/fd
swap 848M 40K 848M 1% /var/run
swap 849M 1.0M 848M 1% /tmp
/dev/dsk/c0t0d0s7 13G 78K 13G 1% /export/home
推荐阅读:
就在前不久,Oracle宣布:
作为一个Unix系统的管理员,
一个朋友向我咨询他遇到的一个问