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