存档

‘Linux’ 分类的存档

理解linux time命令的输出(What do ‘real’, ‘user’ and ‘sys’ mean?)

2010年6月19日 admin 没有评论

Linux中time命令,我们经常用来计算某个程序的运行耗时,用户态cpu耗时,系统态cpu耗时。

例如:

$ time foo 
real        0m0.003s
user        0m0.000s
sys         0m0.004s$

那么这三个时间都具体代表什么意思呢?

[1] real : 表示foo程序整个的运行耗时,可以理解为foo运行开始时刻你看了一下手表,foo运行结束时,你又看了一下手表,两次时间的差值就是本次real 代表的值

举个极端的例子如下:可以看到real time恰好为2秒。

# time sleep 2

real    0m2.003s

user    0m0.000s

sys     0m0.000s

[2] user   0m0.000s:这个时间代表的是foo运行在用户态的cpu时间,什么意思?

首先,我来讲一下用户态和核心态:

核心态(Kernel Mode)

      在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。

       —– In Kernel mode, the executing code has complete and unrestricted access to the underlying hardware. It can execute any CPU instruction and reference any memory address. Kernel mode is generally reserved for the lowest-level, most trusted functions of the operating system. Crashes in kernel mode are catastrophic; they will halt the entire PC.

用户态(User Mode)

      在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。

      —– In User mode, the executing code has no ability to directly access hardware or reference memory. Code running in user mode must delegate to system APIs to access hardware or memory. Due to the protection afforded by this sort of isolation, crashes in user mode are always recoverable. Most of the code running on your computer will execute in user mode.

为什么要区分Kernel Mode 和 User Mode

     隔离保护,使得系统更稳定。

好,讲完用户态和核心态之后,我们来看user time,说过了,这个指的是程序foo运行在用户态的cpu时间,cpu时间不是墙上的钟走过的时间,而是指CPU工作时间。

[3] sys   0m0.004s : 这个时间代表的是foo运行在核心态的cpu时间。

 

好,讲完上面的这些,我们来看看这三个的关系,这三者之间没有严格的关系,常见的误区有:

误区一: real_time = user_time + sys_time

       我们错误的理解为,real time 就等于 user time + sys time,这是不对的,real time是时钟走过的时间,user time 是程序在用户态的cpu时间,sys time 为程序在核心态的cpu时间。

利用这三者,我们可以计算程序运行期间的cpu利用率如下:

%cpu_usage = (user_time + sys_time)/real_time * 100%

如:

# time sleep 2

real     0m2.003s

user    0m0.000s

sys     0m0.000s

cpu利用率为0,因为本身就是这样的,sleep 了2秒,时钟走过了2秒,但是cpu时间都为0,所以利用率为0

误区二:real_time > user_time + sys_time

一般来说,上面是成立的,上面的情况在单cpu的情况下,往往都是对的。

但是在多核cpu情况下,而且代码写的确实很漂亮,能把多核cpu都利用起来,那么这时候上面的关系就不成立了,例如可能出现下面的情况,请不要惊奇。

real 1m47.363s

user 2m41.318s

sys 0m4.013s

误区三:real_time < user_time + sys_time

一般来讲不会有人闯入这个误区^^

 

参考资料:理解time的输出

分类: Linux 标签: , , ,

选择vim的十大理由

2010年4月12日 admin 2 条评论

前言:

一路折腾来,开发环境和编辑器换了一堆又一堆,从最先的vim,vc6.0,UltraEdit,notepad,notepad++,到后面的Dreamweaver,SlickEdit,visual studio,Editra,又回到了最初的vim。一路看来,vim还是用着最顺手,最称心。在这里来说说选择vim的十大理由。

