18 |
19 | ```
20 | bash <(curl -sL bash.icu/gb5)
21 | ```
22 |
23 | 或
24 |
25 | ```
26 | bash <(wget -qO- https://raw.githubusercontent.com/i-abc/GB5/main/gb5-test.sh)
27 | ```
28 |
29 | ## 使用截图
30 |
31 | - 输出结果
32 |
33 | 
34 |
35 | ```
36 | # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
37 | # 专用于服务器的GB5测试 #
38 | # v2023-08-07 #
39 | # https://github.com/i-abc/gb5 #
40 | # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
41 |
42 | 当前时间:2023-08-07 08:22:28 UTC
43 | 净测试时长:2分47秒
44 |
45 | Geekbench 5 测试结果
46 |
47 | 系统信息
48 | Operating System Red Hat Enterprise Linux 9.2 (Plow)
49 | Kernel Linux 5.14.0-284.11.1.el9_2.x86_64 x86_64
50 | Model Xen HVM domU
51 | Motherboard N/A
52 | BIOS Xen 4.11.amazon
53 |
54 | 处理器信息
55 | Name Intel Xeon E5-2676 v3
56 | Topology 1 Processor, 1 Core
57 | Identifier GenuineIntel Family 6 Model 63 Stepping 2
58 | Base Frequency 2.39 GHz
59 | L1 Instruction Cache 32.0 KB
60 | L1 Data Cache 32.0 KB
61 | L2 Cache 256 KB
62 | L3 Cache 30.0 MB
63 |
64 | 内存信息
65 | Size 769 MB
66 |
67 | 单核测试分数:683
68 | 多核测试分数:681
69 | 详细结果链接:https://browser.geekbench.com/v5/cpu/21552304
70 | 可供参考链接:https://browser.geekbench.com/search?k=v5_cpu&q=Intel%20Xeon%20E5-2676%20v3
71 |
72 | 个人保存链接:https://browser.geekbench.com/v5/cpu/21552304/claim?key=485945
73 | ```
74 |
75 | - 完整过程
76 |
77 | 
78 |
79 | - x86_64
80 |
81 | 
82 |
83 | - aarch64
84 |
85 | 
86 |
87 | ## 待办
88 |
89 | - [x] 将分数直接展示到终端
90 | - [x] 在测试后会提供同种 CPU 的对比
91 | - [ ] 增加更多 CPU 方面的测试
92 | - [ ] lxc 添加 Swap 失败
93 | - [x] 支持 ARM
94 | - [ ] 添加 GB6
95 | - [ ] 在进行 GB 测试前先进行简单的 CPU 测试,若涉及 Swap 还要测试硬盘,通过后才进行 GB 测试,见 [issue 1](https://github.com/i-abc/GB5/issues/1)
96 |
--------------------------------------------------------------------------------
/gb5-test.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ##### 自定义常量 ######
4 |
5 | # 脚本发布版本
6 | script_version="v2024-05-08"
7 |
8 | # geekbench5发布版本
9 | geekbench_version="5.5.1"
10 |
11 | # geekbench5官方SHA-256
12 | geekbench_x86_64_official_sha256="32037e55c3dc8f360fe16b7fbb188d31387ea75980e48d8cf028330e3239c404"
13 | geekbench_aarch64_official_sha256="9eb3ca9ec32abf0ebe1c64002b19108bfea53c411c6b556b0c2689514b8cbd6f"
14 | geekbench_riscv64_official_sha256="65070301ccedd33bfd4797a19e9d28991fe719cc38570dbc445b8355a5b9bc64"
15 |
16 | # 下载源
17 | url_1="https://cdn.geekbench.com"
18 | url_2="https://asset.bash.icu/https://cdn.geekbench.com"
19 |
20 | # 测试工作目录
21 | dir="./gb5-github-i-abc"
22 |
23 | ##### 配色 #####
24 |
25 | _red() {
26 | echo -e "\033[0;31;31m$1\033[0m"
27 | }
28 |
29 | _yellow() {
30 | echo -e "\033[0;31;33m$1\033[0m"
31 | }
32 |
33 | _blue() {
34 | echo -e "\033[0;31;36m$1\033[0m"
35 | }
36 |
37 | ##### 横幅 #####
38 | _banner() {
39 | echo -e "# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #"
40 | echo -e "# 专用于服务器的GB5测试 #"
41 | echo -e "# $script_version #"
42 | echo -e "# $(_yellow "bash <(curl -sL bash.icu/gb5)") #"
43 | echo -e "# https://github.com/i-abc/gb5 #"
44 | echo -e "# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #"
45 | echo
46 | }
47 |
48 | ##### 检测locale配置并覆盖为C语言环境 #####
49 | _check_locale() {
50 | if locale -a 2>/dev/null | grep -q "^C$"; then
51 | export LC_ALL=C
52 | fi
53 | }
54 |
55 | ##### 检测某软件包是否安装,没安则自动安上,目前只支持RedHat、Debian系 #####
56 | _check_package() {
57 | _yellow "正在检测所需的$1是否安装"
58 | # 检测软件包是否安装
59 | if ! command -v $1; then
60 | # 确认包管理器并安装软件包
61 | if command -v dnf; then
62 | sudo dnf -y install $2
63 | elif command -v yum; then
64 | sudo yum -y install $2
65 | elif command -v apt; then
66 | sudo apt -y install $2
67 | else
68 | _blue "本机非RedHat、Debian系,暂不支持自动安装所需的软件包"
69 | exit
70 | fi
71 | # 再次检测软件包是否安装
72 | if ! command -v $1; then
73 | _red "自动安装所需的$1失败"
74 | echo "请手动安装$1后再执行本脚本"
75 | exit
76 | fi
77 | fi
78 | }
79 |
80 | ##### 确认架构及对应的tar包 #####
81 | # Geekbench 5、6只支持64位,即x86_64、aarch64、riscv64
82 | _check_architecture() {
83 | # 非64位直接退出
84 | if [ "$(getconf LONG_BIT)" != "64" ]; then
85 | echo "本脚本目前只支持64位处理器"
86 | exit
87 | fi
88 |
89 | # 判断是x86_64、aarch64还是riscv64
90 | if [ "$(uname -m)" == "x86_64" ]; then
91 | _blue "本机架构:x86_64"
92 | geekbench_tar_name=Geekbench-$geekbench_version-Linux.tar.gz
93 | geekbench_tar_folder=Geekbench-$geekbench_version-Linux
94 | geekbench_official_sha256=$geekbench_x86_64_official_sha256
95 | geekbench_software_name=geekbench5
96 | elif [ "$(uname -m)" == "aarch64" ]; then
97 | _blue "本机架构:aarch64"
98 | geekbench_tar_name=Geekbench-$geekbench_version-LinuxARMPreview.tar.gz
99 | geekbench_tar_folder=Geekbench-$geekbench_version-LinuxARMPreview
100 | geekbench_official_sha256=$geekbench_aarch64_official_sha256
101 | geekbench_software_name=geekbench5
102 | elif [ "$(uname -m)" == "riscv64" ]; then
103 | _blue "本机架构:riscv64"
104 | geekbench_tar_name=Geekbench-$geekbench_version-LinuxRISCVPreview.tar.gz
105 | geekbench_tar_folder=Geekbench-$geekbench_version-LinuxRISCVPreview
106 | geekbench_official_sha256=$geekbench_riscv64_official_sha256
107 | geekbench_software_name=geekbench5
108 | else
109 | echo "本脚本目前只支持x86_64、aarch64、riscv64架构"
110 | exit
111 | fi
112 | _blue "本机虚拟:$(systemd-detect-virt)"
113 | }
114 |
115 | ##### 创建目录 #####
116 | _make_dir() {
117 | # 删除可能存在的残余文件
118 | sudo swapoff $dir/swap &>/dev/null
119 | rm -rf $dir
120 |
121 | # 创建目录
122 | mkdir $dir
123 | }
124 |
125 | ##### 检测内存,增加Swap #####
126 | _check_swap() {
127 | # 检测内存
128 | mem=$(free -m | awk '/Mem/{print $2}')
129 | old_swap=$(free -m | awk '/Swap/{print $2}')
130 | old_ms=$((mem + old_swap))
131 | _blue "本机内存:${mem}Mi"
132 | _blue "本机Swap:${old_swap}Mi"
133 | _blue "内存加Swap总计:${old_ms}Mi\n"
134 |
135 | # 判断内存是否小于1G、或内存+Swap是否小于1.25G,若都小于则加Swap
136 | if [ "$mem" -ge "1024" ]; then
137 | _yellow "经判断,本机内存大于1G,满足GB5测试条件\n"
138 | elif [ "$old_ms" -ge "1280" ]; then
139 | _yellow "经判断,本机内存加Swap总计大于1.25G,满足GB5测试条件\n"
140 | else
141 | echo "经判断,本机内存小于1G,且内存加Swap总计小于1.25G,不满足GB5测试条件,有如下解决方案:"
142 | echo "1. 添加Swap (该操作脚本自动完成,且在GB5测试结束后会把本机恢复原样)"
143 | echo -e "2. 退出测试\n"
144 | _yellow "请输入您的选择 (序号):\c"
145 | read -r choice_1
146 | echo -e "\033[0m"
147 | case "$choice_1" in
148 | 2)
149 | exit
150 | ;;
151 | # 添加Swap
152 | 1)
153 | _yellow "添加Swap任务开始,完成时间取决于硬盘速度,请耐心等候\n"
154 | need_swap=$((1300 - old_ms))
155 | # fallocate -l "$need_swap"M $dir/swap
156 | # fallocate在RHEL6、7上创建swap失败,见https://access.redhat.com/solutions/4570081
157 | sudo dd if=/dev/zero of=$dir/swap bs=1M count=$need_swap
158 | sudo chmod 0600 $dir/swap
159 | sudo mkswap $dir/swap
160 | sudo swapon $dir/swap
161 |
162 | # 再次判断内存+Swap是否小于1.25G
163 | new_swap=$(free -m | awk '/Swap/{print $2}')
164 | new_ms=$((mem + new_swap))
165 | if [ "$new_ms" -ge "1280" ]; then
166 | echo
167 | _blue "经判断,现在内存加Swap总计${new_ms}Mi,满足GB5测试条件\n"
168 | else
169 | echo
170 | echo "很抱歉,由于未知原因,Swap未能成功新增,现在内存加Swap总计${new_ms}Mi,仍不满足GB5测试条件,有如下备选方案:"
171 | echo "1. 强制执行GB5测试"
172 | echo -e "2. 退出测试\n"
173 | _yellow "请输入您的选择 (序号):\c"
174 | read -r choice_2
175 | echo -e "\033[0m"
176 | case "$choice_2" in
177 | 2)
178 | exit
179 | ;;
180 | 1)
181 | echo
182 | ;;
183 | *)
184 | _red "输入错误,请重新执行脚本"
185 | exit
186 | ;;
187 | esac
188 | fi
189 | ;;
190 | *)
191 | _red "输入错误,请重新执行脚本"
192 | exit
193 | ;;
194 | esac
195 | fi
196 | }
197 |
198 | ##### 判断IP类型 #####
199 | # 对 IPv6 单栈的服务器来说进行测试没有意义,
200 | # 因为要将结果上传到 browser.geekbench.com 后才能拿到最后的跑分,
201 | # 但 browser.geekbench.com 仅有 IPv4、不支持 IPv6,测了也是白测。
202 | _check_ip() {
203 | if ! curl -s 'https://browser.geekbench.com' --connect-timeout 5 >/dev/null; then
204 | echo -e "对 IPv6 单栈的服务器来说进行测试没有意义,\n因为要将结果上传到 browser.geekbench.com 后才能拿到最后的跑分,\n但 browser.geekbench.com 仅有 IPv4、不支持 IPv6,测了也是白测。"
205 | exit 1
206 | fi
207 | }
208 |
209 | ##### 判断IP所在地,选择相应下载源 #####
210 | _check_region() {
211 | local loc
212 | loc="$(curl -s -L 'https://www.qualcomm.cn/cdn-cgi/trace' | awk -F '=' '/loc/{print $2}')"
213 | echo "loc: ${loc}"
214 | if [ -z "$loc" ]; then
215 | echo "使用镜像源"
216 | geekbench_tar_url=${url_2}/${geekbench_tar_name}
217 | elif [ "$loc" != "CN" ]; then
218 | echo "使用默认源"
219 | geekbench_tar_url=${url_1}/${geekbench_tar_name}
220 | else
221 | echo "使用镜像源"
222 | geekbench_tar_url=${url_2}/${geekbench_tar_name}
223 | fi
224 | }
225 |
226 | ##### 下载Geekbench tar包 ######
227 | _download_geekbench() {
228 | _yellow "测试软件下载中"
229 | curl --progress-bar -o "$dir/${geekbench_tar_name}" -L "$geekbench_tar_url"
230 | }
231 |
232 | ##### 计算SHA-256并比对 #####
233 | _check_sha256() {
234 | # 计算SHA-256
235 | geekbench_download_sha256=$(sha256sum $dir/${geekbench_tar_name} | awk '{print $1}')
236 | # 比对SHA-256
237 | if [ "$geekbench_download_sha256" == "$geekbench_official_sha256" ]; then
238 | _blue "经比对,下载的程序与官网SHA-256相同,放心使用"
239 | else
240 | _red "经比对,下载的程序与官网SHA-256不相同,退出脚本执行"
241 | _red "事关重大,方便的话麻烦到 https://github.com/i-abc/gb5 提一个issue"
242 | exit
243 | fi
244 | }
245 |
246 | ##### 解tar包 #####
247 | _unzip_tar() {
248 | tar -xf $dir/${geekbench_tar_name} -C ./$dir
249 | }
250 |
251 | ##### 运行测试 #####
252 | _run_test() {
253 | _yellow "测试中\n"
254 |
255 | # 计时开始
256 | run_start_time=$(date +"%s")
257 |
258 | # $dir/${geekbench_tar_folder}/${geekbench_software_name} | tee $dir/result.txt | awk '/System Information/,/Uploading results to the Geekbench Browser/ {if ($0 ~ /Uploading results to the Geekbench Browser/) exit; print}'
259 | # 由于未知原因,在Debian上逐行滚动失效,故awk换为perl
260 | $dir/${geekbench_tar_folder}/${geekbench_software_name} | tee $dir/result.txt | perl -ne 'if (/System Information/../Uploading results to the Geekbench Browser/) {if (/Uploading results to the Geekbench Browser/) {exit;} print;}'
261 |
262 | # 计时结束
263 | run_end_time=$(date +"%s")
264 |
265 | # 计算测试运行时间
266 | run_time=$((run_end_time - run_start_time))
267 | run_time_minutes=$((run_time / 60))
268 | run_time_seconds=$((run_time % 60))
269 | }
270 |
271 | ##### 下载含测试结果的html ######
272 | _download_result_html() {
273 | result_html_url=$(grep -E "https.*cpu/[0-9]*$" $dir/result.txt)
274 |
275 | if wget -4 --spider $result_html_url 2>/dev/null; then
276 | wget -4 -O $dir/result.html $result_html_url 2>/dev/null
277 | else
278 | wget --no-check-certificate -4 -O $dir/result.html $result_html_url 2>/dev/null
279 | fi
280 | }
281 |
282 | ##### 输出结果 (含时间、参数、分数、链接) #####
283 | _output_summary() {
284 | # 时间
285 | echo "当前时间:$(date +"%Y-%m-%d %H:%M:%S %Z")"
286 | echo -e "净测试时长:$run_time_minutes分$run_time_seconds秒\n"
287 |
288 | # 参数
289 | _yellow "Geekbench 5 测试结果\n"
290 | awk '/System Information/,/Size/{sub("System Information", "系统信息"); sub("Processor Information", "处理器信息"); sub("Memory Information", "内存信息"); print}' $dir/result.txt
291 |
292 | # 分数
293 | echo
294 | awk -F'>' '//{print $2}' $dir/result.html |
295 | awk -F'<' '{if (NR==1) {print "单核测试分数:"$1} else {print "多核测试分数:"$1}}'
296 |
297 | # 链接
298 | awk '/https.*cpu\/[0-9]*$/{print "详细结果链接:" $1}' $dir/result.txt
299 | cpu=$(awk -F 'with an? | processor' '/Benchmark results for/{gsub(/ /,"%20",$2); print $2}' $dir/result.html)
300 | echo "可供参考链接:https://browser.geekbench.com/search?k=v5_cpu&q=$cpu"
301 |
302 | echo
303 | awk '/https.*key=[0-9]*$/{print "个人保存链接:" $1}' $dir/result.txt
304 | }
305 |
306 | ##### 删除残余文件 #####
307 | _rm_dir() {
308 | sudo swapoff $dir/swap &>/dev/null
309 | rm -rf $dir
310 | unset LC_ALL
311 | echo -e "\033[0m"
312 | }
313 |
314 | ##### main #####
315 | _main() {
316 | trap '_rm_dir' EXIT
317 | clear
318 | _banner
319 | _check_locale
320 | _check_ip
321 | _check_package wget wget
322 | _check_package tar tar
323 | # _check_package fallocate util-linux
324 | _check_package perl perl
325 | clear
326 | _banner
327 | _check_architecture
328 | _make_dir
329 | _check_swap
330 | clear
331 | _banner
332 | _check_region
333 | _download_geekbench
334 | echo
335 | _check_sha256
336 | _unzip_tar
337 | clear
338 | _banner
339 | _run_test
340 | _download_result_html
341 | clear
342 | echo
343 | _banner
344 | _output_summary
345 | }
346 |
347 | _main
348 |
--------------------------------------------------------------------------------
/images/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/i-abc/GB5/17bc1a8e422462c47a2f7c842d4fb3549fb926f7/images/1.gif
--------------------------------------------------------------------------------
/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/i-abc/GB5/17bc1a8e422462c47a2f7c842d4fb3549fb926f7/images/1.png
--------------------------------------------------------------------------------
/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/i-abc/GB5/17bc1a8e422462c47a2f7c842d4fb3549fb926f7/images/2.png
--------------------------------------------------------------------------------
/images/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/i-abc/GB5/17bc1a8e422462c47a2f7c842d4fb3549fb926f7/images/3.png
--------------------------------------------------------------------------------