KVM的搜索结果

iMacros工具用法介绍

iMacros是作为浏览器的插件,通过录制对网页的操作,然后进行回放,这样可以避免大量的重复性的劳动;目前已支持Firefox、Chrome和IE,我试用了一下Firefox的插件,感觉还挺方便的,与类似12306的刷票插件的原理基本是一样的,不过iMacros提供了自己的脚本,你可以直接图形界面录制,当然你也可以通过自己修改脚本来进行录制并回放,是实现浏览器自动抓取的利器。

本文主要介绍iMacros的基本用法,最后以一个比较的小的例子作为说明。

安装

1. Firefox插件下载地址:这里

2. Chrome插件下载地址:这里

使用

安装完成后,你会看到增加了这个图标,然后点击该图标,你就会看到iMacros展开的样子



可以看到上面一栏是对应的脚本,下面分为三栏:“运行”, “记录”, “编辑”

  • “运行”: 选中某个录制的脚本,点击运行,就会回放对应的操作
  • “记录”: 点击“记录”按钮,此时iMacros会开始录制你再浏览器上做的操作,然后会保存在Current.iim脚本中,比如我首先打开baidu.com, 并点击录制,然后输入”firefox imacros”搜索,最后“停止”;
  • “编辑”:选中“Current.iim”文件,选择“编辑宏”按钮,你会看到如下的内容:
VERSION BUILD=8300326 RECORDER=FX
TAB T=1
URL GOTO=http://www.baidu.com/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:kw CONTENT=firefox<SP>imacros
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:f ATTR=ID:su

上述脚本的大致意思:

  1. “URL GOTO”: 进入该页面
  2. “TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:kw CONTENT=firefoximacros”:在input表单中输入”firefox imacros”, 这里主要是TAG这个命令,选中html中该标签,可使用TYPE, ATTR, FORM进一步指定,最常用的一个命令,详情点击这里
  3. “TAB T=1″: 在第一个标签中打开URL, “TAB OPEN”在新的标签页打开,详情
iMacros中其它比较常用的命令
  • 变量赋值SET: SET today {{!NOW: dd-mm-yyyy}} 将当前的日期赋值给today这个变量,后续通过{{}}来引用该变量
  • WAIT SECONDS=3: sleep 3s.
  • 填充表单:使用TAG命令, 同时增加CONTENT选项即可:
    TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=ID:SearchWord CONTENT={{today}}
  • 提取文本:TAG+EXTRACT 如
    TAG POS=1 TYPE=TD ATTR=TXT:当页汇总 EXTRACT=TXT
  • 模拟点击:比如要点击一个超级链接,同时知道其anchor,则就非常简单:
    TAG POS=1 TYPE=A ATTR=TXT:入口页面
  • 保存提取的文本到文件:在提取文本后,其内容会自动添加到EXTRACT变量中,你可以通过ADD或者SET命令来修改{{!EXTRACT}}这个变量,最后通过SAVEAS来保存提取的文本,以逗号分隔
    SAVEAS TYPE=EXTRACT FOLDER=D:\ FILE=report_{{yestoday}}.txt
  • 读取文件数据:有些情况下,比如要搜索大量的query,此时你就需要使用数据文件,然后使用{{!COL1}} {{!COL2}}来访问对应数据的列,默认列是以逗号进行分隔
    SET !DATASOURCE d:\datasource.txt
    SET !DATASOURCE_COLUMNS 2
    最后运行时要点击”播放(循环)”按钮,否则只会执行一行就会退出了,同时设置最大的行数

google早期的索引结构介绍

最近一直在做索引压缩方面的事情,无意中看到了Jeff Dean大牛分享的google早期的索引结构,对于我们这种刚刚起步的搜索公司,还是很有启发意义的,收获还是比较大,所以就简单记录下。

1. 索引压缩常用的压缩算法

