摘要:
KVM 虚拟化原理探究 —— 目录 标签(空格分隔): KVM [KVM 虚拟化原理探究(1)— overview][1] [KVM 虚拟化原理探究(2)— QEMU启动过程][2] [KVM 虚拟化原理探究(3)— CPU 虚拟化][3] [KVM 虚拟化原理探究(4)— 内存虚拟化][4] [K 阅读全文
摘要:
1.tornado简介:http://www.cnblogs.com/Bozh/archive/2012/07/17/2596458.html 2.tornado 网络层IOLoop:http://www.cnblogs.com/Bozh/archive/2012/07/18/2597114.htm 阅读全文
摘要:
花了一上午的时间,先整理一个脑图。 阅读全文
摘要:
代码与诗 缘起 现在时间是2018年10月14日14:28:43,在一家书店中央的咖啡馆,点了一杯拿铁,特意叫了不加糖。我知道拿铁是不加糖的,但是还是事先声明了一下。周末拿起了笔记本,想写点代码却没有太高的效率,于是作罢。一直想写一本书,把这些年的程序员职业以生活化的方式叙述出来,这可能就是写这本书 阅读全文
摘要:
KVM 虚拟化原理探究— overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验。同时希望借此系列博客,能够对KVM底层有一些清晰直观的认识,当然我没有通读KVM的源码,文中的内容一部分来自于书籍和资料,一部分来自于实践 阅读全文
摘要:
KVM 虚拟化原理探究(6)— 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样非常重要的。同网络IO虚拟化类似,块设备IO也有全虚拟化和virtio的虚拟化方式(virtio b 阅读全文
摘要:
KVM 虚拟化原理探究(5)— 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理。作为一个完整的风诺依曼计算机系统,必然有输入计算输出这个步骤。传统的IO包括了网络设备IO,块设备IO,字符设备IO等等,在KVM虚拟化原理探 阅读全文
摘要:
KVM 虚拟化原理探究(4)— 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理。可以说内存是除了CPU外最重要的组件,Guest最终使用的还是宿主机的内存,所以内存虚拟化其实就是关于如何做Guest到宿主机物理内存之间的各 阅读全文
摘要:
KVM 虚拟化原理探究(3)— CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要像以前想象的那样,需要用软件来模拟硬件指令集了。虚拟机的指令集直接运行在宿主机物理CPU上,当虚拟机 阅读全文
摘要:
KVM 虚拟化原理探究— QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 关于KVM_CREATE_VM参数的描述,创建的VM是没有cpu和内存的,需要QEMU进程利用mmap系统调用映射一块内存给VM的描述符,其实也就是给VM创建内存的过程。 [KVM ioctl接口文档 阅读全文
摘要:
背景 公司云平台的机器时常会发生网络闪断,通常在10s 100s之间。 异常情况 VM出现问题时,表现出来的情况是外部监控系统无法访问,猜测可能是由于系统假死,OVS链路问题等等。但是在出现网络问题的时候,HV统一的表现为iowait较高。 排除过程 这是一个艰难的过程,由于无法重现现场,导致只能通 阅读全文
摘要:
KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量的前提下完成 测试方式 以物理机MySQL为基准,分别做两次测试 1. 测试IO相关参数(write 阅读全文
摘要:
云计算技术堆栈系列 就上图,从 IaaS, SaaS, Devops(也可以说是PaaS,但是更加细化) 来详细讲解整个云计算技术堆栈,每一个分支都是值得深入研究的地方. 软件设计一向遵从的原则是自顶向下设计,自下而上实现,从读者的角度,来分模块的,从 PaaS 到 SaaS 到 IaaS 也是一个 阅读全文
摘要:
OVS 配置 VxLAN 背景知识 网络地址空间: Linux network namespace(netns) OVS: Open Virtual Switch VxLAN 实验 通过配置VxLAN, 使得vm A 与 vm B 能够互相通信 步骤 步骤... 阅读全文
摘要:
关于Cgroup的简单测试 [toc] 简单介绍Cgroup
(如果对cgroup熟悉可以忽略)
一般情况下,cgroup挂载到一个虚拟文件目录,然后可以通过文件系统的API对其操作。 可以查看mount point 以下非特殊说明,均以ubuntu12.04(3.5.0 23... 阅读全文
摘要:
LVS 测试报告---## 测试计划1. 基本功能测试2. 流量压力测试3. 响应时间测试4. 配置正确性测试5. 灾难恢复测试## 测试点1. 基本功能测试 - 客户端IP地址正确性 - RealServer 访问Internet测试(包括Iptables 规则优先级)2. 流量压力测试 - 流量... 阅读全文
摘要:
**HAProxy** is a high performance load balancer. It is very light-weight, and free, making it a great option if you are in the market for a load balan... 阅读全文
摘要:
# TimeWall is a graph databases[github](https://github.com/Mr8/timewall)> It be used to apply mathematic model and social network with graph algorithm... 阅读全文
摘要:
# HAproxy 技术分享## 简介HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件---## Features 1.免费 2.能够做到4层以上代理 3.高性能 4.高稳定性---## 使用案例淘宝CDN(HTTP反向代理)---## 测试:##... 阅读全文
摘要:
在启动kubernetes的时候报错误、ERROR: timed out for http://localhost:4001/v2/keys/原因是无法启动etcd, etcd 监听4001本地端口。解决方案:修改hack/util.shetcd 启动行为如下etcd -data-dir ${ETC... 阅读全文
摘要:
# Docker特性与原理解析>文章假设你已经熟悉了Docker的基本命令和基本知识###首先看看Docker提供了哪些特性:- **交互式Shell**:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell- **文件系统隔离**:每个进程容器运行在完全独... 阅读全文
摘要:
# Cachedb 网络模块文档## 整体结构- 多路复用 (epoll 模块)- 事件驱动 (事件封装)- 缓冲管理 (上层buffer管理)---## 设计思想> 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚拢于接口处,同时每个模块也只暴露固定的操作接口给上层调用。如果下层需要依赖... 阅读全文
摘要:
##Paste.deploy 与 WSGI, keystone 小记###名词解释:- **Paste.deploy** 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来.- **keystone** 是 openstack的各模块之间调用时候采取的认证... 阅读全文
摘要:
##Redis 主从复制各种环境下测试>测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz Redis 2.6.13 以下 R1 表... 阅读全文
摘要:
如何做一份精致的性能测试报告?以上是我在知乎提出的问题,感谢梧桐同学的回答,Quote中的文字是我的描述在做系统的过程中会遇到需要对整个系统做测试的情况,包括一些基准测试,容量测试,压力测试等。如何做一份精致的性能报告书,在测试过程中有哪些量化指标是需要重点考虑的? 有一个现象是很奇怪的,在这行业... 阅读全文
摘要:
在看tornado和Nginx代码的时候都会看到在最初事件反应堆初始化的时候都会自初始化一个事件,创建一个管道pipe并绑定到事件队列中。这样的好处是可以优雅的在父进程中向管道pipe[0]发送退出或者其他信号,子进程监听到pipe[1]有事件产生后采取相应的措施。class Waker(inter... 阅读全文
摘要:
运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态先从原因分析一下为什么,问题就迎刃而解了。首先是TIME_WAIT: 理解一下TIME_WAIT状态产生的原因,这个问题已经被很多很多的书说烂了,但是为什么很多人还是... 阅读全文
摘要:
在我的周围,已经有很多人在使用BootStrap,但对于任何一个带留言、评论、提问、文章编辑功的网站,编辑器永远是重中之重,显然,早期的编辑器完全没考虑过BootStrap的出现,或皮肤跟网站不匹配,或不支持BootStrap样式。 如果你了解BootStrap,肯定听说过bootstrap-wys 阅读全文
摘要:
缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍。 1.MongoDB数组查询:MongoDB自带List,可以存放类似这样的结构 List = [1, 2, 3, 4, 5, 6, 7, 8, 9]. 如果我们有一个 l = [2, 3, 8], 则可以进行这样的查询:spce ={ 'List' : { '$in' : l }, 这里spce就是一个查询条件,代表 l 是 List的一个子集。 2.Redis队列: Redis提供基本的List(普通链表),s. 阅读全文
摘要:
#define likely(x) __builtin_expect(!!(x),1)#define unlikely(x) __builtin_expect(!!(x),0)用于优化在做分支判断的时候CPU流水线问题likely()用于分支判断的时候很有可能执行的指令,而unlikely()则相反 阅读全文
摘要:
由来:公司内部外网记录日志的方式现在都是通过Nginx模块收到数据发送到系统消息队列,然后由另外一个进程来从消息队列读取然后写回磁盘这样的操作,尽量的减少Nginx的阻塞。但是由于System/V消息队列在使用前需要规定消息长度,且结构不一样需要重新定义消息格式等等...所以在增加需求的时候需要修改代码并重新编译,这样带来的坏处可想而知,外网服务器也会因此重启。所以组内有同事准备在Nginx中加入异步写日志的功能,大致方式就是将数据写入到一块内存然后由另外一个进程读取然后flush到磁盘,或者直接使用同步写的方式。然后测试对比后发现其实同步写和异步写差别很小。而且最大的疑惑就是,Nginx的多 阅读全文
摘要:
近来在维护并重构一个原来离职的同事的代码,在将一部分代码从原有逻辑剥离开来的时候遇到了很多的麻烦,希望自己以后不要留下类似的坑,所以在这里做一个总结代码是Python写的,工程很浩大,其中代码运行在一个虚拟化集群中,我的目的是将一部分原有代码逻辑差不多,但是实体(机器)要分开的代码重构其中涉及到主要的有几点约束:1.新分离的代码逻辑和原有的代码逻辑要一样2.其中涉及到一个任务系统,集群中的机器取任务和返回任务都是向一台核心Server获取,新分离的代码中任务申请和返回接口发生改变3.暂时没想到...从原有代码中分离出新代码,且代码逻辑要一样,那么很多人都会偷懒直接Copy一份代码,然后把其中一 阅读全文
摘要:
Debian体系,本人测试用机 Ubuntu 11.10uname -r 查看原本的内核版本为3.0.0-12-generic第一步:安装systemtap包$ sudo apt-get install systemtap$ sudo apt-get install systemtap-sdt-dev测试stap -e 'probe kernel.function("sys_open") {log("hello world") exit()}'不能正确输出hello worldsemantic error: libdwfl failure 阅读全文
摘要:
yum 错误TypeError: rpmdb open failed 解决办法 是因为RPM数据库出现损坏导致的,它导致所有的软件的升级、安装甚至是删除都会出现问题,终端出现乱码,YUMEX也用不成,RPM命令也用不成。原因是RPM数据库被破坏,解决方法如下: $ su 切换到root权限yum 错误TypeError: rpmdb open failed解决办法是因为RPM数据库出现损坏导致的,它导致所有的软件的升级、安装甚至是删除都会出现问题,终端出现乱码,YUMEX也用不成,RPM命令也用不成。原因是RPM数据库被破坏,解决方法如下:$ su 切换到root权限# cd /var/lib 阅读全文
摘要:
问题来自我在segmentfault上提出的问题先描述一下问题背景: 研究过Reactor的同学都知道epoll,小弟最近在写一个Reactor, 然后有一个地方很困惑,以前也想过这个方式。代码如下:这里是反应堆的核心代码,箭头标明的地方就是我的问题所在。 在epoll返回一个描述符可读或者可写的时候我会把对应的事件放入到一个singalQueue,然后返回后由主进程统一执行对应事件上的回调。因为是无阻塞的,所以这里的处理应该是相当快的。以前也想过将就绪事件放入到一个线程池里面,由Worker线程异步处理(Nginx使用的是每个进程一个epoll监听并同步处理)。这样主进程直接重新进入epol 阅读全文
摘要:
这篇文章来自在Segmentfault 上面我提出的一个问题问题背景: Python在执行的时候会加载每一个模块的PyCodeObject,其中这个对象就包含有opcode,也就是这个模块所有的指令集合,具体定义在源码目录的 /include/opcode.h 中定义了所有的指令集合,在执行的时候通过加载opcode完成指令的流水线执行过程,opcode也就是所有指令集合生成的字符串。执行体位于源码目录的 /Python/ceavl.c 中PyEval_EvalFrameEx()函数就是虚拟机的执行体函数,它会加载指令集合并完成运算。问题描述: 在PyEval_EvalFrameEx()函数中 阅读全文
摘要:
总结commandlinefu.com 的vote数目最多的实用命令如下(按vote数目),送给英文不好的亲们:——————————————lsof -i -P | grep -i "listen"lsof -Pni4 | grep LISTENnetstat -plnt查看正在监听的端口————————————————————————————————————————————————netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c列出当前所有网络连接的状态数 阅读全文
摘要:
写这篇文章的目的在于很多用我的代理的童鞋都喜欢问我到底为什么,为了避免机械化的每一次都重复为什么我决定把原理写出来给大家分享一下。 同样来自武汉的Vincent Ting童鞋问我还有不基于代理的"FQ"方式么,VPN一样的..我说,VPN本质来说不也是代理技术么?..就目前来说我遇到的都是基于代理的方式,不基于代理的方式"不科学"吧..如果你知道请和我分享。 作为一个围城内的人,大家都有一颗走向世界的心,无奈现实太多阻碍。作为一个搞IT的同学,不会FQ说出去不怕被别人笑话么? 会FQ不一定知道原理,今天给大家介绍一下基于隧道技术的HTTP代理。(今天吃火 阅读全文
摘要:
SMP IRQ affinityLinux 2.4内核之后引入了将特定中断绑定到指定的CPU的技术,称为SMP IRQ affinity.原理当一个硬件(如磁盘控制器或者以太网卡), 需要打断CPU的工作时, 它就触发一个中断. 该中断通知CPU发生了某些事情并且CPU应该放下当前的工作去处理这个事情. 为了防止多个设置发送相同的中断, Linux设计了一套中断请求系统, 使得计算机系统中的每个设备被分配了各自的中断号, 以确保它的中断请求的唯一性. 从2.4 内核开始, Linux改进了分配特定中断到指定的处理器(或处理器组)的功能. 这被称为SMP IRQ affinity, 它可以控制系 阅读全文
摘要:
教科书上的B+Tree是一个简化了的,方便于研究和教学的B+Tree。然而在数据库实现时,为了更好的性能或者降低实现的难度,都会在细节上进行一定的变化。下面以InnoDB为例,来说说这些变化。04- Sparse Index中的数据指针 在“由浅入深理解索引的实现(1)”中提到,Sparse Index中的每个键值都有一个指针指向 所在的数据页。这样每个B+Tree都有指针指向数据页。如图Fig.1所示:Fig.1 如果数据页进行了拆分或合并操作,那么所有的B+Tree都需要修改相应的页指针。特别是 Secondary B+Tree(辅助索引对应的B+Tree), 要对很多个不连续的页进行修改 阅读全文
摘要:
00 – 背景知识- B-Tree & B+Treehttp://en.wikipedia.org/wiki/B%2B_treehttp://en.wikipedia.org/wiki/B-tree- 折半查找(Binary Search)http://en.wikipedia.org/wiki/Binary_search_algorithm- 数据库的性能问题 A. 磁盘IO性能非常低,严重的影响数据库系统的性能。 B. 磁盘顺序读写比随机读写的性能高很多。- 数据的基本存储结构 A. 磁盘空间被划分为许多大小相同的块(Block)或者页(Page). B. 一个表的这些数据块以链表 阅读全文