Linux, C, Shell, Python,虚拟化,云计算,开源社区,互联网 --Just For Fun. @ smilejay.com 笑遍世界

开始写本KVM的书籍

五 18th, 2012
45 views | 4 条评论

华章图书一策划在几个月前联系我关于写KVM书的事情,后来我想了一下也萌生了写本书的念头,3个月过去了,我断断续续研究讨论,今天终于和team里的两个牛人讨论,正式决定来一起写这本书了。在我原来自己写的目录等准备工作的基础上,今天讨论好了,基本的目录结构和内容,以及完成了工作的分工。
太好了,接下来,我就和出版社联系,尽快签完合同,正式开工吧。未来几个月的工作之余的时间又有了很好的消遣方法——就是写KVM的书籍。
我们将书名暂定为《KVM原理与实践》,尽管很土,不过也是算准确表达了本书的内容和写作的意图。
留此博客作为纪念,并鞭策自己努力做好这件事情。

man查询详解

五 16th, 2012
24 views | 没有评论

其实,很早前就想写一下关于man的使用的,尽管我们都觉得man命令很简单很好用。今天,我们的Intern同学还问到我有时看到一些man page里面提到诸如”EE ALSO _exit(2), setpgid(2), wait(2)”这样的信息中,括号里面的(2)是什么意思。所以,我就想再把man这里简单说明一下吧,当然男人(man)是很强大,更详细的信息,你可以”man man”来查看。

首先,man page中包括好几种不同的查询区域,如下是某Ubuntu系统中的说明:
The table below shows the section numbers of the manual followed by the types of pages they contain.
1 Executable programs or shell commands 可执行程序或Shell命令
2 System calls (functions provided by the kernel) kernel的系统调用
3 Library calls (functions within program libraries) 库函数
4 Special files (usually found in /dev) 一些特殊的文件
5 File formats and conventions eg /etc/passwd 文件的格式与惯例
6 Games 游戏
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 其他
8 System administration commands (usually only for root) 系统管理命令
9 Kernel routines [Non standard] 内核的例程
这里前面的数字就是前面提到的问题中的数字,man section search_item (这里可以指定到section区域去搜索man page)。
如果不指定section,则man工具会根据一个预先定义的顺序去查询你查找的东西。
那么这个预先定义的顺序是在哪里定义的呢? 阅读全文…

标签:

APUE编译问题解答

五 14th, 2012
38 views | 没有评论

记得刚毕业时那会儿才知道APUE的鼎鼎大名,那时由于工作环境并非基于Linux/Unix,仅凭自己兴趣,零零散散地看了APUE其中的一小部分。现在决定重新认真地看APUE,当然主要是看自己感兴趣的章节。(APUE:Advanced Programming in the UNIX Environment 一本经典的Unix/Linux编程书籍)

今天,简单地编译了一下线程(thread)这一章中的一个例子,遇到一些编译和链接的问题,这里解释和记录一下。

源代码请点击:threadid.c

编译和运行时,时可能遇到的现象为(这是我在Ubuntu10.04上面进行的): 阅读全文…

标签: , ,

Shell中的循环语句总结

五 7th, 2012
72 views | 没有评论

在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外,再把以前自己写过的相关内容整理一下吧。
这里包括for/while/until循环,以及变量自增的语法实例。

Shell(以Bash为例)中的循环语句一般有for、while、until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下。也为今后使用提供一个快捷的资料获取渠道。

1.for循环语句
实例1.1 最基本的for循环: (传统的形式,for var in …)

1
2
3
4
5
#!/bin/bash
for x in one two three four
do
        echo number $x
done

注:”for” 循环总是接收 “in” 语句之后的某种类型的字列表。在本例中,指定了四个英语单词,但是字列表也可以引用磁盘上的文件,甚至文件通配符。
实例1.2 对目录中的文件做for循环 阅读全文…

标签: ,

Xen添加一个hypercall

五 5th, 2012
98 views | 2 条评论

