“五一” 假期去了安徽省黄山市歙县,此行的目的是去参加表哥的婚礼的,也顺便趁着春暖花开之际去爬爬山。
第一天去山上的野生竹林里采了好多竹笋,野生的哦!!纯天然的哦!!(可惜当时没带相机,所以也没拍照片了);第二天去山上采了好多茶叶,有不少是野生的茶树哦!!回来以后和爸妈摸索着用灶上的锅烘干,制成了真正的茶叶,我现在杯子里喝的就是呢!!
身处大山深处,远离城市的喧嚣,有一种世外桃源的感觉,于是我决定等以后不干IT这行了就归隐山林,过“采菊东篱下,悠然见南山”的日子。
乐者为王
“五一” 假期去了安徽省黄山市歙县,此行的目的是去参加表哥的婚礼的,也顺便趁着春暖花开之际去爬爬山。
第一天去山上的野生竹林里采了好多竹笋,野生的哦!!纯天然的哦!!(可惜当时没带相机,所以也没拍照片了);第二天去山上采了好多茶叶,有不少是野生的茶树哦!!回来以后和爸妈摸索着用灶上的锅烘干,制成了真正的茶叶,我现在杯子里喝的就是呢!!
身处大山深处,远离城市的喧嚣,有一种世外桃源的感觉,于是我决定等以后不干IT这行了就归隐山林,过“采菊东篱下,悠然见南山”的日子。
This post will introduce a funny way to access physical memory from user space, I will:
What’s the difficulty in doing this ?
As we know, a user program (or process) has its own virtual address space, when it calls malloc() to apply a block of memory, the malloc will return the start address of the allocated virtual memory, user program doesn’t know the actual start address of physical memory.
(更多…)
离导师发来开题通知已经过去3个礼拜了,而且下周四学校也要组织不定期检查,可悲的是我到现在还没想好毕业论文写什么。
毕业论文主题应该会是和KVM相关的,因为去年下半年就看过一部分,如果要改成写Linux Kernel的其他模块,又要几乎重新从零开始,还是省点力吧。之前想过很多题目,比如《KVM虚拟机研究及性能优化》感觉范围太大了,又改成《KVM内存虚拟化研究及优化》又觉得范围太小了。
其实范围的大小不是主要问题,最最难的是怎样在论文里提出自己的观点,发现不合理的地方并做出改进。 这一点太TM难了。 要知道Linux内核代码都是大牛们杰作,这些人技术上远远的超过我,都甩开我几条街了,我如何去发现他们代码里面不合理的地方呢!简直天方夜谭。
上篇博客里讲到要介绍KVM 影子页表和EPT, 于是尝试着去读源代码,发现很难读懂,所以第三篇学习笔记这么久才“写”出来。至于为什么难懂,我想原因应该是这样的:
1、不知道为什么需要影子页表或者EPT,只是知道有这个概念然后去读代码,所以读得晕头转向,白费了很多功夫。 一个新的方案被提出来肯定是为了解决原有的代码无法解决的问题,所以在读源码之前一定要明白为什么要有影子页表,没有就不行吗?现有的MMU、内存分页机制又会产生哪些制约呢? EPT的出现又解决了影子页表的哪些缺点呢?这些都是预备知识,一定要搞清楚。
2、对体系结构方面的知识理解不够深入,这个是硬伤,只能一边看一边补习了。
KVM保证guest OS正确执行的手段就是当guest执行I/O指令或者其他特权指令时,引发处理器异常,从而进入到根操作模式(Intel 的VT-x技术)。
当guest OS执行一些特权指令或者外部事件时,比如I/O访问,对控制寄存器的操作,对MSR(Machine Special Register)的读写操作、数据包的到达等,都会引起CPU发生 VM Exit,发生VM Exit后,KVM 会将guest OS 的状态保存到VMCS中,把Host的状态装入物理CPU,处理器进入根操作模式。接着KVM会读取保存的VMCS中 VM_EXIT_REASON字段的内容,从而知道虚拟机退出的原因。如果由于I/O信号到达,则退出到用户模式,交给Qemu来处理,处理完毕后,再通过KVM重新进入guest OS运行;如果是外部中断,则有KVM做一些必要的处理再返回。
最近用一些零碎的时间学习KVM,算算大概也快有一个月了吧,进度还是很缓慢的,感觉该写一些类似读书笔记的东西了。欢迎大家来讨论,如果有错误,还请不吝赐教
KVM 即 Kernel Based Virtual Machine, 是一个内核模块,使用它需要CPU支持虚拟化。加载KVM模块后,系统中会有一个 /dev/kvm 设备,这个设备提供 ioctl 和 mmap操作。目前,KVM还必须和修改过的Qemu配合起来使用(这样说是不准确的,因为已经有一个叫 native kvm tool的东东了),KVM 使用Qemu做I/O模拟,虽然Qemu也提供CPU的模拟,但是KVM不用,也许这正是KVM+Qemu比单纯用Qemu进行虚拟化性能高的原因吧。
运行在Qemu中的虚拟机被称为Guest,运行Qemu的物理机称为Host, 每一个guest是host上的一个进程,guest的每一个cpu对应进程中的一个线程。Qemu和KVM之间通过ioctl进行交互,KVM和guest之间通过VM Entry和VM Exit进行切换。 (更多…)
有一段非常非常非常简单的网络编程代码,C语言,C/S模式,相信每一个学习C语言网络编程的人都写过,正因为特别简单,所以发生错误时第一反应并不是我的代码错了,而是系统的BUG! 事实证明,这种想法真是 too young, too simple, sometime naive !
无论是系统调用还是库函数代码,全世界那么多人在用,经过这么多年的千锤百炼,发生错误的可能性是很小的,大多时候都是自己的粗心大意。本次乌龙事件最后查明的原因是传给recvfrom函数的最后一个参数 addrlen没有被初始化。
事情是这样的,一个非常简单的客户/服务器程序。
第一次运行 ./server 和 ./client 127.0.0.1 , 当client发送数据的时候,server收到了,但是显示client的IP地址是错误的,因为是错误的IP地址,所以server把回送的数据报发给了错误的地址,client当然就收不到了。
以前看到过一个很文艺的话:“要么旅行要么读书,身体或者是心灵,总有一个需要在路上”,平时工作学习太累了,那么乘着假期风和日丽的好天气,环太湖挑战一下吧!
骑行路线从江苏吴江出发,顺时针环太湖一圈,下图是总路线。

简单回顾一下OpenStack三大组件的用途:
OpenStack Compute (Nova),为云组织的控制器,它提供一个工具来部署云,包括运行实例、管理网络以及控制用户等等。
OpenStack Object Storage (Swift),是一个可扩展的对象存储系统。
OpenStack Image Service (Glance),是一个虚拟机镜像的存储、查询和检索系统。
对于Nova,我们先来看一张图:
