系统和网络的实时性评估

1. 系统实时性

1.1 使用 cyclictest 测试系统实时性

使用方法可参考:https://www.cnblogs.com/klb561/p/9123457.html

1.1.1 工具介绍

cyclictestLinux 下用于测试实时系统性能的工具,它通过创建指定数量的实时线程,并测量这些线程的运行周期来评估系统的实时性能。

1.1.2 测试步骤

(1) 安装 cyclictest 工具(如果需要)。

# ubuntu 系统下安装 cyclictest
sudo apt-get install rt-tests

(2) cyclictest 的使用及参数简介。

常用参数简介:

参数 完整参数 参数含义
-a --affinity 设置测试线程的亲核性,或设置线程的 cpuset
-i --interval=INTV 线程睡眠的时间,默认是 1000us,即实时线程 1000us 被唤醒一次
-l --loops=LOOPS 循环次数,默认次数是0(无数次),
cyclictest 运行的时间等于interval×loops;
比如: -i 1000 -l 1000000 ,
总的循环时间为
1000*1000000=1000000000 us =1000s
-m --mlockall 将当前和接下来的内存通过mlock锁定,防止发生swap影响测试
-n --nanosleep 使用精度更高的纳秒睡眠 api:clock_nanosleep
-p --priority=PRIO 指定实时线程的优先级
-c --clock=CLOCK 选择时钟类型。默认是=0
0代表 CLOCK_MONOTONIC 1代表CLOCK_REALTIME
-h --histogram=US 测试完成后输出一个直方图,并输出延时小于US的次数统计。
-q --quiet 测试结束后再输出结果
-b --breaktrace=USEC 当出现大于 USEC 的延时后,立即退出测试
-t --threads=NUM 指定总线程数,若不指定,线程数等于 max_cpus;
若不使用-t参数,则线程数为1。

使用推荐参数执行 cyclictest 命令:

# 运行一个优先级为99,测试间隔为1000微秒,循环10000次的测试  
sudo cyclictest -t1 -p 99 -n -i 1000 -l 10000

(3)观察测试结果,包括最小值、平均值和最大值等性能指标。

输出结果含义:

例如:

T: 0 ( 5592) P:99 I:1000 C: 10000 Min: 2 Act: 15 Avg: 15 Max: 195

输出含义:

  • T: 0 序号为0的线程
  • P: 0 线程优先级为99
  • C: 10000 计数器。线程的时间间隔每达到一次,计数器加1
  • I: 1000 时间间隔为1000微秒(us)
  • Min: 最小延时(us)
  • Act: 最近一次的延时(us)
  • Avg:平均延时(us)
  • Max: 最大延时(us)

表明当前机器上的系统最小延时为2,平均为15,最大的为 195。

1.1.3 测试结果分析

根据测试结果,对比标准值,分析系统的实时性能是否满足预期要求。

为了 ARCS 软件能够正常运行,经比较不同系统下的测试结果,针对各项性能指标提供以下标准值:

Min: 14 Avg: 32 Max: 2335

只有当前被测试系统的测试结果小于该标准值(主要参考 Avg)时,表示当前系统的实时性符合要求,可用;

1.2 使用 stress 测试系统性能

1.2.1 工具介绍

stress 是一个 linux 的压力测试工具,专门用于对设备的 CPU、IO、内存、负载、磁盘等进行压测。

1.2.2 测试步骤

(1) 安装 stress 工具(如果需要)。

# ubuntu 系统下安装 `stress`
sudo apt-get install stress 
# ubuntu 系统下安装 `sysstat`
sudo apt-get install sysstat

(2) stress 的使用及参数简介。

常用参数简介:

