单核Cortex-A9的性能研究

这篇也是从此前的blog上转过来的,其初始发表的时间是2015年1月29日。

本来昨天想把Odroid-C1板子的kernel换掉,这一步是成功了,但卡在了编译gator驱动所需要的CONFIG_TRACING上。一旦使能了内核的TRACING,怎么搞都启动不了,在官网发帖问了问,也还没有好的方案,在这里。现在回来,看看A9的单核性能吧。

1. 配置Kernel以选择不同的核心数目

这部分我们需要修改Linux kernel的config文件,使得系统仅使用双核和单核Cortex-A9,从而更为有针对性的分析不同核心配置下,程序性能的构成。

1.1 配置Kernel为双核

首先,需要重新menuconfig,并配置Kernel features下面的核数目选项,如下:

1
2
3
4
5
6
7
8
9
10
11
12
ssh yangzhang@$alin3
cd ~/project/odroid/linux/
git checkout yangzhang
git pull
make ARCH=arm CROSS_COMPILE=arm-eabi- odroidu_android_442_defconfig
make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
================ config menuconfig ==========
Kernel Features->(2)Maximum number of CPUs(2-32)
================ config menuconfig ==========
make ARCH=arm CROSS_COMPILE=arm-eabi- -j8
cd drivers/gator
make ARCH=arm CROSS_COMPILE=arm-eabi- -C ../../ M=`pwd` modules

然后下载生成的zImage和gator.ko,如下:

1
2
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/arch/arm/boot/zImage
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/drivers/gator/gator.ko

然后将上述两个文件连同DS-5提供的gatord推到板子相应目录并刷写内核,如下:

1
2
3
4
5
6
adb push zImage /system/lib/modules/
adb push gator.ko /data/ga/
adb push gatord /data/ga
adb shell "busybox dd conv=notrunc seek=2455 bs=512 if=/system/lib/modules/zImage of=/dev/block/mmcblk0"
adb shell "sync"
adb reboot

注意,如果/data/下面没有ga/目录,请自行手动创建。
完成上述步骤后就可以使能gatord,开始连接DS-5了,如下:

1
adb shell "/data/ga/gatord &"

最终,可以通过DS-5的streamline看到,的确是双核在运行了,如下图所示:

bc55d417-94c6-4604-8a36-7016e33bf85b

1.2 配置Kernel为单核

配置单核最直接的想法就是关掉SMP(不能在打开SMP的前提下,将Maximum number of CPUs设置为1,这是通不过的),如下:

1
2
3
4
5
6
7
8
9
make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
================ config menuconfig ==========
Kernel Features->Symmetric Multi-Processing()
================ config menuconfig ==========
然后需要修改一下Makefile,去掉对某种Werror的声明,具体哪个忘了,编译遇到错误的时候,按照错误信息去Makefile里面找吧。
make ARCH=arm CROSS_COMPILE=arm-eabi- -j8
make ARCH=arm CROSS_COMPILE=arm-eabi- modules
cd drivers/gator/
make ARCH=arm CROSS_COMPILE=arm-eabi- -C ../../ M=`pwd` modules

由于此时去掉了SMP的选项,网卡驱动会出现无法挂在的问题,所以不仅要更新zImage和gator.ko,还需要下载更新网卡驱动rtl8192cu.ko,否则网卡无法正常工作,最终导致DS-5无法连接。如下:

1
2
3
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/arch/arm/boot/zImage
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/drivers/gator/gator.ko
sftp yangzhang@$alin3:/home/yangzhang/project/odroid/linux/drivers/net/wireless/rtl8192cu_v40/rtl8192cu.ko

并把它们adb push到相应目录,然后用busybox dd命令把新的zImage写入nand flash。最后重启看看功能是否正常(详见本文1.1小节)。注意如果不更新rtl8192cu.ko,则会在/proc/kmsg内看到内核启动过程中网卡驱动版本与内核不匹配的情况,导致网卡使能失败。

目前从HDMI输出的CPU占用信息来看,的确只有单核在运行,如下图左上角所示:

screenshot_2015-01-29-05-10-45

连接DS-5并开始trace单核跑Antutu-v5.6,情况如下图所示:

9801b534-420b-4ed9-b207-f8f426c136a1

2. 单核执行Antutu-v5.6数据搜集

这部分类似于这里,区别主要有如下几点:

  • 1)本次测试的是单核版本(含L2 Cache);
  • 2)本次PMU counter会按照更合理的类型分类,并去掉没有用到PMU counter跟踪(比如Java部分、PLE部分等);
  • 3)本次会对关键counter值做尽可能多的重复数据抓取,消除不同测试之间的误差;
  • 4)本次会尽量同时点击板子屏幕上的开始和DS-5的记录按钮,从而少做数据对齐的准备;
  • 5)本次会把线程运行图部分也截屏下来,大致能看清楚几个主要线程的执行情况;
  • 6)本次会提供最终跑分的截图以及中间过程的截图,便于后续对Antutu执行过程的分析。