在Xen中,hypercall(超调用)是一个比较重要的概念;hypercall类似于system call,hypercall之于xen hypervisor就像系统调用之于Linux kernel.
在x86平台上,Xen中的hypercall是通过软中端(中断号0×82)来实现的。
在linux系统中添加新的系统调用,一般需要三个步骤:
1. 注册新的系统调用号
2. 更新系统调用表
3. 添加新函数

在xen中添加一个hypercall,也类似于在linux中添加一个系统调。下面简单介绍一下,如何创建一个自己的hypercall。
(添加一个hypercall的完整的patch在这里:add_hypercall.patch,可以用在最新的xen-unstable tree上。)

0.准备工作:获取xen源代码,以最新的upstream xen为例

1
2
hg clone http://xenbits.xen.org/xen-unstable.hg
cd xen-unstable.hg

也可以到如下网页去下载Xen hypervisor的tarball文件:

http://www.xen.org/products/xen_source.html

1. 注册一个hypercall调用号:xen/include/public/xen.h

1
2
3
 #define __HYPERVISOR_tmem_op 38
 #define __HYPERVISOR_xc_reserved_op 39 /* reserved for XenClient */
+#define __HYPERVISOR_hello_hypercall 39 /* add this temporarily; 39 is not used before */

2. 更新系统调用表:xen/arch/x86/x86_64/entry.S (若是32bit Intel平台,则是x86_32/entry.S)。 阅读全文…

/proc/$PID/stat详解

五 5th, 2012
84 views | 没有评论

在proc文件系统中有对每个进程维护一个目录/proc/$PID/,其中的/proc/$PID/stat文件展示了该进程的状态。
在某及其上的某进程状态如下

1
2
3
4
[root@vt-nhm9 ~]# cat /proc/7021/stat
7021 (gnome-session) S 6903 6874 6229 0 -1 4202752 3672 16747 60 30 6 3 14 5 20 0 2 0 3833 251568128 1572 18446744073709551615 4194304 4411596 140734229412352 140734229411488 265399685603 0 0 4100 83707 18446744073709551615 0 0 17 0 0 0 123 0 0 6508752 6536912 6537216
[root@vt-nhm9 ~]# uname -a
Linux vt-nhm9 3.4.0-rc4+ #1 SMP Thu May 3 14:53:37 CST 2012 x86_64 x86_64 x86_64 GNU/Linux

对/proc/$PID/stat的解释如下:(在最新的Linux kernel 3.4.0,在2.6.32中也是类似的)
第1列 表示进程的PID
第2列 表示进程的名称
第3列 表示进程的状态 (这里的S表示Sleep,关于进程的状态,可以后续再来篇博客介绍一下)
第4列 表示进程的PPID,即父进程的PID
……
第18列 表示进程的优先级
第19列 表示进程的nice值
第20列 表示进程的线程数量
第21列 (已被硬编码为0) The time in jiffies before the next SIGALRM is sent to the process due to an interval timer.
第22列 表示进程的启动时间,这个时间是用jiffies表示的从系统启动到进程启动的时间。The time in jiffies the process started after system boot.
……

我前面有文章“”用到了第22列(进程的启动时间),它的值需要除以$(getconf CLK_TCK)的值才能得到以秒为单位的(从系统启动到进程启动)的时间间隔。

/proc/$PID/stat的输出结构,可以在kernel代码的fs/proc/array.c文件中去查看。下面简单看一下array.c这个文件: 阅读全文…

标签: ,

/proc/stat详解

五 5th, 2012
77 views | 没有评论

/proc/stat 包含了系统启动以来的许多关于kernel和系统的统计信息,其中包括CPU运行情况、中断统计、启动时间、上下文切换次数、运行中的进程等等信息。
下面是/proc/stat的详细介绍。
首先,简单看一下我的一个例子,是某台机器上“cat /proc/stat”的输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@jay-linux ~]# cat /proc/stat
cpu  144785 736 27264 572442450 211861 0 27644 0 37276 0
cpu0 64002 205 9890 143113209 25717 0 669 0 10125 0
cpu1 46903 145 6459 143146481 4492 0 9209 0 10789 0
cpu2 21342 255 6379 143171105 2984 0 11614 0 9336 0
cpu3 12536 130 4535 143011653 178666 0 6150 0 7024 0
intr 5747797798 120 0 0 314 0 0 22414 0 30 0  (omitting much detailed data here)
ctxt 775230547
btime 1334713782
processes 113764
procs_running 1
procs_blocked 0
softirq 6821603634 0 1434450996 286467 4644713 2761958 0 242 1067645135 0 16846827