参数 完整参数 参数含义
-h --help 显示帮助信息
-v --version 显示软件版本信息
-t --timeout secs 指定运行多少秒
-c --cpu forks 产生多个处理sqrt()函数的CPU进程
-m --vm forks
--vm-bytes bytes
--vm-hang
产生多个处理 malloc()内存分配函数的进程,后接进程数量
指定内存的byte数,默认值是1
表示 malloc分配的内存多少时间后在free()释放掉
-i --io forks 产生多个处理sync()函数的磁盘I/O进程
-d --hdd
--hdd-bytes bytes
写进程,写入固定大小,通过 mkstemp() 函数写入当前目录
指定写的byte数,默认 1G
-q --quiet 程序在运行的过程中不输出信息

使用推荐参数执行 stress 命令:

# 测试CPU负荷: 增加4个cpu进程,处理sqrt()函数函数,以提高系统CPU负荷  
sudo stress –c 4
# 内存测试: 新增4个io进程,10个内存分配进程,每次分配大小1G,分配后不释放,测试100S
sudo stress –i 4 –vm 10 –vm-bytes 1G –vm-hang 100 –timeout 100s  
# 磁盘I/O测试: 新增1个写进程,每次写3G文件块  
sudo stress –d 1 --hdd-bytes 3G

(3)监控被测试机的性能。

在 stress 测试运行期间,通过 Linux 系统的内置工具(如top、iostat等)来查看性能表现,如CPU使用率、内存占用、磁盘I/O等。

使用 top 命令监控整体使用情况

输出结果含义:

例如:

top - 10:29:57 up  1:48,  1 user,  load average: 0.93, 0.48, 0.44
Tasks: 354 total,   1 running, 270 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.5 us,  0.6 sy,  0.0 ni, 97.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  8140564 total,  3525812 free,  2053556 used,  2561196 buff/cache
KiB Swap:  8384508 total,  8384508 free,        0 used.  5851856 avail Mem 
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                            
  1424 root      20   0  519060 111020  47312 S   3.7  1.4   0:42.58 Xorg                                     
  1450 root      20   0 1046116 200556  36940 S   2.3  2.5   3:18.02 node                                   
  3284 root      20   0 1585248 117920  78212 S   2.3  1.4   0:35.78 compiz

load average : 当前系统负载的平均值,后面的3个值分别为1分钟、5分钟、15分钟前进程的平均数。一般认为这个数超过CPU数目时,表示CPU比较吃力地负载当前系统所包含的进程。

表示 CPU 的几个参数:

  • us:用户空间占用 CPU 百分比

  • sy:内核空间占用 CPU 百分比

  • ni:用户进程空间内改变过优先级的进程占用 CPU 百分比

  • id:空闲 CPU 百分比

  • wa:等待输入输出的 CPU 时间百分比

  • 输入 top 后,按大写P,以 CPU 占用大小排序,按 M,以内存占用大小排序

使用 iostat 命令查看 I/O读写负载情况

sudo iostat –x 1 10 命令查看:

输出结果含义:

例如:

[root@localhost ~]# sudo iostat –x 1 10
Linux 4.14.195-rt94 (aubo)     2024年05月17日     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.76    0.01    1.33    0.09    0.00   86.80

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
loop0             0.00     0.00    0.00    0.00     0.00     0.00     2.00     0.00    1.00    1.00    0.00   0.00   0.00
sda               3.98     2.03   16.33    0.93   285.76    28.50    36.42     0.02    0.97    0.78    4.34   0.41   0.71
dm-0              0.00     0.00   20.25    2.95   279.25    28.50    26.53     0.03    1.48    1.01    4.75   0.30   0.70
dm-1              0.00     0.00    0.01    0.00     0.16     0.00    51.91     0.00    0.27    0.27    0.00   0.27   0.00

Linux 4.14.195-rt94 是内核的版本号,aubo 则是主机的名字, 2024年05月17日 当前的日期, _x86_64_ 是CPU的架构, (4 CPU)显示了当前系统的CPU的数量。

