Friday, October 30, 2009

程序员十月刊阅读随想

从公司借阅了10月刊的程序员杂志,从08年以后,我已经很久没有看过这本杂志了.越来越多的商业广告和充斥满眼的宣传炒作渐渐感觉背离了这样一本杂志的初衷...

这次翻阅倒也是因为March Liu大侠正在研究的ORM之上的语义网数据库模型,个人很感兴趣。于是找来原文围观下,有空的话发一篇随笔上来吧:)

言归正传,本期程序员的前半部分讲了很多关于云计算的厂家宣传,后半部分又介绍了不少国内的虚拟化实践:综合来看,验证了个人对云计算未来物理基础的认识和判断----虚拟化.除了企业IT总体拥有成本之外的考量,虚拟化可以在现有物理机器之上虚拟出大量的node,在软件层面上实现分布式计算,负载均衡等架构技术从而实现系统的健壮,Scalability等特性。而且工业界目前的商业云计算案例似乎也都是构建在虚拟机堆栈之上的,比如Amazon S3.

说道AWS,那还得说说Microsoft的云计算计划Azure,在RDB方向上的发力以及早期具备的API-Entry访问模式使其具有双重DB性质.这点似乎已经成为了数据库云计算方面的领跑者.同时看到微软近期对PHP的大力支持,是否可以认为是微软加大对互联网方向的投入和关注的信号呢?

哦,今天知道了MTK的OS是nucleus...

最后来谈谈关于开放平台的事情。现在越来越多的厂家开始在自己的路线图里出现API和SDK这样的字眼,那么构建开放平台到底是为了什么呢?

一如Apple的App Store通过开放平台来实现产品销量的增加;另一如saleforce通过平台来卖软件获得收入.

其实,个人以为开放平台的构建说到底还是为了更好的增加产品竞争力,实力强大的通过开放来统一产业链;实力弱小的通过开放来增加生存空间和砝码。

Monday, October 26, 2009

Shell脚本收集

清除当前目录下所有emacs的临时文件
  • find . -iname '*~' | xargs rm -f
添加 当前目录下所有未进入版本库的文件
  • svn st| tr '^\?' ' ' | xargs svn add

虚拟化技术漫谈

虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅 局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能 顺利执行。

虚拟化的历史:
  • 硬件虚拟化,分时系统 IBM System/360
  • 处理器虚拟化,现在程序语言的虚拟里VM
  • 指令集虚拟化,指令集转换
  • 库级虚拟化,例如PC平台上的某些街机模拟器
VMM 调度虚拟机时,将其部分状态恢复到主机系统中。并非所有的状态都需要恢复,例如主机 CR3 寄存器中存放的是 VMM 设置的页表物理地址,而不是 Guest OS 设置的值。主机处理器直接运行 Guest OS 的机器指令,由于 Guest OS运行在低特权级别,当访问主机系统的特权状态(如写 GDT 寄存器)时,权限不足导致主机处理器产生异常,将运行权自动交还给 VMM。此外,外部中断的到来也会导致 VMM 的运行。VMM 可能需要先将 该虚拟机的当前状态写回到状态数据结构中,分析虚拟机被挂起的原因,然后代表 Guest OS 执行相应的特权操作。最简单的情况,如Guest OS 对 CR3 寄存器的修改,只需要更新虚拟机的状态数据结构即可。一般而言,大部分情况下,VMM 需要经过复杂的流程才能完成原本简单的操作。最后 VMM 将运行权还给 Guest OS,Guest OS 从上次被中断的地方继续执行,或处理 VMM “塞”入的虚拟中断和异常。这种经典的虚拟机运行方式被称为 Trap-And-Emulate

VT-x 为 IA 32 处理器增加了两种操作模式:VMX root operation 和 VMX non-root operation。VMM 自己运行在 VMX root operation 模式,VMX non-root operation 模式则由 Guest OS 使用。两种操作模式都支持 Ring 0 ~ Ring 3 这 4 个特权级,因此 VMM 和 Guest OS 都可以自由选择它们所期望的运行级别。 这两种操作模式可以互相转换。运行在 VMX root operation 模式下的 VMM 通过显式调用 VMLAUNCH 或 VMRESUME 指令切换到 VMX non-root operation 模式,硬件自动加载 Guest OS的上下文,于是 Guest OS 获得运行,这种转换称为 VM entry。Guest OS 运行过程中遇到需要 VMM 处理的事件,例如外部中断或缺页异常,或者主动调用 VMCALL 指令调用 VMM 的服务的时候(与系统调用类似),硬件自动挂起 Guest OS,切换到 VMX root operation 模式,恢复 VMM 的运行,这种转换称为 VM exit。VMX root operation 模式下软件的行为与在没有 VT-x 技术的处理器上的行为基本一致;而VMX non-root operation 模式则有很大不同,最主要的区别是此时运行某些指令或遇到某些事件时,发生 VM exit。

