在飞腾FT2000+/64上的UnixBench测试和优化过程

在飞腾FT2000+/64上的UnixBench测试和优化过程

硬件系统描述

组件 描述
CPU FT2000+/64, 硬件加速部件为 fp asimd evtstrm crc32 cpuid
memory 128GB

软件系统描述简单描述一下:

相关软件 版本号 查看命令
Linux内核 5.9.1 unam -a
GCC编译器 8.3.1 gcc -v
GLibc库 2.28 ldd --version
Unixbench Version 5.1.3

另外:文件系统类型为xfs

因为我们Unixbench是在/home目录下进行测试,所以根据mount命令找到下面信息
/dev/sda5 on /home type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

UnixBench测试用例分析

备注:不包含图形测试部分

测试用例 依赖动态库
dhry2reg libc
whetstone-double libc、 libm
execl libc
fstime libc
pipe libc
context1 libc
spawn libc
syscall libc
looper libc

GLibc库介绍

几乎所有C程序都要调用glibc的库函数,所以glibc是Linux平台C程序运行的基础。glibc提供一组头文件和一组库文件,最基本、最常用的C标准库函数和系统函数在libc.so库文件中,几乎所有C程序的运行都依赖于libc.so,有些做数学计算的C程序依赖于libm.so,以后我们还会看到多线程的C程序依赖于libpthread.so。以后我说libc时专指libc.so这个库文件,而说glibc时指的是glibc提供的所有库文件。

第一次测试结果(单线)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   22876131.1   1960.3
Double-Precision Whetstone                       55.0       3793.8    689.8
Execl Throughput                                 43.0       2605.6    606.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     409345.3   1033.7
File Copy 256 bufsize 500 maxblocks            1655.0     124795.5    754.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    1131279.2   1950.5
Pipe Throughput                               12440.0     699804.3    562.5
Pipe-based Context Switching                   4000.0     105264.7    263.2
Process Creation                                126.0       3776.8    299.7
Shell Scripts (1 concurrent)                     42.4       3443.9    812.2
Shell Scripts (8 concurrent)                      6.0       1052.5   1754.1
System Call Overhead                          15000.0     544993.7    363.3
                                                                   ========
System Benchmarks Index Score                                         743.7

第一次测试结果(64线)

修改Run脚本的
'system' => { 'name' => "System Benchmarks", 'maxCopies' => 16 },
将16修改为64或更大,才可以运行64线的测试

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0 1449204777.6 124182.1
Double-Precision Whetstone                       55.0     242239.1  44043.5
Execl Throughput                                 43.0       5791.5   1346.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     432326.9   1091.7
File Copy 256 bufsize 500 maxblocks            1655.0     139901.0    845.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    1270166.2   2189.9
Pipe Throughput                               12440.0   44426009.8  35712.2
Pipe-based Context Switching                   4000.0    4071857.2  10179.6
Process Creation                                126.0      14748.2   1170.5
Shell Scripts (1 concurrent)                     42.4      18286.5   4312.9
Shell Scripts (8 concurrent)                      6.0       2376.7   3961.2
System Call Overhead                          15000.0    2648428.6   1765.6
                                                                   ========
System Benchmarks Index Score                                        4899.0

1. 对UnixBench进行编译优化

在编译时默认的优化级别是"2"(使用"-O2"选项)
OPTON = -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall
基本思路:

  1. -O3: 在O2的基础上进行更多的优化
  2. 编译选项修改为
    -O3 -fomit-frame-pointer -fforce-addr -ffast-math -Wall
    -march=armv8-a \
    -mtune=cortex-a53

2. 服务裁剪

ps aux查看系统线程,用systemctl -a查看后台服务,最终用
systemclt stop暂时停止服务,或者用systemctl disable用于停止服务。

服务 描述
nfs-server.service 网络文件系统服务
irqbalance.service 中断均衡服务
numad.service numa调度服务
plymouth-xx.service plymouth启动过程服务
cups.service 打印服务
upower.service 电池管理服务
gdm.service 图形登录服务
rhsmcertd.service 软件升级和管理服务
avahi-daemon.service DNS发现和组播服务

