%iowait并不能反应磁盘瓶颈

October 27, 2009

iowait实际测量的是cpu时间:
%iowait = (cpu idle time)/(all cpu time)
这个文章说的很明白,高速cpu会造成很高的iowait值,但这并不代表磁盘是系统的瓶颈。唯一能说明磁盘是系统瓶颈的方法,就是很高的read/write时间,一般来说超过20ms,就代表了不太正常的磁盘性能。为什么是20ms呢?一般来说,一次读写就是一次寻到+一次旋转延迟+数据传输的时间。由于,现代硬盘数据传输就是几微秒或者几十微秒的事情,远远小于寻道时间2~20ms和旋转延迟4~8ms,所以只计算这两个时间就差不多了,也就是15~20ms。只要大于20ms,就必须考虑是否交给磁盘读写的次数太多,导致磁盘性能降低了。
作者的文章以AIX系统为例,使用其工具filemon来检测磁盘每次读写平均耗时。在Linux下,可以通过iostat命令还查看磁盘性能。其中的svctm一项,反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了…

2

南开大学本科生选课系统,研究生选课系统

October 25, 2009

非常无奈,每次都要搜索才能找到这两个重要的东西,记录在此。
南开大学本科生选课系统: http://222.30.32.10
南开大学研究生选课系统: http://202.113.28.116

2

单词选择问题

October 7, 2009

从n个单词中选最大数量的单词(cardinalality of subset of these n words)放到k行中,每行长度为L,但是单词的顺序不能变。知道每个单词的长度l_{i}。 设计一个算法,要求复杂度和L 无关。
乍一看,如果将每行长度L看作背包问题的容量,每个单词的长度看作物品的重量,每个单词的value都是1,貌似排列每一行都是一个背包问题。但是,一个所有物品value都为1的背包问题,已经不再是一个NPC问题了。可以用贪心算法解决,呵呵…而这一点正是,这个题目的关键…
将所有单词按照顺序编号1-n,当计算前k个单词放在一行最多能放多少个的时候,可以通过一个贪心遍历完成:

如果当前行剩余的长度能存放当前单词,则放下;
如果不能,则
找到当前行最长的单词和当前单词比较,留下较短的

我们可以通过使用最大堆来保存已放在当前行的元素的长度,来加快程序寻找最长单词的过程。有了在O(n*lgn)时间能完成的,放置一行单词的算法之后,我们可以在此基础上,作动态规划,完成这个题目。

dp(k,n) = Max(for every j, 1<j<n){
dp(k-1, n-j)+m (m 是j个单词中能放在当前行的数目)
[...]

0

获取Shell最后一个参数

October 6, 2009
Tags: ,

在水木上看到这个帖子,本来觉得自己看过一遍Bash的manual已经对bash相当的了解了,没想到还有很多细节被忽略了,看来看manual和reference的时候,一定得相当的细心并且耐心才行啊…
说正事,如何显示shell脚本的最后一个参数呢?
$#这个bash内置变量记录了脚本接受到的参数个数,那么${$#}就应该可以显示最后一个参数了,可惜中括号里面是一个变量,bash作变量替换的时候,只进行一次扫描,那么上面的语法就被bash理解成了${name#substitute}这种语法了.

byang@byang-desktop:~$ echo $#
0
byang@byang-desktop:~$ echo $0
bash
byang@byang-desktop:~$ echo ${$#}
9033
byang@byang-desktop:~$ echo $$
9033
byang@byang-desktop:~$ echo ${$%}
9033
byang@byang-desktop:~$

如果要用如上方法,显示最后一个参数,那就只能让bash作两次变量替换,对,用eval。

byang@byang-desktop:~$ eval echo \${$#}
bash
byang@byang-desktop:~$

或者,使用bash提供的间接变量替换

byang@byang-desktop:~$ echo ${!#}
bash
byang@byang-desktop:~$

bash中以${!name}形式出现的变量替换,就是间接替换。bash首先,计算$name的值,并用它的值来替换中括号里面的值,再作一次变量替换。
这个语法,在bash的manual的一个小小的段落里面,真不明白这么重要的语法bash manual为什么不详细介绍一下。如果你在看bash manual的话,关于这种语法的介绍在3.5.3 Shell Parameter Expansion一节的第四段,或者可以打开bash manual,搜索indirect expansion,整个manual仅此一处,好好看看,别漏过去,呵呵…

1

浏览器简史

October 6, 2009

在cnBeta上看到了这幅图片,感慨万千啊…
早在我接触电脑之前,Netscape就已经战败消失了,而Mozilla项目也早已开始…
05年开始使用Firefox,那个时候的Firefox还真的很年轻啊…
一直认为Firefox比Safari岁数大,没想到是反过来了…
早在96年,Opera浏览器就诞生了,并且应用在了无限设备上…
以前,在网络上和书本上都看过关于那场浏览器大战的介绍,今天,看来又要亲眼见证一次新的浏览器大战了,n年之后,也可以给年轻人讲述一下了… ^_^

0