LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

Buildroot:Debugging, profiling and benchmark(2)

6 dhrystone

Dhrystone是一个基准测试程序,它通过模拟一系列简单的算术运算和内存访问操作来测量CPU的整数运算和逻辑运算性能,其测试结果以DMIPS/MHz为单位,表示在Dhrystone标准测试方法下的MIPS值。

参考《dhrystone计算和测试 - ArnoldLu - 博客园》。

7 dieharder

dieharder用于测试随机数生成器质量的程序。它执行一系列统计测试,以确定随机数生成器是否产生高质量的随机数。这些测试包括各种统计和谱分析,旨在揭示随机数序列中的任何非随机性或模式。

dieharder 是一个随机数生成器测试程序,用于评估随机数生成器(RNG)的随机性。

下面是测试结果说明:

1. 程序信息:
- dieharder version 3.31.1 Copyright 2003 Robert G. Brown:显示程序版本和版权信息。
- rng_name:随机数生成器的名称。
- rands/second:每秒生成的随机数数量。
- Seed:随机数生成器的种子值。

2. 测试结果:
- test_name:测试的名称。
- ntup:测试中使用的元组数量。
- tsamples:测试样本数量。
- psamples:进行的测试次数。
- p-value:测试结果的概率值,用于评估随机性。
- Assessment:测试结果的评估,可能是 PASSED(通过)或 WEAK(弱)。

3. 具体测试:
- diehard_birthdays:测试随机数序列中的生日悖论现象。
- diehard_operm5:测试随机数序列的排列随机性。
- diehard_rank_32x32 和 diehard_rank_6x8:测试随机数的秩次分布。
- diehard_bitstream:测试随机位流的随机性。
- diehard_opso 和 diehard_oqso:测试重叠子序列的随机性。
- diehard_dna:测试随机数序列的DNA序列随机性。
- diehard_count_1s_str 和 diehard_count_1s_byt:测试随机数序列中1的比例。
- diehard_parking_lot:测试随机数序列的停车问题。
- diehard_2dsphere 和 diehard_3dsphere:测试二维和三维球体的随机性。
- diehard_squeeze:测试随机数的压缩随机性。
- diehard_sums:测试随机数序列的和的随机性。
- diehard_runs:测试随机数序列的连续序列。
- diehard_craps:测试随机数序列的craps游戏模拟。
- marsaglia_tsang_gcd:测试随机数序列的最大公约数。
- sts_monobit、sts_runs、sts_serial:测试随机数序列的单比特、运行和序列测试。
- rgb_bitdist、rgb_minimum_distance、rgb_permutations、rgb_lagged_sum:测试随机数的位分布、最小距离、排列和滞后和。
- dab_bytedistrib、dab_dct、dab_filltree、dab_filltree2、dab_monobit2:测试随机数的字节分布、离散余弦变换、填充树和单比特分布。

每个测试后面跟着的 PASSED 或 WEAK 表示该测试是否通过。PASSED 表示测试结果符合随机性预期,而 WEAK 表示测试结果表现出一定的非随机性,可能需要进一步分析。

dieharder -a
#=============================================================================#
#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #
#=============================================================================#
   rng_name    |rands/second|   Seed   |
        mt19937|  1.31e+07  | 955896505|
#=============================================================================#
        test_name   |ntup| tsamples |psamples|  p-value |Assessment
#=============================================================================#
   diehard_birthdays|   0|       100|     100|0.42332790|  PASSED
      diehard_operm5|   0|   1000000|     100|0.87160711|  PASSED
  diehard_rank_32x32|   0|     40000|     100|0.99030303|  PASSED
    diehard_rank_6x8|   0|    100000|     100|0.52018571|  PASSED
   diehard_bitstream|   0|   2097152|     100|0.68813649|  PASSED
        diehard_opso|   0|   2097152|     100|0.98049878|  PASSED
        diehard_oqso|   0|   2097152|     100|0.44585840|  PASSED
         diehard_dna|   0|   2097152|     100|0.08874727|  PASSED