“cpu” 这行展示所有CPU在user-sapce、kernel mode上的一些时间,具体见后面的英文资料;接着是各个CPU的统计情况。
“intr” 这行 展示系统中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
的中断自系统启动以来所发生的次数。
“ctxt” 这行展示自系统启动以来CPU发生的上下文交换的次数。
“btime”这行展示从系统启动到现在为止的时间(以Epoch时间开始计算, 1970-01-01 00:00:00 +0000 (UTC)),单位为秒。
阅读全文…

标签: ,

/proc/uptime详解

五 4th, 2012
64 views | 没有评论

在Linux中,我们常常会使用到uptime命令去看看系统的运行时间,它与一个文件有关,就是/proc/uptime,下面对其进行详细介绍。

1
2
3
4
master@jay-intel:~$ cat /proc/uptime
6447032.12 48185264.69
master@jay-intel:~$ cat /proc/cpuinfo  | grep processor | wc -l
8

第一列输出的是,系统启动到现在的时间(以秒为单位),这里简记为num1;
第二列输出的是,系统空闲的时间(以秒为单位),这里简记为num2。

注意,很多很多人都知道第二个是系统空闲的时间,但是可能你不知道是,在SMP系统里,系统空闲的时间有时会是系统运行时间的几倍,这是怎么回事呢?
因为系统空闲时间的计算,是把SMP算进去的,就是所你有几个逻辑的CPU(包括超线程)。

系统的空闲率(%) = num2/(num1*N) 其中N是SMP系统中的CPU个数。

从上面我的一台机器上的数据可知,
本机启动到现在的时间长度为:6447032.12 seconds = 74.6 days
空闲率为:48185264.69/(6447032.12*8)=93.4%

系统空闲率越大,说明系统比较闲,可以加重一些负载;而系统空闲率很小,则可能考虑升级本机器硬件或者迁移部分负载到其他机器上。

Some docs from Redhat:
The first number is the total number of seconds the system has been up. The second number is how much of that time the machine has spent idle, in seconds. (Jay’s comments: Please pay attention to SMP system.)

标签:

Linux获取进程已经运行的时间

五 4th, 2012
73 views | 没有评论

在我们的系统中,我曾写了一个脚本去定时更新一些repository,但偶尔会遇到问题,比如:git pull之时可能会卡在那里(可能由于某时刻的网络问题),它会阻碍后面的下一次更新。
所以我就在想,我今后启动这个脚本时,进行检查,如果上次运行的脚本还没结束,而且过了某个时间阀值,就把它及其子进程给kill掉。然后,我就需要写了一个可以查询某个进程已经运行了多少时间(以second为单位)的脚本。
注意:这并不是是指进程消耗的CPU时间,这里是当前时间减去进程启动时的时间,是这个时间段。

本来,ps本身也提供了选项来查询的,但是比较直观和形象(如 10:32这样的),不是用seconds为单位,并不方便在脚本中直接使用。ps中的关于进程时间的命令如下:

1
2
3
[root@jay-linux jay]# ps -p 4260 -o pid,start_time,etime,comm
  PID START     ELAPSED COMMAND
 4260 Apr18 16-08:57:25 gnome-session

其中第三列的16-08:57:25就是进程运行的时间,为:16天8小时57分25秒。

我自己根据一些/proc文件系统中的信息,查询进程运行时间脚本分享如下:
阅读全文…

标签: ,

javascript中将”Enter”键转化为”Tab”键

四 24th, 2012
72 views | 没有评论