实战虚拟化技术之Xen

Xen是由剑桥大学开发的VMM.这里简要记录下安装过程中的几个问题:
使用egrep '(vmx|svm)' /proc/cpuinfo 检测处理器是否支持虚拟化.
如果不支持的话那么很遗憾,只能使用全虚拟化.
接下来,按照手册的说明文件:
make world
make install
然后修改grub的引导,使xen支持的内核可以启动,重启服务器.下面就可以体验xen了

Thursday, October 22, 2009

实战虚拟化技术之VMware Server

在虚拟化技术方案中,最耳熟能详的莫过于VMware的产品了.其桌面端VMware Workstation让很多人体验了虚拟机的快感.在服务器虚拟化领域,它的对应产品就是VMware Server.
本文主要描述了我在虚拟化方案技术选型中对Vmware Server考察的过程.

测试环境
  •  Machine :Dell PowerEdge R200 Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz
  •  HostOS: CentOS 4.5
  •  Kernel: Linux2.6.9-89.0.11.EL
  •  Memory:2GB
  •  Software:Vmware Server 2.0.1
从Vmware官方下载二进制安装包,执行vmware-install.pl.根据提示输入你的实际参数,一般情况下直接默认就可以了.安装的最后会提示你是否运行vmware-config.pl.你可以选择yes,接下来如果遇到内核模块支持错误提示的话,可以放狗去搜对应内核模块的vmware-patch.我使用的CentOS4.5倒是没有这个问题.

一切完毕之后,就从浏览器输入服务器ip:8333进入VMware Infrastructure Web Acess,你会发现这和workstation版本几乎没有什么区别.接着就是新建虚拟机了:

 .
我配置的虚拟机参数Memory 256MB;Core 1;HDD 8G,由于使用场景的不同,我很关注I/O效率.所以特意做了一些实验,结果如下:

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.00    0.00    2.00   25.00   73.00
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          0.00  86.00  0.00 37.00    0.00 32800.00     0.00 16400.00   886.49     6.08  566.00   6.89  25.50
dm-0         0.00   0.00  0.00 88.00    0.00  704.00     0.00   352.00     8.00   703.14 27351.68   2.89  25.40
dm-1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

总体来看.Vmware Server门槛较低,交互界面相对统一;对服务器几乎没有硬性要求.部署方便容易,磁盘镜像可复用.
对于测试型场景来说,性能完全可以满足需求.

Tuesday, October 20, 2009

Emacs Advanced Guide - Chapter 1

子曰 "学而时习之" 


HotKey for Copy & Paster
  • C-@ C-W  剪切
  • C-Y      粘贴
  • C-@ M-W  复制

HotKey for Delete
  • C-D      删除后一个字符
  • C-BK     删除前一个字符
  • C-K      删除到行尾
  • M-D      删除后一个字
  • M-K      删除到段尾
  • C-@      标记起点
  • C-W      剪切到缓冲区
  • C-X U    Undo


HotKey for Cursor
  • C-F       后进一位
  • C-B       前进一位
  • C-N       下一行
  • C-P       前一行
  • M-F       下一个字
  • M-B       前一个字
  • M-A       段首
  • M-E       段位
  • C-A       行首
  • C-E       行尾
  • C-V       上一页
  • M-V       下一页

Monday, October 19, 2009

linux下使用vpn的方法

公司的开发服务器使用VPN连接,在Windows下面直接使用ppoe就可以了,但是在Liunx下面并不一样.这里将我的配置过程记录一下.

由于我所使用的环境是Fedora,所涉及到的软件这里全部采用yum方式安装.
首先需要保证系统上安装pptp的相关软件:

#yum install NetworkManager-pptp

这样你就可以在Gnome Network Manager里面去添加VPN连接了,注意选择PPTP:



下面进行连接配置:
  • Connection Name:随便填写,方便自己即可
  • Gateway: vpn连接的ip或者域名
  • User Name:用户名
  • Password:连接的密码


在Apply之前,点击Advanced,勾选Use Point-to-Point encryption(MPPE),然后OK



到这里,你可以尝试下选择NetworkManager里面的VPN Connection,如果连接成功的话,那么恭喜了;如果失败的话,没关系,我们继续:
很有可能你的VPN连接默认会使用EAP来做认证,但在NetworkManager不能 disable EAP的认证,需要使用gconf-edit才行,在你的终端中输入gconf-editor.

#gconf-editor
然后选择system->networking->connetions,找到子项有vpn连接的数字,在右边新建key,内容如下:


最后,连接到你的vpn服务器吧.