CPU 属性值说明:

  • %user:CPU 处在用户模式下的时间百分比。
  • %nice:CPU 处在带NICE值的用户模式下的时间百分比。
  • %system:CPU 处在系统模式下的时间百分比。
  • %iowait:CPU 等待输入输出完成时间的百分比。
  • %steal:管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比。
  • %idle:CPU 空闲时间百分比。

1.2.3 测试结果评估

先用 top 命令查看,wa 的值标识 I/O 等待所占用的 CPU 时间的百分比,高于 30% 时表示 I/O 压力高。 load average 超过CPU数目时,表示 CPU 比较吃力地负载当前系统所包含的进程,可以根据%CPU查看是那个进程占用 cpu 比较高,根据 %MEM 查看是那个进程使用内存比较高。

再用 iostat 命令查看,如果 %util 接近 100%,说明产生的 I/O 请求太多,I/0 系统已经满负荷,该磁盘可能存在瓶颈,%idle小于70%,表示 I/0 压力比较大。%iowait 高表示 IO 存在瓶颈;如果 await 值持续增加,那么可能存在其他系统瓶颈,如 CPU 或内存不足。

2. 网络实时性

2.1 使用 ping 测试通讯实时性

使用方法可参考:https://www.cnblogs.com/gao-qiang/archive/2012/10/05/2712365.html

2.1.1 工具介绍

ping 是常用的网络诊断工具,用于测试网络连接的可达性和实时性。它通过发送 ICMP 回显请求并等待响应来测量网络延迟。

2.1.2 测试步骤

(1) 打开终端或命令提示符。

(2) ping 的使用及参数简介。

命令格式:

ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface] [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline] [-W timeout] [hop1 ...] destination

参数简介:

  • -d 使用Socket的SO_DEBUG功能。
  • -f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。

  • -n 只输出数值。

  • -q 不显示任何传送封包的信息,只显示最后的结果。
  • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
  • -R 记录路由过程。
  • -v 详细显示指令的执行过程。
  • -c 数目:在发送指定数目的包后停止。
  • -i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
  • -I网络界面:使用指定的网络界面送出数据包。
  • -p 范本样式:设置填满数据包的范本样式。
  • -s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
  • -t 存活数值:设置存活数值TTL的大小。

使用推荐参数执行 ping 命令:

# 向测试机每隔 1ms 发送一次,共发送100个长度为 1024byte 的数据包  
ping -i 0.001 -s 1024 -c 100 192.168.120.206

(3)观察 ping 命令的输出结果,包括响应时间、丢包率等指标。

输出结果含义:

例如:

ping -i 0.001 -s 1024 -c 100 192.168.11.112

PING 192.168.11.112 (192.168.11.112) 1024(1052) bytes of data.
1032 bytes from 192.168.11.112: icmp_seq=1 ttl=128 time=3.17 ms
1032 bytes from 192.168.11.112: icmp_seq=2 ttl=128 time=2.45 ms
1032 bytes from 192.168.11.112: icmp_seq=3 ttl=128 time=2.59 ms
1032 bytes from 192.168.11.112: icmp_seq=4 ttl=128 time=2.50 ms
...
1032 bytes from 192.168.11.112: icmp_seq=99 ttl=128 time=2.37 ms
1032 bytes from 192.168.11.112: icmp_seq=100 ttl=128 time=2.52 ms

--- 192.168.11.112 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 429ms
rtt min/avg/max/mdev = 1.373/2.813/13.869/2.093 ms

输出含义:

ping 命令每隔 1ms 发送一次,一共发送100个长度为 1024byte 的数据包 ,下面的1032 bytes from 192.168.11.112: icmp_seq=99 ttl=128 time=2.37 ms,表示本地主机已收到从被测试的机器上返回的信息,TTL 为 128,最下面为统计数据,表示收到了(Receieved)100个,共丢失了(Lost)0个(即没有丢失),发送时间最小为 1.373 毫秒,最大 13.869 毫秒,平均时间为 2.813 毫秒。

2.1.3 测试结果分析