接着前面的说,对于第二个功能(javascript来实现Enter键变为Tab键的功能)。
其核心是对onkeydown这个事件进行更改。
1. 对于IE浏览器其实很简单,下面一句话即可搞定,在需要的地方使用即可。(对非IE浏览器不适用)

?View Code JAVASCRIPT
1
onkeydown=if(event.keyCode==13){event.keyCode=9}

2. 要支持非IE的Firefox、Chrome等浏览器,就需要写得稍微复杂一点
3. 对于一些hidden属性的,以及button/submit这种type的元素,是不要去将Enter转化为Tab的功能的(应该保持Enter键的原本功能)。

另外,在写的过程中,还涉及到了对对象非空判断,也做个笔记吧
Javascript脚本中判断对象为空,主要有如下三种方法:
1、 if (typeOf(x) == “undefined”)
2、 if (typeOf(x) != “object”)
3、 if(!x)
个人更喜欢第三那种if(!x),这个简单明了,不过请不要用if(x)来写对x非空的判断。
然后,JS中的空语句直接用一个分号表示(;)即可,在下面的实例代码中也用到了。

JS实现Enter键变为Tab键功能的简单代码如下:
阅读全文…

标签: ,

javascript中定位光标到指定的元素

四 24th, 2012
81 views | 没有评论

上周末时,一起上英语口语的Molly同学让我帮忙用javascript实现两个功能。
1. js弹出对话框确认后,将光标定位到制定的元素上;
2. js实现将表单填写时的”Enter”键转化为”Tab”键使用。
尽管很久没看Web方面的html和javascript了,我还是挺有兴趣玩一下的。
对于第一个功能,通过document.getElementById(“name”).focus();这样可以来设置光标的焦点;确认对话框可以用confirm()函数来做。
还是直接看下简单的代码吧。
阅读全文…

标签: ,

C和Java中的移位运算

四 20th, 2012
90 views | 没有评论

在很多语言(如:C和Java)中都提供了移位运算,它包括:左移运算和右移运算两种。
其中,左移运算(< <)比较简单和固定,X向左移k位,即是丢弃最左端的k位,并在右端补k个0。
而右移运算有两种类型,一种是叫逻辑右移,另一种是算术右移。X右移k位这个操作,在逻辑右移中,为舍弃最右端的k位,并在左端补k个0,而在算术右移中,它表示为在左端补k个最高有效位的值(可能是0也可能是1)。
在C语言中,右移运算统一表示为 X>>k,C语言标准没有明确定义应该使用哪种类型的右移。对于无符号数据,右移必须是逻辑右移。而对于有符号数据,算术右移和逻辑右移都可以。实际上,在多数的编译器和及处理器架构的组合中,对有符号数据使用算术右移。
在Java语言中,对两种右移类型有不同的表示,表达式X>>k表示将X算术右移k位,而X>>>k表示将X逻辑右移k位。
注:在IA架构下,左端表示高位,而右端表示低位。
分别写了下面两个C和Java的小程序来看右移运算。
阅读全文…

标签: ,

关于DNS的”Non-authoritative answer”

四 18th, 2012
159 views | 1 条评论

DNS_Logo

DNS logo


我用nslookup工具查询DNS之时,有时会出现“Non-authoritative answer“的情况。其现象如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@jay-linux ~]# nslookup google.com
Server:         192.168.199.3
Address:        192.168.199.3#53
 
Non-authoritative answer:
Name:   google.com
Address: 74.125.71.102
#省略后面关于google.com的输出
 
[root@jay-linux ~]# nslookup vt-master
Server:         192.168.199.3
Address:        192.168.199.3#53
 
Name:   vt-master.xx.yy.com
Address: 192.168.162.55

对其进行了简单了解,首先,我的理解如下:如果在/etc/resolv.conf中配置的nameserver不是直接管理被查询的域名,那么它就会返回”Non-authoritative answer”的结果,表示这不是我直接控制的域名(从cache中得到),所以返回给你的IP解析可能是错误的(也许是过期了的域名IP绑定)。如果在primary name server或者secondary name server直接有对被查询域名的IP绑定,那么返回的则是授权的(即没有“Non-authoritative”这样的标识)。
显然,google.com不是我的dns(192.168.199.3)这个管辖的范围,所以是”Non-authoritative answer”;而”vt-master.xx.yy.com”是我们的内部网络一台机器,它是在我查询的dns管辖范围之内的,返回的结果就是经过认证的。
阅读全文…