淘宝的一篇技术blog分享了一些比较常用的压缩算法:

  • varint (变长压缩): 字节对齐,压缩比不高
  • group varint: 变长压缩的变形,比varint的解压速率高很多,这里有它的实现
  • Gamma:  对比较小的数字压缩比会比较高,将数值分为两个部分: 一元编码(num_bits)+二进制编码
  • Simple9 + simple16: 对于32bit的空间进行组织,可存储多个数值
  • PForDelta + NewPForDelta: 比较新的压缩算法,压缩比和解压缩比都比较高效,适合于docid_delta的压缩

关于这些算法的相关介绍可以看下www.wikipedia.org,或者搜下对应的paper.

2. Google的索引结构

索引结构

可以看到,对于token的doclist是以Block的方式进行组织的,如果doclist比较长,还会使用skip table来快速查找;

Block的组织方式:

a. block header:  使用变长存储与上一个block的delta, 并存储block 实际的存储长度(可能是作为验证)

b. 第二行使用Gamma来压缩编码类型及在block中出现的docs的数目(因为这些数值都比较小)

c. 使用Rice压缩对应docld delta, 其实这里可以使用比较新的压缩算法PFDelta,更高效一些

d. 使用Gamma来压缩对应token在doc中出现的frequence, 即hit的数目

e. 使用length-limit Huffman 来存储Hit Attribute信息,这里主要是利用Attribute的重复的比例会很高,也就是说大部分hit  attribute

都会是相同的,所以用到了Huffman压缩,然后对length进行了限制

f: positions用Huffman-Int 来压缩位置信息,由于position分布不确定性很多,对position的压缩一直是业界的难题,压缩比不会很高。

Huffman-Int : 类似于Gamma压缩,但是对于一元编码部分,使用了Huffman code.

优化

这里其实可以将doclist和hit 信息进行分离存储,因为只有在打分的时候才会用到hit的相关信息,访问次数会比较少,而doclist就会访问比较频繁

可以对其进行Cache,这样Cache命中率会更高一些

2012xiao结

今天是腊月二十六,还在公司上班,看来今天是没有可能码代码,就静下心来回顾下2012年,看了前两年的总结,虽然只有寥寥几行,但是回味起来还是挺有味道的~ 所以记录下2012发生的事,算个总结吧!

关键词:毕业

2012.07.01正式从ICT毕业,正式结束了自己的学生生涯,也算是比较顺利;

从2月份过年回来,被拉去封闭开发了一段时间,大概有一个月的时间,那段时间也算是见识了下大场面,还被领导人接见了下哈~

之后回来开始搞毕业论文,这里也晒下毕业论文的题目:面向网络仿真的虚拟化网络IO优化研究与实现,是基于KVM虚拟机做的二次优化,加上研究生之前的工作和周大神的帮助,最后论文完成的比较顺利,顺利通过了论文的答辩,据说最后还被评为优秀毕业论文,哈哈,也算是最自己研究生三年的一个交代了~

回顾三年的研究生生涯,学术上没有啥成果,最后连一篇论文都没有发表,技术了稍微有些提高吧,接触了一些开源的项目的,但是比较遗憾的是没有专注于在上面,纯属打酱油状态,最后的收获就是认识了猛爷,彪爷和韬爷三位同学,现在韬爷已经飘洋过海,猛爷和彪爷最后就职于某靠谱的互联网公司,当然是希望韬爷以后带领我们完成屌丝的逆袭了。

关键词:工作

2012我也正式参加工作,最后去了一家伪互联网公司,提前了一个月去公司实习,提前熟悉环境,最后看来这个决定还是比较明智的,后面批量入职的同学都要被bt新人练习题折磨近一个月的时间,主要负责的工作是搜索引擎检索模块,还算比较靠谱;没过多久,公司来了位大牛,公司部门调整,我很荣幸的被分配到了该大牛的手下,作为我们这些刚走出校门的学生来说,真的是比较荣幸,同时我们陆续开始接手相关模块,开展相关工作,那段时间工作压力真的挺大,成长也比较快,松爷把威廉张的十六字口诀送给了我们:”想得仔细,说得清楚,写得精确,做得有力“,真正做到这16字很不容易。

