摘要:总结了下自己编译facebook folly库的经验,希望后来者编译顺利,少花些时间。 阅读全文
linux的IO调度算法和回写机制
2012-06-20 11:29 by zhenjing, 12532 阅读, 2 推荐, 收藏, 编辑
摘要:Linux IO调度程序是块设备I/O子系统的主要组件。块设备I/O子系统最核心的任务也就是提高块设备的整体性能,为此Linux实现了四种IO调度算法,算法的基本思想就是通过合并和排序IO请求队列中的请求大大降低所需的磁盘寻道时间,从而提供整体IO性能。
不管如何优化块设备调度算法,也不可能解决磁盘IO和CPU速度严重不匹配的问题,为此Linux引入了页高速缓存。页高速缓存最开始是为内存管理而设计的,在2.6内核中,各种基于页的数据管理都纳入页高速缓存。因此块设备的IO缓冲区也属于页高速缓存。这些和使用者无关,是内核开发者需要关心的。对于开发者,需要知道的是:所有文件的IO操作都是“读写缓存”。对于读操作,只有当数据不在缓存时才需要IO操作。对于写操作,一定需要IO操作,但内核把数据写到高速缓存后write系统调用立马返回,内核采用特定的写进程统一回写dirty的缓存页。即内核对读写是分别对待的:“同步读,异步写”! 阅读全文
linux性能监控
2012-06-17 15:30 by zhenjing, 3834 阅读, 1 推荐, 收藏, 编辑
摘要:linux的性能监控对于分析各种系统问题至关重要。一般情况下,直接启动命令看输出。但有时需要监控某个特定时间系统的运行状况,简单办法就是定时启动命令,并将命令输入打印到log, 或者使用诸如sar这类强大的性能监视工具。
贴几个监控工具的包装脚本,结合crontab即可实现定时启动、收集一定时间间隔的性能数据。 阅读全文
c库的rand/random随机数产生函数性能差?
2012-06-10 19:17 by zhenjing, 9774 阅读, 0 推荐, 收藏, 编辑
摘要:有网文称c标准库的rand/random随机数产生函数性能极差。一直信以为真,但从没做过验证。最近因其他因缘,写了些代码专门验证rand/random的性能。结果大出意料,颠覆之前的成见。
结论如下:
1) rand/random性极佳。在64位机器上,其性能大约比简单自增略低30%(32位的自增比64位性能高出1倍以上)!
2) srand/srandom性能极差极差。绝对不能每次调用rand之前都调用srand。这么做不仅没必要,还会极大降低性能,性能只有调用rand的1%!!! 阅读全文
通用高效的c++内存池(特定类型)
2012-06-03 15:35 by zhenjing, 4460 阅读, 3 推荐, 收藏, 编辑
摘要:介绍一最近实现的特定类型的通用高效C++内存池。
特点:
1)基于共享内存; -- 不会因为进程挂掉而丢失数据。
2)快速分配; -- 在内存池接近满时,效率不高。
3)快速回收;-- 常数
4)空间利用率高 -- 利用bit标识内存块使用与否 (《C++设计新思维》的小对象分配器不占用额外空间!!) 阅读全文
工具脚本(网络编码)
2012-05-18 19:56 by zhenjing, 650 阅读, 0 推荐, 收藏, 编辑
摘要:自用的工具脚本:1) 生成结构体网络编码(Ntoh(), Hton() )的perl脚本; 2) 正则表达式测试脚本。 阅读全文
thrift安装脚本
2012-05-12 13:07 by zhenjing, 1869 阅读, 1 推荐, 收藏, 编辑
摘要:Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。Thrift安装依赖性太强,首次安装的人容易碰上各种问题。本文基于自身经历给出Thrift 需要注意的事项和shell安装脚本。 阅读全文
[转] Linux-2.6.32 NUMA架构之内存和调度
2012-03-21 13:22 by zhenjing, 9283 阅读, 2 推荐, 收藏, 编辑
摘要:本文将以XLP832通过ICI互连形成的NUMA架构进行分析,主要包括内存管理和调度两方面,参考内核版本2.6.32.9.NUMA(Non Uniform Memory Access)即非一致内存访问架构,市面上主要有X86_64(JASPER)和MIPS64(XLP)体系。
NUMA具有多个节点(Node),每个节点可以拥有多个CPU(每个CPU可以具有多个核或线程),节点内使用共有的内存控制器,因此节点的所有内存对于本节点的所有CPU都是等同的,而对于其它节点中的所有CPU都是不同的。节点可分为本地节点(Local Node)、邻居节点(Neighbour Node)和远端节点(Remote Node)三种类型。
本地节点:对于某个节点中的所有CPU,此节点称为本地节点;
邻居节点:与本地节点相邻的节点称为邻居节点;
远端节点:非本地节点或邻居节点的节点,称为远端节点。
邻居节点和远端节点,称作非本地节点(Off Node)。
CPU访问不同类型节点内存的速度是不相同的:本地节点>邻居节点>远端节点。访问本地节点的速度最快,访问远端节点的速度最慢,即访问速 阅读全文