标签:

“bash: fork: Resource temporarily unavailable”的解决方案

四 17th, 2012
203 views | 没有评论

这两天,我登陆到一台服务器上,偶尔就出现”bash: fork: Resource temporarily unavailable”的提示,这是什么命令都不能用,但偶尔过一会就好了。前两天也没太在意,今天再次遇到,然后找到了根本原因。
当出现”bash: fork: Resource temporarily unavailable”时,一般来说是系统上的进程数量太多了,达到了命令”ulimit -u”的限制。(当系统进程达到限制后,kernel会自动kill掉一些进程,这就是好我过一会又能操作的原因了。)这种情况产生的原因,一是某个程序有bug,不断地fork新的进程消耗系统资源,二是可能中了病毒(恶意程序),比如所谓的fork炸弹。

我进行了如下操作:

1
2
3
4
5
6
[repo@vt-sync jay]$ ulimit  -u
1024
[repo@vt-sync jay]$ ps -ef | wc -l
1221
[repo@vt-sync jay]$ ps ux | wc -l
1020

发现当前用户下面居然有1020个进程,我仔细一看,很多的”vgt-sync.sh”之类的进程,这个shell脚本是我自己以前写的啊,里面有一个while的死循环,本来单独运行这个脚本是正确的,没有任何问题,但是我却把它配置到crontab任务中每小时都去运行,这样就会每小时都会新增一个vgt-sync.sh进程,随着时间的推移,本机上的进程就越来越多了,从而导致了上面的问题。
阅读全文…

标签: ,

GAE的肤浅尝试

四 13th, 2012
109 views | 没有评论

Google appengine logo

Google appengine logo


最初是看到一个关于GAE的一个活动,以前听说过,但是自己还真没用过,所以打算看一下helloworld之类的例子,然后看明天也去那边听听,了解一下GAE中Python开发。
那个活动:http://gae.51qiangzuo.com/

首先,我只是向很多人那样,搞个免费的走出景德镇的东东,然后果然可以正常浏览facebook、twitter、youtube了,最重要的是google.com不要莫名的断掉。
那个项目叫做:goagent,在http://code.google.com/p/goagent/,下面是一些前人配置这个东西的文档,
windows上: http://maolihui.com/goagent-detailed-version-of-the-tutorial.html
Mac or Linux上: http://maolihui.com/goagent-mac.html
总之,还好,我是一气呵成,比较正常的就搞定了。
自己用firefox上的autoproxy吧,这样方便走出景德镇。

另外,使用Python开发GAE,安装python是必须的,注意GAE目前只支持python2.5~2.7,还不支持python3.x,所以我得重装我的Python(我以前是3.2版本)。
下载python:http://python.org/getit/ (别人都专门为景德镇人民做了一个下载页面,因为通用的下载页面已经被屏蔽)。
原本通用的下载页面是:http://python.org/download/
另外,通过这个下载也是可用的:http://python.org/ftp/python/
安装好Python后,记得配置好环境变量哦。

Google的AppEngine在这里下载:https://developers.google.com/appengine/downloads
GAE的python开发入门:https://developers.google.com/appengine/docs/python/gettingstartedpython27
自己的AppEngine在这里:https://appengine.google.com/

标签:

Python实现十六进制与十进制的转换

四 10th, 2012
187 views | 没有评论