好景不长,两个月后松爷就闪人了,其中也有各种原因, 留下了我们这些小兵,最后组里来了个吉大的校友继续领导我们,当前JOJ排行榜NO1, 我们的工作也没有受太多影响,继续推动着。

总得来说,工作半年多,还算比较适应,工作也算比较顺利,来年继续努力吧~~

关键词:生活

今年和小芳邓 只是在五一的时候回了趟母校,参加了下同学聚会,大家都变化不大,吃到了久违的菜煎饼,哈哈!

十一的时候又去了趟大城市铁岭, 商讨结婚事宜;别的地方好像就没去了,我印象中好像是没去,这个只能明年补上了~

关键词:2013

2013估计俺就该结婚了,结婚对象当然是小芳邓同学了,顺便可以度个蜜月;

希望工作顺利,技术上有比较大的成长;

sheepdog1

sheepdog源码学习笔记一

最近这两天一直在看sheepdog的源码,有关sheepdog的用法,请参考我的另一篇博客:KVM分布式共享存储解决方案-sheepdog 总的来说,sheepdog的代码量不是很大,在一万行左右,比起其他的分布式文件系统如kfs,ceph等还是比较轻量级的,而且定位也是针对qemu/kvm等volume的解决方案.

sheepdog原理介绍

1. sheepdog是作为虚拟机kvm的volume使用的,是非普通的文件系统,这点和Amazon的EBS(Elastic Block Store)比较类似

2. sheepdog是一种对称(symmetric)的结构,各个节点的地位相同,没有中心节点,没有meta-server,使用Corosync 对物理节点进行管理

3. sheepdog中的对象存储分为两类,其一是One reader One Writer 其二是No writer multiple reader 而且对象是4M大小分片的,使用“一致性哈希”算法来确定对象存储位置,多副本存储

sheepdog的代码结构

./collie/treeview.c
./collie/collie.c
./sheep/vdi.c
./sheep/store.c
./sheep/sdnet.c
./sheep/work.c
./sheep/sheep.c
./sheep/group.c
./lib/logger.c
./lib/event.c
./lib/net.c

sheep目录下是有关sheepdog的大部分逻辑的处理,部署在各个节点上
collie目录是作为管理管理sheep的代码
lib目录下是关于网络、日志和事件等处理模型
…..
今天暂时写到这里……待续

1

KVM可扩展性测试报告

KVM可扩展性测试报告