diehard_count_1s_str|   0|    256000|     100|0.99672632|   WEAK
diehard_count_1s_byt|   0|    256000|     100|0.90390806|  PASSED
 diehard_parking_lot|   0|     12000|     100|0.79252967|  PASSED
    diehard_2dsphere|   2|      8000|     100|0.63298492|  PASSED
    diehard_3dsphere|   3|      4000|     100|0.66506193|  PASSED
     diehard_squeeze|   0|    100000|     100|0.01733991|  PASSED
        diehard_sums|   0|       100|     100|0.00401878|   WEAK
        diehard_runs|   0|    100000|     100|0.39253104|  PASSED
        diehard_runs|   0|    100000|     100|0.07728590|  PASSED
       diehard_craps|   0|    200000|     100|0.69536299|  PASSED
       diehard_craps|   0|    200000|     100|0.67717207|  PASSED
 marsaglia_tsang_gcd|   0|  10000000|     100|0.89062810|  PASSED
 marsaglia_tsang_gcd|   0|  10000000|     100|0.04664388|  PASSED
         sts_monobit|   1|    100000|     100|0.04015319|  PASSED
            sts_runs|   2|    100000|     100|0.93875784|  PASSED
          sts_serial|   1|    100000|     100|0.74001144|  PASSED
...
          sts_serial|  16|    100000|     100|0.29246486|  PASSED
          sts_serial|  16|    100000|     100|0.46699209|  PASSED
         rgb_bitdist|   1|    100000|     100|0.20500430|  PASSED
...
         rgb_bitdist|  12|    100000|     100|0.95141699|  PASSED
rgb_minimum_distance|   2|     10000|    1000|0.64645565|  PASSED
rgb_minimum_distance|   3|     10000|    1000|0.96015492|  PASSED
rgb_minimum_distance|   4|     10000|    1000|0.25532229|  PASSED
rgb_minimum_distance|   5|     10000|    1000|0.97112238|  PASSED
    rgb_permutations|   2|    100000|     100|0.91583897|  PASSED
    rgb_permutations|   3|    100000|     100|0.19146252|  PASSED
    rgb_permutations|   4|    100000|     100|0.34579236|  PASSED
    rgb_permutations|   5|    100000|     100|0.29236281|  PASSED
      rgb_lagged_sum|   0|   1000000|     100|0.44858892|  PASSED
      rgb_lagged_sum|   1|   1000000|     100|0.94388709|  PASSED
...
      rgb_lagged_sum|  31|   1000000|     100|0.51862100|  PASSED
      rgb_lagged_sum|  32|   1000000|     100|0.11644969|  PASSED
     rgb_kstest_test|   0|     10000|    1000|0.04894941|  PASSED
     dab_bytedistrib|   0|  51200000|       1|0.26939700|  PASSED
             dab_dct| 256|     50000|       1|0.08135305|  PASSED
Preparing to run test 207.  ntuple = 0
        dab_filltree|  32|  15000000|       1|0.88545329|  PASSED
        dab_filltree|  32|  15000000|       1|0.12176952|  PASSED
Preparing to run test 208.  ntuple = 0
       dab_filltree2|   0|   5000000|       1|0.96612997|  PASSED
       dab_filltree2|   1|   5000000|       1|0.63543455|  PASSED
Preparing to run test 209.  ntuple = 0
        dab_monobit2|  12|  65000000|       1|0.17499508|  PASSED

8 fio

8.1 fio作用

FIO(Flexible I/O Tester)是一个用于Linux的多线程I/O测试工具,它可以用来测试文件系统的性能,包括块设备和网络文件系统。FIO的主要作用包括:

1. 基准测试和压力测试:用于基准测试和压力/硬件验证,支持多种I/O引擎,如sync、mmap、libaio、posixaio等。
2. I/O优先级:适用于较新的Linux内核,可以评估I/O优先级。
3. 多种I/O模式:支持顺序读写、随机读写以及混合读写等多种I/O模式。
4. 详细的性能报告:显示各种I/O性能信息,包括完整的IO延迟和百分位数。

8.2 fio测试

编写FIO workload主要有两种方式:直接传参和使用job文件。

8.2.1 直接传参测试

直接在命令行中指定参数来定义测试的工作负载。例如:

fio -filename=test.data -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=64M -numjobs=4 -runtime=30 -group_reporting -name=mytest

这个命令表示:
- filename=test.data:测试文件名称。
- direct=1:使用direct I/O,绕过OS的buffer。
- iodepth 1:I/O操作的队列深度。
- thread:使用线程进行测试。
- rw=read:顺序读测试。
- ioengine=psync:I/O引擎。
- bs=16k:块大小为16k。
- size=64M:测试文件大小。
- numjobs=4:并发执行的作业数。
- runtime=300:测试运行时间。
- group_reporting:汇总报告。
- name=mytest:作业名称。