根据测试结果,对比标准值,分析网络的实时性能是否满足预期要求。

为了 ARCS 软件能够正常运行,经比较不同系统下的测试结果,针对各项性能指标提供以下标准值:

无线环境(无线局域网)

min=2.373 avg=4.813 max=26.869 ms

有线环境(网线直连)

min=0.397 avg=0.476 max=0.997 ms

只有当前系统测试的结果小于该标准值(主要参考 avg)时,表示当前网络的实时性符合要求,可用;

2.2 使用 iperf 测试网络带宽

使用方法可参考:https://www.cnblogs.com/qiynet/p/10767962.html

2.2.1 工具介绍

iperf 是一个网络性能测试工具。Iperf 可以测试 TCP 和 UDP 带宽质量。Iperf 可以测量最大 TCP 带宽,

具有多种参数和 UDP 特性。Iperf 可以报告带宽,延迟抖动和数据包丢失。

2.2.2 测试步骤

(1) 安装 iperf 工具(如果需要)。

使用 iperf 工具测带宽,分为服务端与客户端,测试机(客户端)和被测试机(服务端)都要安装 iperf工具。

# ubuntu 系统下安装 iperf
sudo apt-get install iperf

(2) iperf 的使用及参数简介。

常用参数简介:

  • -s 以server模式启动;
  • -c host 以client模式启动,host是server端地址;

通用参数:

  • -f [kmKM] 分别表示以 Kbits, Mbits, KBytes, MBytes 显示报告,默认以 Mbits 为单位;
  • -i sec 以秒为单位显示报告间隔;
  • -l 缓冲区大小,默认是 8KB;
  • -m 显示 tcp 最大 mtu 值 ;
  • -o 将报告和错误信息输出到文件;
  • -p 指定服务器端使用的端口或客户端所连接的端口 ;
  • -u 使用 udp 协议;
  • -w 指定 TCP 窗口大小,默认是 8KB;
  • -B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数);
  • -C 兼容旧版本(当 server 端和 client 端版本不一样时使用);
  • -M 设定 TCP 数据包的最大mtu值;
  • -N 设定 TCP 不延时;
  • -V 传输 ipv6 数据包;

server 专用参数:

  • -D 以服务方式运行;
  • -R 停止 iperf 服务;

client 端专用参数:

  • -d 同时进行双向传输测试;
  • -n 指定传输的字节数;
  • -r 单独进行双向传输测试;
  • -t 测试时间,默认20秒;
  • -F 指定需要传输的文件;
  • -T 指定 ttl 值;

使用推荐参数执行 ping 命令:

# 被测试机 ip:192.168.10.222
iperf -s
# 测试机  
iperf -c 192.168.10.222 -t 60  -d

(3) 观察 iperf 命令的输出结果;

输出结果含义:

例如:

Server listening on TCP port 5001         
TCP window size: 85.3 KByte (default)    
------------------------------------------------------------
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-60.0 sec   112 MBytes  94.1 Mbits/sec

表明这台机器的网络上下行带宽都接近 94Mbits/sec

2.2.3 测试结果分析

根据测试结果,对比标准值,分析网络的带宽性能是否满足预期要求。

为了 ARCS 软件能够正常运行,经比较不同系统下的测试结果,针对各项性能指标提供以下标准值:

无线网络带宽: 60Mbits/sec 有线网络代码: 90Mbits/sec

只有当前系统测试的结果网络带宽大于标准值时,表示当前网络的性能符合要求,可用;

2.3 使用 Netperfsockperf 工具测试网络性能

使用方法参见:网络性能测试最佳实践

2.3.1 Netperf 测试网络带宽

(1) 分别连接测试机和辅助测试机。

(2) 分别在测试机和辅助测试机上执行以下命令,下载Netperf。

wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz

(3) 分别在测试机和辅助测试机上执行以下命令,安装Netperf和sar监控工具。

执行以下命令,解压Netperf包。