by yaonli(http://www.yaronspace.cn/blog)

测试设计

对KVM虚拟机可扩展性测试,主要是指随着虚拟机的数量的增加,虚拟机的在CPU利用率、内存使用、磁盘IO和网络IO的性能是否表现良好,最后能够给出在物理机一定硬件条件下,可运行的虚拟机的数目的最佳指标。

在具体的设计方案上,在物理机上分别启动1到16个虚拟机,然后从CPU利用率、磁盘IO和网络IO三个方面进行分析,这里需要说明下没有测试内存使用的情况的原因:针对KVM来说,分配给虚拟机的内存大小是事先指定,加入分配512M内存,则虚拟机的物理内存就是512M内存,分析意义不大;

1,  CPU利用率测试上

在测试虚拟机CPU利用率方面,主要是CPU密集型的软件进行测试,计算最终的执行时间;例如内核的编译或者bzip2对大文件进行压缩,都是CPU计算性。本次测试选用bzip2 对1.8G的镜像文件进行压缩,计算最终的执行时间。

date+%s.%N && bzip2 –9 windows_2003_server.img && date +%s.%N

2,  磁盘IO测试

测试磁盘IO的话,我选择用的是Bonnie++ 软件,并发地从虚拟机1台到16台的进行测试,执行命令如下:

./bonnie++ -d ~/test –s 1000

3,  网络IO测试

鉴于如果使用网卡类型如rtl8139或者e1000,效率非常低,所以本次测试网卡类型都是基于virtio网卡类型,然后并发地从物理机到1到16台虚拟机进行并发通信,主要是利用nertperf软件进行测试.

测试环境

物理主机硬件配置

1,  8核Intel(R) Xeon(R) CPU           E5410  @ 2.33GHz

2,  16G内存

3,  1.4T硬盘

4,  千兆以太网卡

物理主机的软件配置

1,64Bit CentOS 5.3  2.6.18-128.el5

2,kvm-88

虚拟机分配的硬件配置

1,  单核CPU

2,  512M内存

3,  Virtio 网卡

4,  qcow2 format 增量镜像

虚拟机的软件配置

1,8.04 ubuntu系统

更多 >

KVM分布式共享存储解决方案-sheepdog

介绍

今天在调研分布式文件系统时,非常偶然的机会看到sheepdog ,然后接着又看到KVM这个关键字,让我异常兴奋,这不是我一直在找的KVM镜像存储的分布式存储系统吗,原来KVM/Qemu最近已经开始对其进行了开发,并在Qemu 0.13.0版本后加入了与sheepdog的支持,太佩服国外的开源贡献者。

sheepdog(牧羊犬) 官方网站:http://www.osrg.net/sheepdog/

Sheepdog is a distributed storage system for KVM. It provides highly available block level storage volumes that can be attached to KVM virtual machines. Sheepdog scales to several hundreds nodes, and supports advanced volume management features such as snapshot, cloning, and thin provisioning.

安装步骤

1,环境准备

corosync-1.3.0.tar.gz sheepdog-0.2.0.tar.gz

2,安装corosync

corosync 是linux 集群管理的引擎,具体请参看官网

$ tar -xzvf  corosync-1.3.0.tar.gz
$ cd corosync-1.3.0
$ ./autogen.sh
$ ./configure
$ sudo make install

3,qemu 0.13的安装 (略)

4,sheepdog安装

$ tar -xzvf sheepdog-0.2.0.tar.gz
$ cd sheepdog-0.2.0
$ ./autogen.sh
$ ./configure
$ sudo make install

这时可能会出现linux/signalfd.h 这个文件找不到,以及后续会出现signalfd undefined reference 的错误,我的系统是CentOS ,出现了这种错误,出现这种情况的话,我简单的解决方法是对signalfd进行模拟,这点我参考了qemu的有关实现,
具体是在sheep/work.c中加入以下代码:
代码太长,我贴到最后了,请参看附件

5,sheepdog的具体使用

1> 配置/etc/corosync/corosync.conf
mv /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
同时修改,bindnetaddr字段为自己的ip地址,mcastaddr(怎么修改暂时不清楚,应该是广播的地址,保持默认值即可)
2> 启动corosync
# corosync {注:需要是root账户}
3> 如果是ext3文件系统,需要加入user_xattr

     mount -o remount,user_xattr /

4> 启动Sheep

      # sheep ~/store_dir  <span style="color: #ff6600;">#不能是相对路径,相对路径会出错</span>
      # collie cluster format --copies=3

5> 查看状态

      # collie node list
      # collie cluster info
      # colli vdi list

6> 创建镜像

        # qemu-img create sheepdog:Alice 256G
        # qemu-img convert ~/amd64.raw sheepdog:Bob

不过我在Convert时一直提示不成功,error while writing
查找原因:通过查看sheep.log日志文件,可以发现时由于Too Many open files 错误提示,原来是打开太多文件所造成的,因为sheepdog对文件进行4M进行分片的,这样会导致大量的文件打开,而一般的系统进程最多的文件数是1024 所以就这个错误!
解决方法:ulimit -n 4096 {或者更大的值} 这样修改只是在目前会话中有效,需要长久生效,请参看这篇文章

总结

sheepdog作为一个新的项目,感觉还是挺不错的,刚好弥补了开源虚拟化中有关镜像存储的问题,为后续的虚拟机迁移做准备,目前sheepdog暂时还未支持migrate ,不过看它的TODO LIST 下一步已经开始做了,系统能够尽快做出来,下一步主要是看下它的源码,因为很多地方会出现诡异的错误的,还需要解决呀!

更多 >

KVM虚拟机在物理机间的迁移方法

有关虚拟机间的动态迁移,我在虚拟机迁移技术漫谈 对它进行大概的介绍,现在结合今天我自身的实践,来具体解释下迁移的步骤;

1,环境准备

1) 共享存储-NFS: 理论上来说,需要迁移的虚拟机可以不适用共享存储,但是如果不用共享存储的话,在迁移的过程中就需要对镜像进行大量的拷贝,这个是非常耗时的,而且在大量的集群的情况下,基本上镜像都是存放在分布式的共享存储中,一是方便管理,一是为虚拟机的动态迁移做准备,有关NFS的使用和挂载,请参看我的另外一篇文章
CentOS配置NFS服务器的方法
2) 支持kvm迁移的qemu-kvm 和 kvm模块:我用的是最新的qemu-kvm-0.13.0.tar.gz ,而kvm模块,由于我的系统的内核版本过低,用的kvm-88中的kvm-intel.ko kvm.ko模块