注意:请用
systemctl set-default multi-user.target将系统设置为字符界面。

3. 存储和IO调度

主要考虑介质、IO调度算法和文件系统类型之间的匹配关系。
IO调度算法选择基本原则是:

  1. 内存、PCIe nvme用none
  2. SSD固态盘用mq-deadline
  3. 普通机械磁盘用bfq

当前IO调度类型,根据cat /sys/block/sda/queue/scheduler可以查询到。
直接修改echo xxx > /sys/block/sda/queue/scheduler

3.1 介质

最好是内存,然后PCIe NVMe,然后是 SSD固态盘,最后才是硬盘。硬盘本身也可以采用软硬raid方式来提升IO性能。

1. 用内存的方式(后面我们不讨论)

用内存方式,直接在/dev/shm目录下运行Unixbench测试程序即可。

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   24700949.1   2116.6
Double-Precision Whetstone                       55.0       3795.0    690.0
Execl Throughput                                 43.0       2630.2    611.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     529035.4   1335.9
File Copy 256 bufsize 500 maxblocks            1655.0     168548.7   1018.4
File Copy 4096 bufsize 8000 maxblocks          5800.0    1346940.5   2322.3
Pipe Throughput                               12440.0     698881.7    561.8
Pipe-based Context Switching                   4000.0     106585.3    266.5
Process Creation                                126.0       3794.2    301.1
Shell Scripts (1 concurrent)                     42.4       3483.8    821.6
Shell Scripts (8 concurrent)                      6.0       1054.8   1757.9
System Call Overhead                          15000.0     544360.1    362.9
                                                                   ========
System Benchmarks Index Score                                         798.0

2. 单SSD固态硬盘(我们只讨论这种情况,因为条件也就这样)

1)单SS固态硬盘
当前存储是Marvell 9215 SATA控制器,根据lspci -v可以获得

09:00.0 SATA controller: Marvell Technology Group Ltd. Device 9215 (rev 11) (prog-if 01 [AHCI 1.0])
	Subsystem: Marvell Technology Group Ltd. Device 9215
	Flags: bus master, fast devsel, latency 0, IRQ 23, NUMA node 0
	I/O ports at 4020 [size=8]
	I/O ports at 4030 [size=4]
	I/O ports at 4028 [size=8]
	I/O ports at 4034 [size=4]
	I/O ports at 4000 [size=32]
	Memory at 80061210000 (32-bit, non-prefetchable) [size=2K]
	Expansion ROM at 80061200000 [disabled] [size=64K]
	Capabilities: [40] Power Management version 3
	Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit-
	Capabilities: [70] Express Legacy Endpoint, MSI 00
	Capabilities: [e0] SATA HBA v0.0
	Capabilities: [100] Advanced Error Reporting
	Kernel driver in use: ahci

上面看到SATA控制器驱动程序为ahci,中断号为23,属于NUMA节点0,即CPU0~CPU7为第O个NUMA节点(这个不一定正确,本机是正确的)。
cat /proc/interrupsts | grep ahci 观察到当前SATA控制器中断确实是在CPU0~CPU7上。

2)根据磁盘类型选择IO调度类型。
硬盘是Samsung SSD 860 EVO 500GB,根据hdparm -i /dev/sda或者smartclt -i /dev/sda可以获得。

[root@localhost ~]# smartctl -i /dev/sda
smartctl 6.6 2017-11-05 r4594 [aarch64-linux-5.9.1] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     Samsung SSD 860 EVO 500GB
Serial Number:    S3Z3NB0M534111K
LU WWN Device Id: 5 002538 e41009a48
Firmware Version: RVT03B6Q
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Thu Nov 19 14:06:18 2020 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

fs defaults,async,noatime,nodiratime,barrier=0

猜你喜欢

转载自blog.csdn.net/lsshao/article/details/109764374