习惯黑乎乎的界面(个人性情喜好)

  • 语法高亮调节,syn on
  • 多种调色方式,不过我还是最喜欢desert,设置colorscheme desert
  • 强大的列模式

  • 这个是我最喜欢的功能了,ctrl+v,对一列文本进行同一种操作,比如修改文档前10行的开头部分,那么ctrl+v选中前10行待修改的部分,按s,然后输入修改的内容,再esc回到可视模式,ok,it·s done。
  • 着重推荐大家熟悉列模式操作,你会发现你的编辑、编码效率会高一个量级,慢慢的你就再也离不开了…
  • 顺手的定位查找功能

  • 例如 %* 查找光标所在处的单词,下一个出现的地方;%#查找光标所在处的单词,上一个出现的地方;再按n或者N继续查找
  • gd指令,会跳转到光标所在处的变量,定义的地方
  • ESC :/sth 会正向匹配待查找的sth,再按n或者N继续来回查找
  • ESC :?sth 会反向匹配待查找的sth
  • 在一行内,fx 光标会跳到本行中第一次出现的字母x出,Fx则会反向跳转到字母x出现的地方
  • 强大的替换功能

  • 你要知道,以前好多需要使用sed来完成的替换工作,现在都直接用vim来替代,熟练之后,你会发现vim的替换是这么的强大
  • 最简单的就是全文替换 ESC :%s#A#B#g,%表示全文替换,g表示对每一行中出现的多个A全部替换(注:如果没有g,则只会对每行中第一次出现的A替换成B)
  • 或者你只想对某几行进行替换,则可以使用行号,或者使用shift+v选中待替换的行,然后ESC :s/A/B/g
  • 方便的undo、redo、copy、paste 等等

  • 撤销前面几次编辑,则u即可,想undo多少次就u多少次
  • 重新进行刚刚撤销的编辑,那么ctrl+r即可,想redo多少次就ctrl+r多少次即可
  • yy则copy光标所在的行,p在粘贴刚刚拷贝的行
  • shift+d则删除从光标开始到行尾的内容;shift+c实现同样的功能并进入insert模块,方便下一步的插入操作
  • d0则删除从光标开始到行开头内容,d$则删除从光标开始到行末尾,dw则删除当前的单词,dd则删除整个行,注意被删除掉的东西都会存在于剪贴板中,使用p可以进行粘贴

随手拈来的代码折叠(参见baidu.net/vim-tips)

  • set fdm=indent,则可以使代码按照缩进自动折叠
  • 如果你不喜欢每次都自动折叠,那么可以使用缺省的折叠模式:manul,此时,shift+v选中待折叠的行,zf创建折叠,zo展开折叠的代码,zc重新折叠起来。这样是不是很方便,尤其对于代码量很大的文件,那些不想关注的部分就可以折叠起来了^^
  • 在文档内快速的移动

  • 这个功能也是vim最吸引我的地方之一,hjkl四个键完全代替上下左右四个箭头,这样虽然开始可能难记忆点,但是熟练之后,你就会发现这样设计的道理和优点。使用hjl四个键,你会发现在编辑过程中,手指根本不需要离开键位,即可以想怎么移动就怎么移动
  • ctrl+f文档向下翻页,ctrl+b文档向上翻页,zz光标移动到屏幕中央。
  • gg移动到文档的开头,shift+G移动到文档的末尾
  • 连续按两次单引号,光标回到上次停留的地方
  • 反引号+点号,光标回到上次编辑的地方(Oh my god,这岂不是很方便)
  • 书签功能

  • 书签功能,再我看来,虽然不是那么惊世骇俗,设计的虽然不是尽善尽美,但也很好用
  • m加小写字母,例如ma,则在光标所在的地方创建一个书签a,那么反引号+a,则能快速的回到标签a处
  • 多tab页编辑

  • 使用vim,你也可以很方便的向使用IDE那样,多标签编辑
  • ESC :tabnew file.txt 则在新的tab页中打开或者新建file.txt
  • ESC: tabnext 跳到下一个标签
  • ESC: tabprev 跳到上一个标签
  • 免费 开源 自由

  • 免费 开源 自由 this is vim
