libvirt virEventRegisterDefaultImpl fd leak

show code: import os import libvirt libvirt.virEventRegisterDefaultImpl() def openclose(): c = libvirt.open(‘qemu:///system’) c.close() os.system(‘lsof -p %d | wc -l’ % os.getpid()) for i in xrange(100): openclose() os.system(‘lsof -p %d | wc -l’ % os.getpid()) explain: https://www.redhat.com/archives/libvir-list/2013-September/msg00118.html

写给 OpenStacker 的 ZStack 指南(一)

前言 相比 OpenStack 而言,ZStack 全异步、追求高稳定性和安全的代码是相对难读的,所以本文希望能通过一些简单的例子和与 OpenStack 的一些对比,将 ZStack 的特点、代码的原理尽量描述出来,降低 ZStack 的入门门槛。欢迎更多 OpenStacker 参与 ZStack 或从 ZStack 的代码中汲取经验。 从执行一个 API 说起 对一个业内人士,观察在页面上一个指令如何逐步被执行,无疑是最直观深入的了解方式。 第一步 前端 打开 Mevoco/ZStack 的界面,可以发现基本设计思路与其他 IaaS 或 OpenStack 是基本类似的,然而打开开发者面板就会发现大有不同。 OpenStack 的面板一般通过 HTTP 到 Web 后端,可能是一个像 Horizon 的中间件,也可能是直接把请求发到后面的具体服务的 API 服务,例如 nova-api 或 neutron-server。当然中间可能还会有负载均衡器或高可用之类的设施。 图1 在OpenStack的Horizon面板上创建虚拟机出发的Post请求 而在 ZStack 的面板中开发者面板是很干净的,打开之后无论什么操作是不会触发 HTTP 请求的,数据和请求都在 WebSocket 传递,比如我们在面板上创建一个虚拟机,可以看到通过 WebSocket 发送一个 frame,一个 […]

为什么在 VyOS(Vyatta)中 commit 会很慢

最近就这个问题调查了蛮久,其实原因比较显然,在看到 strace 的结果就已经明白了大半,但是本着求(xia)知(zhe)探(teng)索的想法,仔细验证了代码逻辑和时间(新技能 get!给 C++、Perl 混合代码调试性能),攒出了这篇文章。 ZStack 是一个开源的 IaaS 软件,架构和性能都很优秀,可以在 103 秒内并发创建 1000 台虚拟机,可惜这个数据是在扁平网络下测试得到的,一旦用上云路由网络,单个虚拟机的启动时间会延长到七秒左右。 我们现看下看下实际的占用时间,我在 vyatta 的代码里添加了日志(Repo 是 https://github.com/vyos/vyatta-cfg )综合 zstack、zstack-vyos、vyos 的日志可以看到大概是这样的(注意 zstack 的日志时间精度只提供到秒,没有毫秒): 2017-02-13 13:22:08 start executing flow[NetworkServiceManagerImpl.java:apply-network-service-DHCP] 2017-02-13 13:22:08 DEBUG [RECV] /setsnat 2017-02-13 13:22:09 DEBUG [HTTP POST][ASYNC REPLY TO /setsnat] 2017-02-13 13:22:09 DEBUG [RECV] /adddhcp # 以下为 vyos 日志 2017-02-13 13:22:09:458 Entered cli_bin::doCommit […]