起源于看到《深入理解计算机原理》里面的用于转化16进制数的一小段perl脚本,于是我就写了一个Python来实现十六进制与十进制之间的转换。
主要用到的东西有:
1. int(x[, base]) -> integer #这是一个builtin的类
Convert a string or number to an integer, if possible.
如:int(“0×11″, 16)就可以将十六进制的”0×11″转化为10进制的数字,再如int(“100011″, 2)可以转化二进制的数为十进制整数。
2. hex(number) -> string #将一个整数转化为一个十六进制的字符串
Return the hexadecimal representation of an integer or long integer.
3. sys.argv
The list of command line arguments passed to a Python script.
for i in sys.argv[1:] 即可遍历所有的命令行参数(除运行的脚本名之外)。
阅读全文…

标签:

Makefile “multiple target patterns. Stop.”解决方案

三 30th, 2012
274 views | 没有评论

几天在帮一个同事编译Xen中的tools时,我改了一些config文件,然后就遇到了一个错误“Makefile:72: *** multiple target patterns. Stop.
花了大约半个小时才找到了这个错误是自己写错了一个配置的原因,将其过程及其根本原因说一下。

总的来讲,“mutiple target patterns”这个错误,一般是由于Makefile中target那一行有多余的冒号(:)(我们知道冒号在Makefile中的用来标识前面是一个编译的目标),如果有多余的冒号就会报错。
有一个简单有效的方法去排查这个问题,就是自己另外定义一个目标,将抱错行的信息全部打印出来看看是否有多余的冒号。

我所遇到的错误那一行如下:
roms.inc: $(ROMBIOS_ROM) $(SEABIOS_ROM) $(STDVGA_ROM) $(CIRRUSVGA_ROM) ../etherboot/eb-roms.h
由于里面依赖到了4个变量,而且其中几个变量并不是在这个Makefile中直接定义的,所以找起来有点麻烦。我就在Makefile中添加了一个target将这个变量打印出来看看那,添加的Makefile代码如下:

1
2
3
4
 mydebug:
          echo "/* just for debugging in Makefile */"
          echo "$(ROMBIOS_ROM) $(SEABIOS_ROM) $(STDVGA_ROM) $(CIRRUSVGA_ROM)" > /tmp/debug-makefile.log
          echo "/* END for debugging in Makefile */"

然后将原来出错的那一行注释掉,然后运行”make mydebug”,之后去看一下/tmp/debug-makefile.log文件,我就发现这里的$(SEABIOS_ROM)变量中含有非法的冒号字符,它的值为:git://vt-sync/seabios.git/out/bios.bin
再继续寻找,我就发现,我在一个Config.mk中写有“SEABIOS_DIR ?= git://vt-sync/seabios.git”这样的失误。
阅读全文…

标签: ,

Windows中设置CPU数目和内存容量

三 29th, 2012
158 views | 没有评论

这两天在看Windows 8(测试版)在作为Xen Guest中的benchmark测试。我遇到的一个问题是,比如我的系统有32个CPU和32GG内存,而在Xen环境中,Dom0总是需要一定的CPU和内存消耗的吧(我分给Dom0 2个CPU和2G内存),而不在虚拟机环境中,Windows系统如何限制它使用的CPU和内存的数量呢?(比如我的例子中,我想限制为Windows启动时只使用30个CPU和30GB内存)
下面就介绍Windows中对启动的CPU数量和内存容量的配置(在Win7和Win8两个系统中试过,在Windows XP应该也适用)。

Windows设置启动后使用的CPU个数:
开始 -> 运行 -> “msconfig”命令 -> boot(启动)-> advanced options(高级选项)-> numbers of perocessors(处理器个数)

设置启动时初始化的内存容量:
开始 -> 运行 -> “msconfig”命令 -> boot(启动)-> advanced options(高级选项)-> Maximum memory(最大内存)

注意这里CPU的个数最大值为实际拥有的逻辑CPU数量;内存容量的最大值为实际物理内存的容量。

标签: ,

xl info (xm info)详解

三 29th, 2012
111 views | 没有评论