分类: Linux 标签: ,

debian apt sources.list教育网配置

2010年4月10日 admin 没有评论

debian apt sources.list教育网用户配置,ustc的debian源,速度和稳定性都不错,推荐

# /etc/apt/sources.list for debian testing(etch)
# see sources.list(5) for more information.
# you can replace http with ftp.
# this file should be used in testing(etch) only.

deb http://debian.ustc.edu.cn/debian testing main non-free contrib
deb-src http://debian.ustc.edu.cn/debian testing main non-free contrib

deb http://debian.ustc.edu.cn/debian-security testing/updates main
——————————————————————-

阅读全文…

Unix传奇(下篇)

2010年4月9日 admin 没有评论

<<<<   Unix传奇(上篇)

前言: 本文转载自酷壳(cooshell.cn),很感谢作者,非常不错的文章,从Unix到C语言,从Unix到linux,从Unix到开源系统,从Unix到Gnu,Linus Torvalds,Richard Stallman…… 历史的变迁,风云人物,*nix恩怨,历历在目,让我们一起再去看看那是怎样的岁月…

—————————————————分割线———————————————————-

Unix是目前还在存活的操作系统的元老了,走过了40年的历程(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。由它引发的思想变革,对当今计算机文化造成的深远影响。这是一段所有从事计算机行业人员尤其是软件开发人员需要了解的历史。Unix的传奇历史是整个计算机世界文化最具代表性的,它对整个计算机世界文化的影响也是最巨大,最深远的。他给人带来的不单单的对过去的回味,更为我们带来了计算机世界的新思潮。

下篇

  • Unix与黑客文化
  • Unix的历史教训
  • Unix 家族谱
  • Unix的特点
  • Unix的影响和哲学
  • Unix痛恨者手册

    上篇

    • Unix起源
    • Unix分裂
    • Unix的法律纠纷
    • GNU开源组织
    • Linux横空出世
    • Linux今天的领袖

    阅读全文…

    Unix传奇(上篇)

    2010年4月9日 admin 没有评论

    前言: 本文转载自酷壳(cooshell.cn),很感谢作者,非常不错的文章,从Unix到C语言,从Unix到linux,从Unix到开源系统,从Unix到Gnu,Linus Torvalds,Richard Stallman…… 历史的变迁,风云人物,*nix恩怨,历历在目,让我们一起再去看看那是怎样的岁月…

    ———————————————– 分割线 ———————————————————

        了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。 

         Unix是目前还在存活的操作系统的元老了,走过了40年的历程(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。在技术更新如此迅速的计算机世界的今天,Unix始终保持它那神圣的光环,它那曲折和令人叹息的历史,以及由它引发的思想变革,对当今计算机文化造成的深远影响,这40年所产生的人和事,让它成为了一个传奇,不能不让人为之惊叹。

        这是一段所有从事计算机行业人员尤其是软件开发人员需要了解的历史。Unix的传奇历史是整个计算机世界文化最具代表性的,它对整个计算机世界文化的影响也是最巨大,最深远的。他给人带来的不单单的对过去的回味,更为我们带来了计算机世界的新思潮。

        了解这段的历史的人,才能体会计算机世界变迁过程中的是是非非,才能了解计算机世界中的文化,从而才能参与到整个计算机革命的大潮中。希望这段历史,这篇文章能让你感受到计算机世界那强力的脉搏,从而让你踏上这条令人充满激情的道路。

    上篇

    • Unix起源
    • Unix分裂
    • Unix的法律纠纷
    • GNU开源组织
    • Linux横空出世
    • Linux今天的领袖

    下篇

    • Unix与黑客文化
    • Unix的历史教训
    • Unix 家族谱
    • Unix的特点
    • Unix的影响和哲学
    • Unix痛恨者手册

    阅读全文…

    HTTP GET数据传输图解

    2010年3月18日 admin 没有评论

    clip_image002

    分类: Linux 标签: , ,

    lighttpd爆慢连接DoS漏洞

    2010年2月2日 admin 没有评论

    LiMing大侠今日爆出lighttpd的慢连接DoS漏洞,利用该漏洞,可以在短时间(几分钟内)导致服务器内存耗尽挂掉,造成服务拒绝。

    官方的通报:lighttpd官方通报

    看了一下通报,漏洞的描述如下:

    If you send the request data very slow (e.g. sleep 0.01 after each byte),
    lighttpd will easily use all available memory and die (especially for parallel
    requests), allowing a DoS within minutes.

    如果以很慢的速度向lighttpd发送数据时(比如,每发送一个字节则sleep 0.01秒),lighttpd会很容易的内存耗尽而宕掉(尤其是在并发的请求),在几分钟内,就会造成服务拒绝。

    再看了一下通报,漏洞造成的原因如下:

    The problem is that is doesn't append to previous buffer but allocates a new
    buffer for each read; this means that for every received block (which could be
    only one byte) lighttpd may use either 4k or 16k.

     

    造成该Dos的原因是:发送给lighttpd的request,哪怕是一个byte,lighttpd都会为其分配一个4k或者16k的buffer来存储,而不是每次将该byte追加到原来分配的buffer中。

     

    根据官方的描述,lighttpd1.4.x版本,问题倒不是很严重,因为lighttpd每次会按需分配,即读到多少数据,就分配多大的buffer(前提是系统支持FIONREAD);但是如果系统不支持FIONREAD,那么lighttpd1.4.x同样会每次分配4k或者16k的buffer。

    而lighttpd1.5 就没这么幸运了,直接就分配16K的buffer来存储每次读到的数据。所以会很快的耗尽内存挂掉。

    注:Li Ming 大侠 report the issue,赞

    Thanks to Li Ming who reported the issue.
    
     Affected versions
    -------------------
    
    all versions before 1.4.26 / svn revision 2710
    
     Fixed in
    ----------
    
    1.4.x: http://redmine.lighttpd.net/projects/lighttpd/repository/revisions/2710
    1.5: http://redmine.lighttpd.net/projects/lighttpd/repository/revisions/2711

    高RTT值情况下提高短连接的传输速度

    2010年2月2日 admin 没有评论

    高RTT值的网络中 如何提高短连接的传输速度?

    • RTT扫盲:

    往返时间(RTT: Round-trip Time),一个TCP数据包从源端发送到接收端,源端收到接收端确认的时间间隔。

    • 怎么简单的看一下RTT是多少:

    ping一下对端机器,最后的time值其实就是这两台机器的RTT时间啦

    image

    • 好的,那我们现在看看,以短连接方式,传输1MB的文件,需要的时间吧:

    阅读全文…

    gvim使用

    2009年12月5日 admin 没有评论

    设置了字体后,发现再次打开gvim时,又使用了默认字体,原因是:

    我们需要将这些配置写入到配置文件_vimrc中,那么怎么知道当前的字体设置呢,在gvim中,输入

    :set guifont

    记住gvim的返回值,然后修改_vimrc,添加set guifont=YaHei_Consolas:h9:cGB2312

    阅读全文…

    分类: Linux, 大杂烩 标签:

    vim tips

    2009年8月18日 admin 没有评论

    写在前面:
    vim是一款相当出色的编辑器(或者已经超越了编辑器的范畴),现在觉得使用鼠标是件很麻烦的事。不由自主的会在word中按Esc,也会在UE中按:q,好奇怪
    下面主要介绍了vi最常用,也最有用的tips,比如”fx”命令找到当前行中下一个字母x,比如”`.”返回上次编辑的地方,比如”ma”插入一个标签a,并使用”`a”来返回到该标签,还有”shift+c”删除到行末并直接进入插入模式…. 阅读全文…

    分类: Linux 标签: ,