摘要: zerobus希望进一步抽象应用和进程间通信,通过配置能灵活设置应用和进程间通信(灵活选择TCP,UDP,共享内存进行通信)方式,方便网络程序开发和部署。在zerobus中通信双方(进程或跨机的应用)的抽象叫做通道(channel),它通过zeromq高性能消息队列来实现通信通道(channel)。(1)进程或应该通信配置如下 (2)基于zerobus的echo客户端示例#include "Channel.hpp"#include "ZBus.hpp"#include "Error.hpp"#include "Reactor 阅读全文
posted @ 2013-09-01 01:12 weiffun 阅读(2410) 评论(0) 推荐(0)
摘要: 由于基于探针的动态插桩,通常只能在函数边界插入代码,难以对程序的指令流进行很好的分析,所以平时用的比较少。以前使用微软研究院的detour的API觉得它很神奇,最近看了下它的原理还是很简单:基于简单动态重写函数的开始几个字节,然后跳转到特定函数。呵呵,但是要做好还是不容易的。闲来无事写了一个很粗糙的实现。基本原理就是:(1)保存函数的入口的几个字节,并插入一天跳回函数的jmp指令(这一块代码称为trampaline)。这里的前几个字节不是个定数是有原因的,实际上我们只需要前5字节来保存一条JMP指令,但入口的5个字节可能并不是几条完整的指令,因此若只保存5个字节就会截断指令。如下面的代码所示, 阅读全文
posted @ 2010-07-25 17:13 weiffun 阅读(584) 评论(0) 推荐(0)
摘要: There are currently four major sets of benchmarks for OpenMP. The suites are complementary, as they are based on low-level operations, kernels and applications respectively.The EPCC Microbenchmarks PageA set of low-level benchmarks, measuring the overheads associated with OpenMP directives.http://ww 阅读全文
posted @ 2009-10-12 17:27 weiffun 阅读(416) 评论(0) 推荐(0)
摘要: 和所有翻译器类似Guset程序按基本块翻译后存放在code cache中,cache中的代码被真正执行。为了保持简单的设计原则,HDtrans没有采用寄存器生存期分析等复杂优化技术,仅仅使用了trace linearization和sieve技术,优化trace生成和间接指令的翻译。直接跳转最大限度的利用已翻译的基本块。如果跳转的目标块已经存在,直接跳转到已翻译块。如果目标地址所在块未翻译,则采用trace linearization技术:若为jump一类指令,则删除jump指令,继续翻译目标指令,构成一条trace。若为call一类指令,则不跟随翻译目标指令,转去翻译call的下一条指令。将 阅读全文
posted @ 2009-10-10 14:35 weiffun 阅读(195) 评论(0) 推荐(0)
摘要: “控制复杂性是计算机编程的本质。” ——Brian KernighanHDTrans是一个轻量级的IA32到IA32动态翻译系统,它的初衷是设计成内核级的翻译器和设备驱动沙箱(sandbox),力求简洁和易修改。当Brian Kernighan首创的“hello, world”程序遇到动态翻译器会发生什么呢?$HDTrans ./hello$hello, world 屏幕上没有悬念的显示出了“hello, world”。动态翻译系统就像一部情节曲折,但结局早已注定的电影。因为动态翻译器必须保证程序被动态执行和native执行时表现出一致性行为。这包含两层意思:一是具有相同的正确行为,这通常比. 阅读全文
posted @ 2009-09-07 23:50 weiffun 阅读(193) 评论(0) 推荐(0)
摘要: DynamoRIO是一个运行时代码修改工具,提供了一套API供用户定制自己的程序分析、profile以及动态插装工具。主页地址http://code.google.com/p/dynamorio/主要著者的博客http://www.govirtual.org/blogs/derek/ 阅读全文
posted @ 2009-06-30 20:52 weiffun 阅读(268) 评论(0) 推荐(0)
摘要: 在程序设计和优化过程中,我们通常希望能有工具帮助我们分析热点代码、覆盖率、内存泄露等这些特性,对多线程程序还希望能分析并发性、竞争和死锁等等。但这些特征通常在静态编译时很难获取,而且往往只能在运行时才能确定。Pin是intel开发的动态插桩工具,它提供一套API让我们开发和定制自己的性能分析工具,此外它还被广泛用在体系结构研究、安全等领域。目前intel parallel studio的很多特性便是基于pin开发而成。Pin的工作机制目前对程序进行剖析(profiling),主要有二种方法:统计硬件计数器和插桩。Pin采用了插装技术,在程序的执行过程中动态插入分析代码。下面的代码片段演示了插装 阅读全文
posted @ 2009-06-29 20:12 weiffun 阅读(545) 评论(0) 推荐(0)
摘要: JOS是MIT开放课程6.828的实验系统,它做好了涉及底层硬件的基本操作,留给我们一个OS空架子,待我们一步步添加代码,最终形成功能完善的OS。最近做完了lab1,相对于看Linux源码轻松许多,但却切实体验了一把动手写操作系统的感觉。在做实验的时候,要明白的一点是,做这个实验是为了帮助我们更好的理解操作系统的概念和基本的设计原则,多想想要是自己设计这个系统会怎么做,然后对比JOS设计,给出自己的评价,我想这样做完整个实验效果会更好。lab1的要点如下:计算机的启动过程在计算机加电后,由硬件将BIOS加载进内存,BIOS进行一些检测和初始化工作后,将硬盘 MBR 中的 Boot Loader 阅读全文
posted @ 2009-03-03 19:53 weiffun 阅读(234) 评论(0) 推荐(0)
摘要: 目前需要测试模拟器的性能,而又只能获得speccpu2000中benchmarks的源码。别无选择,只有自己手动编译,原以为写个简单的makefile和一个运行自动编译的shell脚本,能很快解决问题!真正实现的时候,才发现存在很多移植和编译选项设置问题(当然这些在benchmark的docs目录下有部分说明,你可以去查看)。开始之前确保你的系统有: 一份speccpu2000的benchmarks源码 GNU gcc 编译器 文本浏览器(出错的时候可以查看源码,推荐Kscope,其跟windows source insight类似)GNU gcc 简介作为自由软件的旗舰项目,Richard 阅读全文
posted @ 2009-01-16 13:54 weiffun 阅读(655) 评论(0) 推荐(0)