README.md
1# 运行方舟编译器工作负载
2
3## 介绍
4
5自动化运行js性能测试用例并且生成daily报告,用于测试方舟builtins API 性能。
6
7特殊说明:下面文字中的"v 8" 、"v_8"、"d 8"、"d_8", 是为了规避门禁codecheck告警,请阅读及实际执行时去除或忽略中间的空格或”_“。
8
9## 环境依赖
10
11- 对于脚本所在的文件目录,当前用户需要拥有创建文件夹的权限。请注意当前目录的用户和用户组权限设置
12
13- openpyxl。没有版本要求。若未安装请执行`pip3 install openpyxl`
14
15- 环境中需要下载全仓鸿 蒙镜像或独立仓代码,并进行编译ark_js_vm 和 前端
16
17 ```shell
18 ./build.sh --product-name rk3568 --build-target ark_js_host_linux_tools_packages --build-target ets_frontend_build # x86_64平台
19 ```
20
21- 配置v 8引擎执行环境
22
23**下载:**
24
25```shell
26# 可以在任意目录。假定当前目录在/home目录
27wget https://storage.googleapis.com/chromium-%76%38/official/canary/%76%38-linux64-rel-12.0.267.zip --no-check-certificate -O v_8-linux64-rel-12.0.267.zip
28unzip v_8-linux64-rel-12.0.267.zip -d v_8
29```
30
31**配置:**
32
33临时配置:
34
35每次执行run_js_perf_test.sh脚本时传入 v 8 引擎 d 8 二进制的路径,比如/home/v_8/d 8。
36
37永久配置:
38
39```shell
40sudo su
41# 编辑/root/.bashrc文件在末尾追加以下内容
42export PATH=/home/v_8:$PATH
43# 刷新环境变量。注意执行sh脚本依然需要传入d 8的路径
44source /root/.bashrc
45```
46
47**验证:**
48
49```shell
50执行:
51 /home/v_8/d 8 -v # 任意用户
52回显:
53 V 8 version 12.0.267
54 d 8>
55```
56
57环境v 8引擎配置成功
58
59## 文件目录
60
61```bash
62/arkcompiler/ets_runtime
63│_ test # 模块测试用例
64 |_ jsperftest # js perf 测试代码目录
65 |-README.md # 说明书
66 |-run_js_perf_test.sh # 测试执行shell脚本
67 |_run_js_test.py # 测试执行调用的python脚本
68 |_config.json # 代码仓库与平台配置文件
69```
70
71**代码仓库与平台配置文件config.json说明:**
72
73**文件内容:**
74
75```shell
76{
77 "full_x86_64":{
78 "ETS_RUNTIME_PATH": "out/rk3568/c lang_x64/arkcompiler/ets_runtime/",
79 "ICU_PATH": "out/rk3568/c lang_x64/thirdparty/icu/",
80 "ZLIB_PATH": "out/rk3568/c lang_x64/thirdparty/zlib/",
81 "LIB_PATH": "prebuilts/c lang/ohos/linux-x86_64/l lvm/lib/",
82 "ES2ABC": "out/rk3568/c lang_x64/arkcompiler/ets_frontend/es2abc"
83 },
84 "independent_x86_64": {
85 "ETS_RUNTIME_PATH": "out/x64.release/arkcompiler/ets_runtime",
86 "ICU_PATH": "out/x64.release/c lang_x64/thirdparty/icu/",
87 "ZLIB_PATH": "", # 若无此配置,可不填,但不能删除该配置项
88 "LIB_PATH": "", # 若无此配置,可不填,但不能删除该配置项
89 "ES2ABC": "out/x64.release/arkcompiler/ets_frontend/es2abc"
90 }
91}
92```
93
94**说明:**
95
96- 请无视“c lang"中间的空格,文件实际内容是无空格,这里是为了屏蔽门禁codecheck告警
97- 在不同的代码仓库在不同的OS平台上,脚本运行需要的二进制的路径是不同的。脚本无法全覆盖。因此需要用户自己配置仓库信息和脚本执行平台信息
98- full表示是全仓--鸿 蒙镜像下的代码仓;independent表示独立仓(区别于全仓)
99- 脚本执行平台都是linux环境。默认全仓, full_x86_64。x86_64表示是x86 64位平台;aarch_64表示是arm 64位平台
100- 请用户根据自己的环境需要在config.json中配置仓库与执行平台信息。并将json主键(比如full_x86_64)作为可选的第四参数传递给sh脚本
101
102## 运行测试
103
1041) 调用入口:bash run_js_perf_test.sh js_report_save_path openharmony_path d_8_binary_path ver_platform
105 * js_report_save_path:必选],表示报告输出的目录路径,该路径同时也是历史报告绝 对路径
106 * openharmony_path: 必选],将全仓鸿 蒙系统或者独立仓根目录(out的父目录)的绝 对路径
107 * d_8_binary_path: [必选],v 8 引擎 d 8 二进制的绝 对路径
108 * ver_platform: [可选],代码仓库与平台配置模式。不配置默认值“full_x86_64”,表示全仓 x86_64平台执行
109
1103) 运行生成看护报告说明
111 ```bash
112 1. jsperftest生成的daily报告,excel格式
113 命名格式:js_perf_test_result_年月日.xlsx,比如js_perf_test_result_20231206.xlsx。
114 2. 报告表格表头输出"用例名称"、"场景"、"执行状态"、"ark用例执行耗时(ms)"、"昨日ark用例执行耗时(ms)"、"是否劣化"、"v 8(ms)"、"v 8 --jitless(ms)"、"ark/v 8"、"ark/v 8 jitless"、"hyperlink"、"备注";
115 表格最后,会追加汇总信息:用例数总数、执行成功数、失败数,劣化数目等内容。具体内容,请参见附录“daily报告”。
116 3. 有执行失败时,当前用例的“执行状态”单元格内容会标记。
117 4. “是否劣化”列,取值:true,false。当用例前一天性能数据不存在、js用例执行异常、执行失败,都归于没有劣化。
118 5. 在daily报告生成目录,daily报告每日生成时会同时生成通知邮件汇总内容的文件--jsperftest_notifying_info_in_email.json。内容如下:
119 {
120 "kind": "V 8 js-perf-test",
121 "Total": 7,
122 "Ark劣化v 8": 1,
123 "Ark劣化v 8 jitless": 4
124 }
125 ```
126
127## daily报告
128
129请参见附录"Daily报告"。
130
131## workload代码仓
132
133 [Ark-workload](https://gitee.com/dov1s/arkjs-perf-test/tree/builtins_test1110/)
134
135## 附录
136
137### Daily报告
138
139| 用例名称 | 场景 | 执行状态 | ark用例执行耗时(ms) | 是否劣化 | v 8(ms) | v 8 --jitless(ms) | ark/v 8 | ark/v 8 jitless | hyperlink | 备注 |
140| ------------------------------------------------------- | ------------------ | -------------- | ------------------- | -------- | ------ | ---------------- | ------------------- | ------------------ | ------------------------------------------------------------ | ---- |
141| decodeuricomponent/decodeuricomponent.js | decodeuricomponent | pass | 42 | NA | 18 | 33 | 2.33 | 1.27 | https://gitee.com/dov1s/arkjs-perf-test/tree/builtins_test1110/js-perf-test/decodeuricomponent/decodeuricomponent.js | |
142| finalizationregistry/finalizationregistryconstructor.js | testconstructor | pass | 6 | NA | 10 | 26 | 0.6 | 0.23 | https://gitee.com/dov1s/arkjs-perf-test/tree/builtins_test1110/js-perf-test/finalizationregistry/finalizationregistryconstructor.js | |
143| finalizationregistry/register.js | testregister | pass | 16 | NA | 14 | 44 | 1.14 | 0.36 | https://gitee.com/dov1s/arkjs-perf-test/tree/builtins_test1110/js-perf-test/finalizationregistry/register.js | |
144| finalizationregistry/unregister.js | testunregister | pass | 20 | NA | 51 | 99 | 0.39 | 0.20 | https://gitee.com/dov1s/arkjs-perf-test/tree/builtins_test1110/js-perf-test/finalizationregistry/unregister.js | |
145| decodeuri/decodeuri.js | decodeuri | pass | 46 | NA | 19 | 36 | 2.42 | 1.28 | https://gitee.com/dov1s/arkjs-perf-test/tree/builtins_test1110/js-perf-test/decodeuri/decodeuri.js | |
146| | | | | | | | | | | |
147| | | | | | | | | | | |
148| 劣化判定比率上限 | | 0.05 | | | | | | | | |
149| Totle js case count | | 5 | | | | | | | | |
150| Pass count | | 5 | | | | | | | | |
151| Fail count | | 0 | | | | | | | | |
152| ark今日劣化数量 | | 2 | | | | | | | | |
153| Total excute time is(s) | | 0:0:19.699970 | | | | | | | | |
154| ark/v 8 劣化数量 | | 2 | | | | | | | | |
155| ark/v 8 jitless 劣化数量 | | 0 | | | | | | | | |
156
157说明:
158
159- E列“昨日用例执行耗时(ns)”默认是隐藏的。
160- G列 “v 8(ms)”是有基准数据每月1、11、21日会生成v 8执行时间的基准数据,其他时间都不进行v 8执行用例操作,直接获取前边最近的基准数据
161- H列 “v 8 --jitless(ms)”是有基准数据每月1、11、21日会生成v 8 --jitless执行时间的基准数据,其他时间都不进行v 8 --jitless执行用例操作,直接获取前边最近的v 8 --jitless基准数据
162