首先,我们需要看看Antutu在整个执行过程(大约4分22秒),实际执行的任务类型。这样后面才能和PMU Counter数据对应上,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Runtime:               0'00-0'17
Single thread Integer: 0'18-0'35
Single Thread Float:   0'36-0'54
Integer:               0'55-1'33
Float:                 1'34-1'53
RAM:                   1'54-2'03
RAM Speed:             2'04-2'05
Multithread:           2'06-2'42
Database I/O:          2'43-2'46
Storage I/O:           2'47-3'06
2D1:                   3'07-3'11
2D2:                   3'12-3'26
3D1(loading):          3'27-3'32
3D2(scenario1):        3'33-3'44
3D3(scenario2):        3'45-3'57
3D4(scenario3):        3'58-4'09
3D5(scenario4):        4'10-4'21

ca6c5b21-e49f-4bbf-a3b6-e69292ec069c

2.1 Linux系统相关

如下图所示:

75bf9d6f-3dc6-4887-92e9-ffc9b8317c43

从这张图可以看到如下情况:

  • CPU的占用在Antutu前期做CPU压力测试的时候非常高,几乎100%,在做I/O操作部分比较低,大约只有30%(注意此时CPU降频非常严重,因此这段时间真实负载可能只有10%左右),在做后续2D/3D测试的时候也仅占用了70%左右;
  • CPU Contention部分告诉我们:但运行单线程测试的时候,没有其他线程位于就绪队列,因此这部分的CPU竞争极少,而在多线程测试的时候,就会出现接近100%的竞争了;此前在做I/O操作以及后续2D/3D测试时,就绪的线程也不太多,大约只有10%~30%左右;
  • 整个测试过程终端相对都比较少,只有发生I/O性能测试时,才会出现了不少IRQ请求。这与交互式应用的情况存在差异(交互式应用会使用很多的人机交互操作、GPS、GSM/4G/Wifi以及各类其他传感器等操作);
  • 从系统线程切换的情况,可以看出:前期CPU压力测试时切换数目较少,而在2D测试部分切换次数较多,原因不明。

下图为exception相关:

1dda6172-974f-401b-852e-b4493bc3100a

就异常发生的原因而言,主要应该是缺页错误,也就是当前访问的指令和数据没有在内存中,需要从磁盘加载。因此在前期CPU压力测试过程,这部分出现的次数相对较少(程序的footprint叫嚣),而在后期2D/3D测试阶段,由于需要处理图像信息,而产生较多次数的缺页异常。

下图为模块时钟相关:

9ecac56f-3794-40bf-818e-cf27fe413a53

我们来看看动态的情况:

(暂缺,我还不知道如何把小视频搬运过来)

Cortex-A9有多个时钟域,从当前已有的PMU counter中可以读出定点核、NEON协处理器以及Data Engine等模块的执行频率。从图中可以看到:

  • 定点核部分:在前期CPU计算压力测试部分:定点核会在定点单线程、定点多线程测试的时候运行在1.7GHz的最高主频下,而在浮点单线程、浮点多线程测试时降低到0。在后续CPU存储压力测试部分定点核的频率大约在1.3~1.5GHz,而在后续I/O操作以及2D/3D测试中,定点核的主频其实非常低,只有大约200MHz左右;
  • NEON部分:在浮点测试阶段存在部分NEON指令,因此NEON有动作;在后续访存操作部分NEON可能也承担了memcpy库的优化,因此也能看到一点红线,但频率都不高;而在后续2D/3D渲染测试部分,NEON也没有大的作用,只有大约100MHz左右。总的来说,Antutu对NEON的考验远不达标;
  • Data Engine部分:暂缺

2.2 指令混合相关

如下图所示:

2aa1a71a-ca62-4d85-91d0-7e416c6e91ac

496712ed-0e57-4d92-bb95-eea4e172b5f9

afd9602a-5a56-4e8e-8249-0736ccc37d05

上面三张图是所有指令混合相关的总图,但看总图我们是看不出来什么的,因此我们还需要看阶段分解图,如下:

2.3 流水线相关

如下图所示:

0585876a-d99e-439d-8ad0-5897e591c156

下图为流水线stall相关:

6fc8fc64-34b6-454f-bdd5-07beead11f29

(暂缺小视频)

a3620df2-1f42-47e6-9ee6-9295130f73a8

下图是L1 Dcache相关:

9a7fdd73-a601-4f34-9e2e-8c1027704265

下图是coherence相关:

0a0cff37-5c82-49cc-aa0d-a5755197c9e9

2.5 TLB相关

如下图所示:

8e6e9eb1-4c8c-4edf-9dd7-c62eeb29b937

下图为TLB相关的各种stall:

d724a5c0-b624-449b-ac2c-29c1760f6383

2.6 分支预测相关

如下图所示:

c102ae8e-db74-4318-9cf5-431691631e0e

2.7 L2 cache相关

下图为L2数据读相关:

292c5553-78ce-4562-b8a8-91c541b1e45d

下图为L2数据写相关:

6b3c5e5c-0cf8-4edf-ab13-2836b2c1349b

下图为L2 cache行替换相关:

de4a3884-69fc-4c5e-90f4-32b07a7a5690

下图为prefetch相关:

3045f5d4-7a5e-4a39-9de3-fa3b180d9423

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s