Antutu-v5.6的性能数据分析-CortexA9x4

我用Odroid-U3的板子抓取了很多benchmark以及应用的数据,板子的设置以及数据抓取的过程在这里,数据处理过程在这里。由于数据非常繁多,且大多与性能直接相关,我在这篇文章中尽可能详细的分析一下。另外,我还录了一段视频,是整个实验的过程,在这里:

1. 回顾一下A9支持的PMU Events

这部分来源于Cortex-A9的ARM官方TRM手册11.4.1小节,在这里

1.1 Java部分

这部分在Android系统下是没有用到的,如下图所示。
d89185be-1127-4cbc-b8fb-767146c227b7

1
2
3
4
事件号 支持 关注 描述
0x40   Yes  No  执行的Java字节码:所有译码的java字节码,含推测执行部分(在Android下一直是0,因为没有使用Jazelle)
0x41   Yes  No  软件Java字节码:所有译码的软件Java字节码,含推测执行部分(Android下一直是0,因为没有使用Jazelle)
0x42   Yes  No  执行的Jazelle backward分支:所有taken型Jazelle分支,含由于前面load/store指令而flush掉的部分(Android下一直是0,因为没有使用Jazelle)

1.2 Coherent部分

这部分主要跟踪Cache一致性事件,如下图所示(对数图):

450b95b2-5c2d-41a3-8199-4c0bf54e740b

1
2
3
4
5
事件号 支持 关注 描述
0x60   Yes  Yes 指令cache相关stall时钟数目:统计处理器在如下情况下需要的cycle数目:1)准备接受新的指令;2)尚无法接受新的指令,因为:指令部分无法提供;指令cache正在执行至少1次行填充操作
0x61   Yes  Yes 数据cache相关stall时钟数目:统计如下2类事件总的cycle数目:1)处理器无法将部分指令发射到任何流水线;2)LS单元至少存在1次挂起的行填充请求,但不包含挂起的TLB请求
0x65   Yes  Yes 数据eviction:统计data cache行填充导致的eviction次数
0x69   Yes  Yes 数据行填充:统计由外部AXI总线执行的行填充数目,包含如下所有类型的数据行填充请求:含推测的load、store、PLD、预取以及页表walk

1.4 TLB相关

这部分跟踪TLB相关的行为,如下图所示(对数图):

bb9f30b0-b03d-40b0-b374-e0dd5ca54670

1
2
3
4
5
6
7
8
事件号 支持 关注 描述
0x62   Yes  Yes 主TLB缺失的stall时钟数目:统计处理器等待主TLB的页表walk完成。处理器stall是由于指令部分无法提供指令或者数据部分无法提供需要的数据(这句是废话哈)
0x82   ?    Yes 由主TLB缺失导致的指令部分stall:统计由指令部分请求导致的主TLB缺失所引入的stall时钟数目
0x83   ?    Yes 由主TLB缺失导致的数据部分stall:统计由数据部分请求导致的主TLB缺失所引入的stall时钟数目
0x84   ?    Yes 由微TLB缺失导致的指令部分stall:统计由指令部分请求导致的微TLB缺失所引入的stall时钟数目
0x85   ?    Yes 由微TLB缺失导致的数据部分stall:统计由数据部分请求导致的微TLB缺失所引入的stall时钟数目
0x8D   ?    Yes 指令TLB分配:统计由指令请求带来的TLB分配数目
0x8E   ?    Yes 数据TLB分配:统计由数据请求带来的TLB分配数目

1.5 原子操作指令相关

这部分与STREX相关的操作(很奇怪,在TRM中没有看到LDREX的相关数据),如下图所示:

442237a8-5a26-4169-aa74-ffc83e58bb07

我们先看看什么是STREX:

STREX performs a conditional store to memory. The conditions are as follows:
If the physical address does not have the Shared TLB attribute, and the executing processor has an outstanding tagged physical address, the store takes place, the tag is cleared, and the value 0 is returned in Rd.
If the physical address does not have the Shared TLB attribute, and the executing processor does not have an outstanding tagged physical address, the store does not take place, and the value 1 is returned in Rd.
If the physical address has the Shared TLB attribute, and the physical address is tagged as exclusive access for the executing processor, the store takes place, the tag is cleared, and the value 0 is returned in Rd.
If the physical address has the Shared TLB attribute, and the physical address is not tagged as exclusive access for the executing processor, the store does not take place, and the value 1 is returned in Rd.

1
2
3
事件号 支持 关注 描述
0x63   Yes  YES 架构执行并pass的STREX指令的数目
0x64   Yes  Yes 架构执行但failed的STREX指令的数目

1.6 指令混合相关

这部分就是动态指令流中不同类型指令的比例问题,如下图所示:

85ab0863-1f1a-4c5a-857c-c1416aa94866