8.2.2 使用Job文件测试

Job文件是一种更灵活的方式来定义多个测试工作负载。以下是一个简单的job文件示例:

[global]
ioengine=libaio
iodepth=4
direct=1
runtime=60
time_based=1
size=64M
group_reporting=1
thread=1
numjobs=2
bs=4k
name='test'
allow_mounted_write=1
nrfiles=1

[seqread]
rw=read
filename=fio_read_test.txt

[seqwrite]
rw=write
filename=fio_write_test.txt

这个job文件定义了两个测试工作负载:
- seqread:顺序读测试。
- seqwrite:顺序写测试。

每个工作负载可以有自己的参数,如rw(读写模式)、filename(测试文件路径)等。使用job文件运行FIO时,只需指定文件名即可:

fio fio.conf

 8.2.3 Jog选项

按照您的要求,以下是FIO job文件中的global和job-specific选项的说明:

Global Options(全局选项)

- ioengine:定义使用的I/O引擎。可选值:libaio(Linux下的异步I/O引擎),psync(进程同步I/O引擎),posixaio(POSIX异步I/O引擎),sync(同步I/O引擎)。

- numjobs:定义并发执行的作业(线程或进程)数量。可选值:任何正整数,表示作业的数量。

- rw:定义I/O操作的类型。可选值:read(顺序读取),write(顺序写入),randread(随机读取),randwrite(随机写入),randrw(随机混合读写)。

- bs:定义块大小。可选值:例如4k、8k、256k等,表示每次I/O操作的大小。

- size:定义测试文件的大小。可选值:例如128m、1G等,表示文件的总大小。

- runtime:定义测试运行时间。可选值:时间值,例如60秒或4h(4小时)。

- time_based:如果设置为1,即使文件大小达到size指定的大小,测试也会继续直到runtime时间结束。可选值:0(基于大小),1(基于时间)。

- group_reporting:如果设置,将汇总报告。可选值:1(开启汇总报告)。

Job-Specific Options(作业特定选项)

- filename:定义测试的文件或设备。可选值:文件路径或设备名,表示I/O操作的目标。

- iodepth:定义异步I/O的队列深度。可选值:任何正整数,表示I/O操作的队列深度。

- direct:定义是否使用直接I/O。可选值:0(使用buffered I/O),1(使用direct I/O)。

- randrepeat:定义随机I/O模式下是否重复之前的模式。可选值:0(不重复),1(重复)。

- norandommap:定义是否使用随机映射。可选值:1(不使用随机映射)。

- end_fsync:定义测试结束时是否执行fsync。可选值:1(执行fsync)。

- write_iops_log:定义写IOPS日志的文件名。可选值:日志文件的路径,用于记录写入IOPS数据。

- stonewall:定义所有job完成后才继续执行后续job。可选值:1(所有job完成后继续)。

这些选项可以根据测试需求进行组合和配置,以实现不同的测试场景和目标。每个job可以通过覆盖全局选项来设置自己的特定参数。

9 gdb、gdbserver

GDB(GNU Debugger)是一个用于调试程序的命令行工具,而gdbserver是一个支持远程调试的服务器端组件,GDB通过gdbserver与远程目标系统上的程序进行交互,实现远程调试功能。简而言之,GDB是调试器客户端,gdbserver是调试器服务器,它们协同工作以允许开发者在本地机器上对远程机器上的程序进行调试。

参考《GDB(The GNU Project Debugger)的基本使用方法 - ArnoldLu - 博客园》。

10 iozone

IOzone是一个文件系统的benchmark工具,可以测试不同操作系统中文件系统的读写性能。它支持多种测试模式,包括顺序读写、随机读写、反向读、跳跃读、fwrite/fread等。IOzone能够生成Excel格式的测试报告,方便用户直观地查看和分析测试结果。

iozone -a -n 16K -g 4M -i 0 -i 1 -i 5 -f test.data -Rb ./iozone.xls

这个命令执行全面测试,设置最小测试文件大小为16KB,最大测试文件为4MB,测试写入、读取和跳跃读模式,并将结果输出到Excel文件中。

Excel结果如下:

 

posted on 2024-12-06 23:59  ArnoldLu  阅读(21)  评论(0编辑  收藏  举报

导航