sudo apt-get install -y gcc autoconf automake libtool sysstat  
tar -zxvf netperf-2.7.0.tar.gz

(4) 执行以下命令,查询 gcc 版本号; 要求测试机和辅助测试机安装的gcc版本低于或等于10版本。

gcc -v 2>&1

(5) 执行以下命令,安装 Netperf 和 sar 监控工具。

cd netperf
sudo ./configure
sudo make && sudo make install

(6) 在测试机上执行以下命令,启动 64 个 netserver 服务。

#!/bin/bash
for j in `seq 64`; do
    netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1  &
done

(7) 在测试机上执行以下命令,查询测试机的私网 IP 地址。

ifconfig || ip addr

在测试机上执行以下命令,测试网络带宽。

sar -n DEV 1

在测试结果中查看 rxkB/s 列的数据值,rxkB/s 表示该测试机每秒钟接收的数据包的大小,单位为千字节(KB)。与带宽(kbps)转换关系为:带宽(kbps)= 千字节数(rxkB/s)* 8

示例如下图所示:

image-20240516173436167

2.3.2 sockperf 测试网络时延

(1) 分别远程连接测试机和辅助测试机。

(2) 分别在测试机和辅助测试机上执行以下命令,安装sockperf。

sudo apt-get install -y autoconf automake libtool gcc-c++
cd /opt
sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz
sudo tar -zxf 3.8.tar.gz
cd sockperf-3.8/
sudo ./autogen.sh
sudo ./configure
sudo make -j `cat /proc/cpuinfo| grep process | wc -l`
sudo make install

(3) 在测试机上执行以下命令,查询测试机的私网 IP 地址。

ifconfig || ip addr
image.png

(4) 在测试机上执行以下命令,启动服务。

sockperf sr --tcp --daemonize

(5) 在辅助测试机上执行以下命令,向测试机输入流量。

cd
# <测试机私网IP地址>需替换为上一步查询的实际测试机的私网IP地址。
sockperf pp -i <测试机私网IP地址> --tcp -t 30 -m 14 --full-log=result.json

(6) 查看结果数据,示例如下图所示。

输出结果含义:

以avg-latency开头的结果数据表示平均时延,单位为us。

以percentile 99.000开头的结果数据表示99分位时延,单位为us。

例如:

image-20240516173934573

表明当前被测试机的时延约为 66 us;

2.3.3 测试结果分析

根据测试结果,对比标准值,分析网络的性能是否满足预期要求。

为了 ARCS 软件能够正常运行,经比较不同系统下的测试结果,针对各项性能指标提供以下标准值:

网络带宽:rxkB/s = 4600 网络时延:avg-latency = 70 us

只有当前系统测试的结果网络带宽大于标准值,网络时延小于标准值时,表示当前网络的实时性符合要求,可用;

备注: 使用 Netperfsockperf 工具测试的结果比 ping 更精确;

3. 应用示例

3.1 环境说明

此次测试在无线局域网中进行;

3.2 测试步骤

1. 使用 cyclictest 测试系统实时性

sudo cyclictest -p 99 -i 1000 -l 10000

结果分析:

测试数据等于标准值(Min: 14 Avg: 32 Max: 2335),该被测试机的系统实时性满足要求;

2. 使用 ping 测试通讯实时性和带宽

结果分析:

测试数据小于标准值(min=2.373 avg=4.813 max=26.869 ms ),该被测试机的网络实时性满足要求;

3 . 使用 iperf 测试带宽

结果分析:

测试数据大于标准值(60Mbits/sec),该被测试机的网络带宽满足要求;

4. 使用 Netperfsockperf 测试

(1) 测试网络带宽

(2) 测试网络时延
查看结果数据,如下图所示:

结果分析:

测试数据中,网络带宽约等于标准值(4600 rxkB/s),网络时延约等于标准值(70 us),该被测试机的网络带宽和网络时延均满足要求;

results matching ""

    No results matching ""