麒麟980是什么cpu 麒麟980芯片和820哪个好
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
2022年年末,紫光展锐正式发布了新款5G SoC T820,这是一款采用台积电6nm工艺、八核CPU架构、集成金融级安全方案的中端芯片,支持5G高速连接、5G双卡双待等通信特性。2023年,5月17号,这款芯片将搭载在中国电信发布的天翼铂顿10手机上,这是一款以行业市场为目标客群的5G旗舰安全手机。
那么,紫光展锐T820的性能究竟如何呢?它能否与市场上昔日的麒麟旗舰芯片相媲美呢?为了回答这个问题,我们可以从CPU、GPU等方面来对比它与麒麟980和麒麟990这两款高端芯片的差异。
首先,从CPU方面来看,紫光展锐T820采用了1+3+4三丛集八个CPU核心,包括一个2.7GHz A76大核、三个2.3GHz A76大核、四个2.1GHz A55小核,3MB三级缓存。而麒麟980则采用了2+2+4三丛集八个CPU核心,包括两个2.6GHz A76大核、两个1.92GHz A76小核、四个1.8GHz A55微核,3MB三级缓存。麒麟990则采用了1+3+4三丛集八个CPU核心,包括一个2.86GHz A76超大核、三个2.09GHz A76大核、四个1.86GHz A55小核,4MB三级缓存。
从这些参数可以看出,紫光展锐T820在CPU方面有着较高的主频和较强的大核配置,相比麒麟980有着明显的优势,而与麒麟990也互有来回。根据GeekBench 5的测试结果,紫光展锐T820的单核分数为760分,多核分数为3341分;麒麟980的单核分数为710分,多核分数为2550分;麒麟990的单核分数为785分,多核分数为3100分。由此可见,在CPU性能方面,紫光展锐T820无论是单核性能还是多核性能都超过了麒麟980,然而与麒麟990相比,单核性能略弱,多核性能略强!
其次,从GPU方面来看,紫光展锐T820集成了Mali-G57 MC4 GPU,运行频率为850MHz。而麒麟980集成了Mali-G76 MC10 GPU,运行频率为720MHz。麒麟990则集成了Mali-G76MC16 GPU,运行频率为600MHz。从这些参数可以看出,紫光展锐T820在GPU方面有着较高的频率但是架构较旧。
根据测试,紫光展锐T820曼哈顿3.0、曼哈顿3.1分别为91FPS、551FPS,麒麟980在同样的测试中的帧率分别为90FPS、56FPS,麒麟990在同样的测试中的帧率分别为118FPS、76FPS。由此可见,在GPU性能方面,紫光展锐T820略微超过了麒麟980,但还不及麒麟990。
总之,在CPU、GPU等方面对比之后我们可以发现,在中端芯片市场上紫光展锐T820表现出色,并不输给昔日的麒麟高端芯片。而且,因为采用了更新的制程工艺,功耗方面也会好于麒麟980和麒麟990。虽然它还不能与最新一代的高端芯片如天玑9200或者A16相比拼,在某些方面还有一定的差距需要弥补,但是它已经证明了国产芯片的实力和潜力,并且给中国电信新机带来了更多的关注和期待。
perf浣跨敤鏂规硶
Simpleperf是一个强大的命令行工具,它包含在NDK中,可以帮助我们分析应用的CPU性能。Simpleperf可以帮助我们找到应用的热点,而热点往往与性能问题相关,这样我们就可以分析修复热点源。
如果您更喜欢使用命令行,可以直接使用 Simpleperf。Simpleperf 是一个通用的命令行 CPU 性能剖析工具,包含在面向 Mac、Linux 和 Windows 的 NDK 中。
如需查看完整的文档,请先阅读 Simpleperf 。
官方的资料:
- Simpleperf 命令和选项参考
- Simpleperf 用法
现代 CPU 具有一个硬件组件,称为性能监控单元(PMU)。PMU 具有一些硬件计数器,计数一些诸如经历了多少次 CPU 周期,执行了多少条指令,或发生了多少次缓存未命中等事件。
Linux 内核将这些硬件计数器包装到硬件 perf 事件中。此外,Linux 内核还提供了独立于硬件的软件事件和跟踪点事件。Linux 内核通过 perf_e【【微信】】 系统调用将这些暴露给用户空间,这正是 simpleperf 所使用的机制。
Simpleperf 具有三个主要的功能:stat,record 和 report。
Stat 命令给出了在一段时间内被剖析的进程中发生了多少事件的摘要。以下是它的工作原理:
- 给定用户选项,simpleperf 通过对 linux 内核执行系统调用来启用剖析。
- Linux 内核在调度到被剖析进程时启用计数器。
- 剖析之后,simpleperf 从内核读取计数器,并报告计数器摘要。
Record 命令记录一段时间内被剖析进程的采样。它的工作原理如下:
- 给定用户选项,simpleperf 通过对 linux 内核执行系统调用来启用剖析。
- Simpleperf 在 simpleperf 和 linux 内核之间创建映射缓冲区。
- Linux 内核在调度到被剖析进程时启用计数器。
- 每次给定数量的事件发生时,linux 内核将样本转储到映射缓冲区。
- Simpleperf 从映射缓冲区读取样本并stat生成 perf.data。
Report 命令读取 “perf.data” 文件及所有被剖析进程用到的共享库,并输出一份报告,展示时间消耗在了哪里。
为了使用Simpleperf, 需要以下环境:
- 待分析的App应运行在Android 5.0或者更高版本的设备上
- 手机的USB 连接到操作机器
- 应用程序应该是 debuggable 的。由于安全限制的原因,只有 【【微信】】ebuggable 设置为 true 的应用程序才能剖析。(在一个已经 root 的设备上,所有应用程序都可以剖析。)在 Android Studio 中,这意味着我们需要使用 debug 构建类型,而不是 release 构建类型。
- 为了能够运行Python scripts,宿主机器应安装:
-
- Python 2.7或者更高版本
- NDK的版本应不低于r13b
通常剖析 Android 应用程序性能包含三个步骤:
- 准备应用程序。
- 记录剖析数据。
- 生成剖析数据的分析报告。
Simpleperf的获取路径:
在页面内,可以直接压缩包下载,既可以选择NDK相对应的版本(R13~N21),也可以选择master。建议直接选择NDK对应的版本即可。当然,也可以git直接拉取仓库。
git clone https://android.【【微信】】source.com/platform/prebuilts/simpleperf
查看下载的simpleperf目录,可以看出:它的工具集包涵client端和host端;client端运行在Android系统上,负责收集性能数据;host端则运行在开发机上,负责对数据进行分析和可视化(这些可执行文件在下载后的bin文件夹的android和win/linux下)。
除了bin文件夹之外,最上层还有很多.py的脚本文件。这些脚本和配置文件主要是官方写的一些傻瓜式的使用脚本,只需要对配置文件进行配置,就可以在直接在开发机上直接运行脚本,一键生成最终的结果。
Python 脚本根据它们的功能被分为三个部分:
- 用于简化剖析数据记录的脚本,如 app_profiler.py。
- 用于生成剖析报告的脚本,如 report.py,report_html.py,inferno。
- 用于解析剖析数据的脚本,如 simpleperf_report_lib.py。
主要的脚本是:app_profiler.py和report.py两个。
在【【微信】】k\simpleperf中包含了 simpleperf 可执行文件和 Python 脚本,它们的功能如下:
- bin/:包含可执行文件及共享库,里面包含了android和windows。
- bin/android/${arch}/simpleperf:设备上运行的静态 simpleperf 可执行文件。其中 ${arch} 为目标设备的 CPU 架构,如 arm 和 arm64。
- bin/${host}/${arch}/simpleperf:用于主机的 simpleperf 可执行文件,只支持生成报告。其中 ${host} 为主机的操作系统平台,如 linux,${arch} 为主机的 CPU 架构,如 x86_64。
- bin/${host}/${arch}/libsimpleperf_report.${so/dylib/dll}:用于主机的报告生成库。其中 ${host} 指主机的操作系统平台,${arch} 为主机的 CPU 架构。
- app_profiler.py:用于记录剖析数据的 Python 脚本。
- binary_cache_builder.py:用于为剖析数据构建二进制缓存的 Python 脚本。
- report.py:用于生成剖析报告并输出到标准输出的 Python 脚本。
- report_html.py:用于生成剖析报告并输出为 html 文件的 Python 脚本。
- inferno.sh (或 Windows 平台的 inferno.bat ):用于生成火焰图并输出为 html 文件的脚本工具。
- inferno/:inferno 的实现。由 inferno.sh 使用。
- pprof_proto_generator.py:将剖析数据的格式转换为 pprof 使用的格式的 Python 脚本。
- report_sample.py:将剖析数据的格式转换为 FlameGraph 使用的格式的 Python 脚本。
- simpleperf_report_lib.py:解析剖析数据的库。
脚本的主要内容,就是读取配置文件,然后执行adb shell ...的命令,其实本质上和命令行的输入没什么区别。但是,如果直接运行,不仅仅需要查看配置文件各个配置项的含义,还可能会出现许多意想不到的BUG,不太建议直接使用脚本,不得精髓啊。
debug-unwind命令:基于debug / test dwarf的离线展开,用于调试simpleperf。
dump命令:转储perf.data中的内容,用于调试simpleperf。
help命令:打印其他命令的帮助信息。
kmem命令:收集内核内存分配信息(将被Python脚本替换)。
list命令:列出Android设备支持的所有事件类型。
记录命令:配置文件处理并在perf.data中存储分析数据。
report命令:报告perf.data中的分析数据。
report-sample命令:报告perf.data中的每个样本,用于支持集成Android Studio中的simpleperf。
stat命令:profiles处理并打印计数器摘要。
每个命令都支持不同的选项,可以通过帮助消息查看,如下示例:
# List all commands. $ simpleperf --help # Print help message for record command. $ simpleperf record --help
1、将simpleperf文件push到手机
在simpleperf/bin/android目录下包含有不同体系架构的 Android 上运行的静态二进制文件,在arm目录下打开命令窗口,执行命令:
adb push simpleperf data/data/
2、将simpleperf授权为可读可写可执行文件:
adb shell cd data/data/ chmod 777 simpleperf
3、对某些特定进程或者线程监控
https://blog.csdn.net/weixin_47465999/【【微信】】tails/simpleperf record -p 4281(pid 或tid) --duration 30(时间/s)
得到错误提示,说只读分区无法写入 perf.data:
simpleperf E 04-19 15:09:29 4109 4109 【【微信】】.cpp:47] failed to open record file 'perf.data': Read-only f
4、 用 -o 参数设置存储记录的路径
simpleperf I cmd_record.cpp:729] Recorded for 29.9851 seconds. Start post 【【微信】】ing. simpleperf I cmd_record.cpp:809] Samples recorded: 1457. Samples lost: 0.
5、用report 报告perf.data中的分析数据
simpleperf record -p 17465--duration 4 -f 1000 -o /data/local/tmp/perf.data --call-graph fp
simpleperf report -i /data/perf.data -n --sort dso
simpleperf W 04-19 15:31:17 4564 4564 dso.cpp:274] /data/local/r【【微信】】't contain symbol table simpleperf W 04-19 15:31:17 4564 4564 dso.cpp:335] 【【微信】】 /proc/kallsyms are all zero. `echo 0 >/proc/sys/kernel/kptr_restrict` if possible. Cmdline: /data/local/tmp/simpleperf record -p 4281 --duration 30 -o /data/perf.data Arch: arm64 Event: cpu-cycles (type 0, config 0) Samples: 125526 Event count: 【【QQ微信】】 【【微信】】 Object 88.93% 106529 /data/local/【【微信】】.05% 10560 /system/lib/libc.so 3.01% 8437 [kernel.kallsyms]
其中的 Csort 参数是用来指定结果显示哪些列,我们这里只写了一个 dso(即 dynamic shared object),所以结果只显示一列 “Shared Object”,而且按 dso 分类,结果也只有三行而已。
如果不加 Csort 参数,默认显示这几列:Command,Pid,Tid,Shared Object,Symbol,相当于:
--sort comm,pid,tid,dso,symbol
- -n 参数用来显示 Sample 那列,表示该行共命中了多少个 Sample,加不加随意。
- 可以看到,百分之 88.93 的时间都耗费在了我们的被测程序上,这是预期中的。
6、查看app 内部,函数占比:
simpleperf report -i /data/perf.data --dsos /data/local/r【【微信】】
- 结果如下:
impleperf W 04-19 15:57:34 5046 5046 dso.cpp:274] /data/local/r【【微信】】't contain symbol table simpleperf W 04-19 15:57:34 5046 5046 dso.cpp:335] 【【微信】】 /proc/kallsyms are all zero. `echo 0 >/proc/sys/kernel/kptr_restrict` if possible. Cmdline: /data/local/tmp/simpleperf record -p 4281 --duration 30 -o /sdcard/perf.data Arch: arm64 Event: cpu-cycles (type 0, config 0) Samples: 106529 Event count: 【【QQ微信】】 【【微信】】 5.06% 5373 rvdecApp[+24380] 4.57% 4890 rvdecApp[+24420] 1.43% 1588 rvdecApp[+13a44] 1.01% 1083 rvdecApp[+21f94] 0.94% 999 rvdecApp[+20188] ...
其中的 Cdsos 参数是 simpleperf 的 5 个 filter 之一,意思是按照指定的 dynamic shared objects 进行过滤,只显示参数指定的 dso 里面的结果。全部 5 个 filter 是:
Ccomms: 按 command 过滤,比如:--comm r【【微信】】>
Cpids: 按 pid 过来
Ctids: 按 tid(线程id)过滤
Cdsos: 按库文件/可执行文件名过滤
Csymbols: 按函数名过滤,比如: --symbols "RVComFunc::getPUMVPredictor(RefBlockInfo*, unsigned int, int, int, unsigned int)",注意函数里有空格的,需要用双引号引起来。
可以看到,结果里没有函数名字。那是因为我们的 rvdecApp 是没有符号表的版本。我们用带符号表的 app 进行分析即可。
带符号表的 app 可执行文件可以在 obj 目录下找到。把它 push 到手机上,覆盖原来的可执行文件。
注意,不用重新执行 rvdecApp 并重新采集 perf.data, 只需要在分析时使用带有符号表的 rvdecApp 即可。
还用刚才的命令:
https://blog.csdn.net/weixin_47465999/【【微信】】tails/simpleperf report -i /data/perf.data -n --dsos /data/local/r【【微信】】
- 得到如下结果:
【【微信】】 10.45% 5354 RVComFunc::DBFShiftedProcess8x8(unsigned char**, int*, unsigned char*, int, unsigned char*, int, bool, bool, bool, bool, unsigned char) 5.55% 3722 RVComFunc::deblockCUTree(TCBDataTree*, unsigned char**, unsigned int*, int, int, RefBlockInfo*, int, unsigned char**, int*, unsigned char) 4.49% 3675 RVComFunc::reconstructInterPredictors(TCUData*, unsigned char**, unsigned int*, TRefPicList*, RefBlockInfo*, unsigned int, unsigned int, unsigned int, unsigned int) 2.25% 3518 RVComFunc::deriveDBFStrengthFUbyMotionInfo(unsigned char*, unsigned char*, int, int, RefBlockInfo*, int, int, unsigned char, unsigned char, bool, bool) 2.68% 3320 Decoder::parseBitStream_FrameNew() 2.79% 2927 NEON_DBF_EdgeFilter4_【【微信】】.52% 2651 RVComFunc::DBFShiftedProcessFu(unsigned char**, int*, unsigned char*, int, unsigned char*, int, int, bool, bool, bool, bool, unsigned char) 2.36% 2553 (anonymous namespace)::decode_gen_vlc(【【微信】】*, int, (anonymous namespace)::VLC*, int, int) ...
可以看到DBFShiftedProcess8x8函数是最耗时的函数,需要被优化。
1、 运行app-profiler.py
进入simpleperf目录下,我们可以使用 app-profiler.py 剖析 Android 应用程序。输出路径等可以修改app_profiler.py配置文件
14:47:33,547 [INFO] (app_profiler.py:206) prepare profiling 14:47:33,730 [INFO] (app_profiler.py:208) start profiling 14:47:33,806 [INFO] (app_profiler.py:244) run adb cmd: ['adb', 'shell', '/data/local/tmp/simpleperf', 'record', '-o', '/data/local/tmp/perf.data', '-e task-clock:u -f 1000 -g --duration 10', '--log', 'info', '--app', 'com.afmobi.boomplayer'] simpleperf I cmd_record.cpp:696] Recorded for 9.96625 seconds. Start post 【【微信】】ing. simpleperf W dso.cpp:446] /vendor/lib64/egl/libGLES_mali.so doesn't contain symbol table simpleperf W dso.cpp:446] /vendor/lib64/hw/android.hardware.graphics.mapper@4.0-impl-mediatek.so doesn't contain symbol table simpleperf W dso.cpp:446] /data/app/~~EKnZoTKaDLH3FYfxteqUvg==/com.【【微信】】.android.trichromelibrary_541411734-【【微信】】Pg==/base.apk!/lib/arm64-v8a/【【微信】】.so doesn't contain symbol table simpleperf W dso.cpp:446] /data/app/~~3WfX5_4-OAPL17xSEBkRfg==/com.afmobi.boomplayer-yFLZ【【微信】】==/lib/arm64/libmmkv.so doesn't contain symbol table s版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。