2,启动kvm虚拟机

在下面的介绍中使用 源虚拟机是待迁移的虚拟机,目的虚拟机是迁移后的虚拟机
源主机的启动命令如下:

   ./qemu-system-x86_64 -m 512 -hda /home/yangguang/nfs_mnt/images/debian_lenny_i386_small.qcow2 -net tap -net nic,model=rtl8139 -vnc :1 -monitor stdio
    #解释说明:
     1,  /home/yangguang/nfs_mnt: 代表NFS挂载的目录
     2,  -monitor stdio  将控制台定向的标准输入输出(这个是虚拟机迁移必须的,因为后续需要在命令行中进行操作)

目的虚拟机的启动命令:

    ./qemu-system-x86_64 -m 512 -hda /home/yangguang/nfs_mnt/images/debian_lenny_i386_small.qcow2 -net tap -net nic,model=rtl8139 -vnc :1 -monitor stdio -incoming tcp:0:8888
     #解释说明
     1,  启动命令参数必须和源虚拟机的启动参数是一样的,包括网卡类型等
     2,  -incoming tcp:0:8888 这个是在端口8888接收迁移命令和数据

这时在命令行中输入

     info status

源虚拟机显示的状态是running
目的虚拟机的显示的状态时paused

更多 >

12934473758454

一年又一年

