本博文为原创,遵循CC3.0协议,转载请注明出处:http://blog.csdn.net/lux_veritas/article/details/24766015

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Bandwidth是一款内存带宽基准測试程序,主要针对x86及x86_64平台,通过顺序读写与随机读写不同大小的数据块,測试系统的内存带宽性能。

项目地址

Bandwidth提供了一套汇编语言实现的支持库,用来完毕体系结构相关的特定操作,比如读取某些寄存器的内容。

利用该汇编库,检測当前系统CPU的型号及支持的特性,并选择对应的工作模式,如笔者机器的CPU为:

CPU family: GenuineIntel
CPU features: MMX SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 XD Intel64

在主程序执行时,依据CPU特性选择工作模式:

    if (mode == SSE2) {
print (L"(128-bit), size = ");
}
else if (mode == AVX) {
print (L"(256-bit), size = ");
}
else {
#ifdef __x86_64__
print (L"(64-bit), size = ");
#else
print (L"(32-bit), size = ");
#endif
}

笔者的CPU支持SSE2,不支持AVX,故採用128bit的数据位宽进行对应的内存读写操作。



以笔者的机器为例,測试主要分为下面几个部分:



|-------|128bit    |64bit |

|:-----:|:-----:|:----:|

|顺序读  |    |      |

|随机读    |    |      |

|顺序写    |    |      |

|随机写    |    |      |

能够选择是否旁路掉各级cache,笔者机器的CPU cache情况例如以下:

Cache 0: L1 data cache,        line size 64,  8-ways,    64 sets, size 32k
Cache 1: L1 instruction cache, line size 64, 8-ways, 64 sets, size 32k
Cache 2: L2 unified cache, line size 64, 16-ways, 4096 sets, size 4096k

用于读写的数据块大小从128B逐渐增大到128MB,因为各级cache的大小不同,进行内存读写时,较小的数据块会存放在cache中,较大的数据块则会经过cache存放在主存中。所以,随着数据块大小的添加,在几个节点上带宽的大小会有明显的跳变,主要原因就是到达了各级cache的容量上限,而转向下层存储。bandwidth会将測试结果生成一个日志文件,一张图表,这样的带宽的跳变在图表中有最直观的表现。如图,在32KB与4MB处带宽有明显的下降趋势

Bandwidth内存带宽測试工具的更多相关文章

  1. Linux 性能測试工具

    Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...

  2. ubuntu 14.04 LTS 安装webbentch压力測试工具

    近期在做 压力測试工具,除了apache的ab測试工具外,发现webbentch工具也不错,这里简介下这两个工具. 一.webbentch安装: wget http://blog.s135.com/s ...

  3. MySQL Study之--MySQL压力測试工具mysqlslap

    MySQL Study之--MySQL压力測试工具mysqlslap 一.Mysqlslap介绍     mysqlslap是MySQL5.1之后自带的benchmark基准測试工具,类似Apache ...

  4. Android性能測试 一些适用于Android Studio的代码审查和性能測试工具

    导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...

  5. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)

    作者 智晓锋 - 2014/07/14 自从斯诺登曝光美监听丑闻事件之后,我国政府就将信息安全问题上升到了国家安全的高度.基于此.国内的一家创业公司推出了智能型Android真机白盒測试以及开发辅助类 ...

  6. php性能优化(一)压力測试工具篇

    ab使用 Apache附带的压力測试工具ab,很easy使用,而且全然能够摸你各种条件对Webserver发起測试请求.ab能够直接在Webserver本地发起測试请求.这对于须要了解server的处 ...

  7. UnityTestTools測试工具

    由于工作关系,要了解Unity上的測试工具,该工具基于Nunit框架.通过查阅资料了解到在Unity5.3中做出了一些改变,自带的仅仅剩下单元測试工具,假设想用其它的工具比方断言.集成測试,就须要前往 ...

  8. Java单元測试工具JUnit 5新特性一览

    Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...

  9. webbench压力測试工具

    apache的測试工具ab 在并发100个以上后会出现错误.网上也有非常多改ab源代码来解禁的. 只是还是推荐一款比較好用的压力測试工具webbench wget http://blog.zyan.c ...

随机推荐

  1. Mylyn

    Mylyn(旧称Mylar)是eclipse的一个插件,用于将任务管理和上下文管理无缝集成到Eclipse中.1. 安装 下载相应的Mylyn zip包,解压缩开就是两个文件夹:features和pl ...

  2. 图的DFS递归和非递归

    看以前写的文章: 图的BFS:http://www.cnblogs.com/youxin/p/3284016.html DFS:http://www.cnblogs.com/youxin/archiv ...

  3. HDU p1294 Rooted Trees Problem 解题报告

    http://www.cnblogs.com/keam37/p/3639294.html keam所有 转载请注明出处 Problem Description Give you two definit ...

  4. 奔小康赚大钱(km)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  5. 1245 - Harmonic Number (II)(规律题)

    1245 - Harmonic Number (II)   PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 3 ...

  6. 【DWR】Annotation入门

    DWR简介:http://baike.baidu.com/view/73492.htm?fr=aladdin DWR2.0以后新增加了JDK5的注解(Annotation)功能,使用注解功能之后可以从 ...

  7. Citrix XenApp6.5 另类发布文档

    快捷方式.文档发布 第一种方式: 1.    创建快捷方式 2.    创建批处理文件(例如:lnk.bat),并输入以下内容: Start c:\users\public\desktop\adobe ...

  8. partial_sort_百度百科

    partial_sort_百度百科 partial_sort

  9. win7下wordPress本地搭建博客详解(深度亲测整理---傻瓜式详细教程)

    搭建一个wordPress作为一个个人博客本来是特别简单的事情,但是网上的各种转载让初学者举步维艰,我就本身条件而言,会java EE,懂mysql都花费了我好长时间才搭建好本地博客. 注意:这个是本 ...

  10. Poj 2777 Count Color(线段树基础)

    又毁三观了.......虽然题目数据有坑:区间[a,b]可能会有a>b的情况,但是我一开始没有考虑它也能过. 此外莫名其妙的TLE #include <iostream> #incl ...