补充一下PLD预取指令的问题,原文来自这里

Use PLD to hint to the memory system that there is likely to be a load from the specified address within the next few instructions. The memory system can use this to speed up later memory accesses.

继续补充一下DMB、ISB、DSB指令相关信息,原文在这里

  • DMB:数据内存屏障可作为内存屏障使用。 它可确保会先检测到程序中位于 DMB 指令前的所有显式内存访问指令,然后再检测到程序中位于 DMB 指令后的显式内存访问指令。它不影响其他指令在处理器上的执行顺序;
  • DSB:数据同步屏障是一种特殊类型的内存屏障。 只有当此指令执行完毕后,才会执行程序中位于此指令后的指令。 当满足以下条件时,此指令才会完成:1)位于此指令前的所有显式内存访问均完成;2)位于此指令前的所有缓存、跳转预测和 TLB 维护操作全部完成;
  • ISB:指令同步屏障可刷新处理器中的管道,因此可确保在 ISB 指令完成后,才从高速缓存或内存中提取位于该指令后的其他所有指令。这可确保提取时间晚于 ISB 指令的指令能够检测到 ISB 指令执行前就已经执行的上下文更改操作的执行效果,例如更改ASID 或已完成的 TLB 维护操作,跳转预测维护操作以及对 CP15 寄存器所做的所有更改。此外,ISB 指令可确保程序中位于其后的所有跳转指令总会被写入跳转预测逻辑,其写入上下文可确保 ISB 指令后的指令均可检测到这些跳转指令。这是指令流能够正确执行的前提条件。
1
2
3
4
5
6
7
8
9
事件号 支持 关注 描述
0x72   Yes  Yes Load/Store指令数目:统计在LS单元中执行的指令的数目,含基于推测执行的指令
0x73   Yes  Yes 浮点指令数目:经过寄存器重命名级的浮点指令数目,在这一级也是推测的。由于2条浮点指令可以在同一cycle内完成译码,因此我们还可以增加2个bit区分:b00:没有浮点指令在重命名;b01:只有1条浮点指令在重命名;b10:2条浮点指令在并行重命名
0x74   Yes  Yes NEON指令数目:经过寄存器重命名级的NEON指令数目,在这一级也是推测的。由于2条NEON指令可以在同一cycle内完成译码,因此我们还可以增加2个bit区分:b00:没有NEON指令在重命名;b01:只有1条NEON指令在重命名;b10:2条NEON指令在并行重命名
0x80   Yes  Yes PLD导致的处理器stall数目:由于PLD槽填满冲突引入的处理器stall时钟数目
0x86   Yes  Yes DMB导致的处理器stall数目:由于处理器执行DMB而引入的stall时钟数目
0x90   Yes  Yes ISB指令数目:架构执行的ISB指令的数目
0x91   Yes  Yes DSB指令数目:架构执行的DSB指令的数目
0x92   Yes  Yes DMB指令数目:推测执行的DMB指令数目

1.7 PLE相关

PLE是A9处理器的preload引擎的问题,如下图所示:

4338f762-f08e-4eb2-a201-4b87eec03d14

基本上Android系统以及应用都不会用到这个单元,我们就不重点讨论了。

1
2
3
4
5
6
7
事件号 支持 关注 描述
0xA0   Yes  NO  PLE cache行请求完成
0xA1   Yes  No  PLE cache行请求被跳过
0xA2   Yes  No  PLE FIFO的刷新
0xA3   Yes  No  PLE 请求完成
0xA4   Yes  No  PLE FIFO溢出
0xA5   Yes  No  PLE请求被编程

1.8 与L2 cache相关

如下图所示:

20170203145933

1.9 Linux系统相关

1.9.1 与中断相关

如下图所示:

18b8c03a-2fa0-4595-9c92-ffb22455a319

1.9.2 与磁盘IO相关

如下图所示:

dc07a773-5c2b-480c-afdf-182341e846d8

1.9.3 与处理器线程切换相关

如下图所示:

88156529-3ba9-4f0b-8714-04410aa544fa

1.9.4 与宏观CPU相关

如下图所示:

6100518C-B5BC-41DA-A024-953A1B6807CF.jpg

2. 看一张总图

在这部分,我用DS-5分次提取的数据截图,PS成一张总图,这样我们就能大致看清楚Antutu执行的不同阶段所有PMU Counter值的变化。注意:

  • 由于每次运行时,其实际执行的核心不一定相同,所以部分图我不会展开为每核心的数据,而采用4核心数据的累加值;
  • 我会在这张图上标注出Antutu的运行阶段,便于理解(视频中这块不太看得清楚,需要仔细去看右下角小屏幕中部的文字);
  • 所有原始数据都已经上传到百度云盘,地址在微信群里面。

3. 看看指令混合的情况

 

 

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