今天已经是2011年,真的感觉时间过的好快呀,转眼的功夫一年又过去了,每个人都需要停下脚步,回过头看看这一年的得与失,真的需要好好总结下了。
看到我的去年的总结,还是有种很亲切的感觉,没事写写平时的感受其实还是挺好的,可惜总是贴一些技术的文章,个人的想法的东西去想的还是太少(可能是性格的因素的吧,不希望把一些比较内心的想法表达出来),这个其实真的还是蛮好的,争取2011年能够写一些。
简单的列下流水账吧,太有文采的文字也写不出来
1,今年开学直到九月份一直在百度实习,实习是瞒着老板偷偷地出去的,时间还是挺紧凑的,还得正常去实验室,只能利用上课的时间去公司,基本上研一下半年没有上过课,不过最后还好,课程都过了,呵呵!其实本来没有打算出去实习的,真的想好好利用研究生的时间搞搞科研,正像在Google面试那个工程师所说的那样,既然读了研究生,就应该做一些与正常本科毕业就工作的不一样的事情,如果研究生三年就是再外面实习三年,虽然最后也可能找到很好的工作,但肯定还不如直接工作三年来的更直接一些呢,所以研究生就应该做一些研究生应该做的一些事,比如读读paper、写写论文啥的等;但是我最后还是选择出去实习,主要原因是原来跟着老板做的东西不感兴趣,不能就这样荒废三年对吧,而且我觉得我不是能够主动去学习的那种,需要某种需求进行推动我,我才会去看它学习它的,所以就偷偷摸摸的在百度实习了将近半年。
总的来说,在百度这半年还是挺开心的,挺有收获的,主要参与了Baidu App Engine 项目主要开发工作,因为这个项目是比较新的项目,当时去的时候,加我一共三个人,能够接触比较多的东西,从前端到最后端,而且对整个架构也理解的比较清晰,后来陆续又来了两个同事,这项目在百度内部目前发展的比较好,有个比较有意思的小插曲:当时我将近实习结束,我的mentor居然劝我退学,放弃读硕士,直接工作,并且拿出自己当例子说事(他是硕士毕业,但是我们的项目老大是本科毕业,而且比他还低一届),可惜我最后还是乖乖的回所继续干活了,哈哈~最后还是感谢chuanying,xiaowei还有dongfei zhangyong这些同学的,从你们身上学到了很多!
2,到九月份时,就乖乖的回实验室了,开始了我的正常的研究生生涯,到现在也将近三四个月了,做了一些东西,包括对KFS的改造,有关KVM虚拟机的学习等,这期间我居然开始修改内核代码了,这个是最难以置信的,不过还是太弱了,本科时学的体系结构和微机技术的知识基本上全忘没了,还得从头回忆,但是还真没觉得这个东西能够用到,但是看论文太少,自己的独立思考还太弱了。
3,生活上,十一的时候去了趟大城市铁岭,看望下丈母娘,话说这男女方如果不在同一个地方,真是比较麻烦,下次去不知道得等到啥时候,这结婚后就更纠结了,希望xiaofang同学看到不要有啥想法哦~
同时也给超哥、猛哥和韬哥提醒一声,找对象尽量都找近一点哦

2011年的期望:
1,祝愿小邓同学早日实现她的梦想

2,好好干活与学习,明年找个好工作
3,希望lc lm zt (对号入座)不再寂寞不再mensao, 猛哥也越nb, 超哥和韬哥飞越成功,我和猛哥的儿子的前途就全靠你俩了
写了好多,我发现我也太能墨迹了,不写了,回去睡觉了

CentOS配置NFS服务器的方法

最近搞KVM虚拟机迁移,前提是需要一个共享存储的文件系统来存储系统镜像,本来打算使用KFS来作为分布式文件系统的,但是在修改kvm的镜像读写API后,系统是跑起来了,但是奇慢无比,主要是存在对镜像存在大量的随机读写造成的,这个下次再好好总结下。所以就想到了简单易用的NFS文件系统,下面是具体的配置细节:

1,NFS服务器的安装

在CentOS系统中,默认情况下已经安装了NFS文件系统,如果没有安装就需要手工安装了

#rpm –q nfs-utils portmap

2, 查看NFS是否启动

#service nfs starus
#service portmap status

3,启动NFS

#service nfs start
#service portmap status

更多 >

虚拟机迁移技术漫谈【两篇不错的文章】

虚拟机的迁移技术,为虚拟机的管理提供更方便的支持,可以在不间断服务的情况下,将虚拟机从host A 迁移到 host B!

虚拟机迁移分为三类:

P2V : 物理机到虚拟机的迁移

V2V: 虚拟机到虚拟机的迁移 【这个感觉用户还是最大的】

V2P: 虚拟机到物理机的迁移

这个应该是不错的研究和实践方向。

下面是有关虚拟机的迁移和KVM具体实践的文章,

虚拟机迁移技术漫谈,第 1 部分


KVM 虚拟机在物理主机之间迁移的实现


Linux 虚拟化技术