Xen系统中,在其Dom0中,我们可以根据xl info(或者较老的xm info)命令来查看硬件和Xen Hypervisor的各种信息。
下面是我平时测试中的xl info的输出,对其中每一项都做了简单的注释,是自己的一个笔记,希望对Xen用户有所帮助。(对于其中几个我目前拿不准的项,我用FIX ME来标识了。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@vt-snb7 ~]# xl info
host                   : vt-snb7     #Dom0的主机名
release                : 3.1.0-rc7+   #Dom0的内核版本
version                : #1 SMP Mon Mar 26 09:34:05 CST 2012  #Dom0内核编译的时间
machine                : x86_64     #Dom0内核运行的平台
nr_cpus                : 32         #系统中的逻辑CPU数量
max_cpu_id             : 127        #host中可能的最大的CPU编号
nr_nodes               : 2          #NUMA节点的数量
cores_per_socket       : 8	    #每个CPU socket上的core数量
threads_per_core       : 2          #每个core的线程数量(大于1即是超线程)
cpu_mhz                : 2693       #CPU的主频
hw_caps                : bfebfbff:2c100800:00000000:00003f40:15bee3ff:00000000:00000001:00000000 
       #CPU的capabilities,实际上同于/proc/cpuinfo中的flags,是其的另外矢量编码之类
virt_caps              : hvm hvm_directio     #硬件系统关于虚拟化的feature,目前只定义了hvm和hvm_directio(即:VT-d)
total_memory           : 32726		#硬件系统的中的内存
free_memory            : 22803		#空闲的内存(未被guest和hypervisor使用的)
sharing_freed_memory   : 0			# FIX ME
sharing_used_memory    : 0			# FIX ME
free_cpus              : 0			# FIX ME
xen_major              : 4			#Xen的主版本号
xen_minor              : 2			#Xen的次版本号
xen_extra              : -unstable		#Xen的附加版本号
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64		
	#Xen的capabilities,支持32位和64位的PV和HVM虚拟机
xen_scheduler          : credit			#当前Xen的CPU调度算法
xen_pagesize           : 4096			#Xen一次块设备上读取数据的大小,单位是bytes
platform_params        : virt_start=0xffff800000000000		#从这个地址之后就是hypervisor占用的
xen_changeset          : Fri Mar 23 20:51:48 2012 +0000 25099:4bd752a4cdf3	#Xen的changeset
xen_commandline        : dom0_mem=2048M iommu=1 loglvl=all guest_loglvl=all msi=1 hap_1gb=1 conring_size=4M
       #grub中xen启动时的命令行
cc_compiler            : gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)   #本次Xen hypervisor的编译器
cc_compile_by          : build			#编译Xen的用户名
cc_compile_domain      : sh.intel.com	        #编译Xen的机器的所在的域
cc_compile_date        : Mon Mar 26 09:30:56 CST 2012	#编译Xen的时间
xend_config_format     : 4	#配置文件的格式,目前是4,对xl已经不太重要了,XL不用Xend了

需要注意的是: 阅读全文…

“早睡早起” Yes, I Can.

三 23rd, 2012
159 views | 没有评论

早睡早起
早睡早起,身体好! 这个道理,大家都懂的。

昨晚在看写一些KVM的一些目录(有写本KVM书籍的打算),所以到凌晨1点才睡觉,就8点才起床,去公司上班感觉都比我平时晚了30分钟左右。另外,晚上睡觉时,太晚了,错过黄金睡眠时期,身体上也感觉很不爽的。我老念叨着要“增肥”,但是如果不能早睡,那么增肥似乎只能成为空谈。

记得我以前看过,有专家说是晚上11点到第二天凌晨1点是睡觉的黄金时期啊,尽量保证这里的休息时间。
我觉得,现在早点睡吧,要是有事情做,就早睡早起吧。
如果想工作、学习、看书之类的,可以早上6点多就起床来啊,估计早上效率更高。另外,我也认为,如果都是睡7个小时,我从11:30到06:30这段时间睡觉,一定会比从01:00到08:00这段时间的效果要好的,符合正常人体的生物钟规律。

不能让神马工作忙、看电影、上网等成为我晚睡的借口。
不要为晚睡找借口,要为早睡找理由!

我会尽量做到12点前睡觉了,有事情明早早点起来接着做就是了。
请大家监督我,我也会时刻提醒自己。

标签: