• Bandwidth内存带宽測试工具


    本博文为原创,遵循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处带宽有明显的下降趋势



  • 相关阅读:
    字符编码笔记:ASCII,Unicode 和 UTF-8
    nginx 负载均衡设置
    ubuntu 修改时区
    js 高阶函数 filter
    js 高阶函数 map reduce
    省市联级菜单--js+html
    php代码优化技巧
    json、xml ---- 数据格式生成类
    初识设计模式(1)---单例、工厂、注册树
    php 链式操作的实现 学习记录
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3900050.html
Copyright © 2020-2023  润新知