

golang mac m1的性能压测 – 峰云就她了
source link: http://xiaorui.cc/archives/7144?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

golang mac m1的性能压测 – 峰云就她了
同事在我的强烈推荐下购买了mac m1,13寸本,内存16g。😅
主机来了后开始配置环境,这也是烦躁的开始。像一些开发者工具的教程多是x86的,所以需要找到m1的适配教程。像brew工具,官方文档中就有标注m1的安装文档。
golang release里没有m1的版本,下载x86和arm版运行提示不可用,arm版直接报错,x86 golang二进制文件运行后一直hang住,没有任何提示。go官方博客中说1.16的版本会支持mac m1,但1.16的正式版是2021年的2月份,预计会提前先放出几版beta测试版。

但这也不能耽误人家工作呀,所以在网上一堆找方案,安装rosetta 2指令翻译器,然后重新编译golang。 具体编译golang过程我就不描述了,自己在网上搜吧。
Rosetta 2 的作用在于它通过指令翻译,可以让 ARM 平台的 macOS,直接运行绝大部分的 X86 软件。经过测试,以前常用的Mac x86软件多数可流程运行,也有一些各别的软件出现卡顿,比如karabiner、vimac、magnet等。vscode打开一瞬间像是hang住了,近2秒后才显示按钮布局。Rosetta 2的翻译还是有损耗,还是要等软件出m1适配版。
借来玩了几天Mac M1,续航真是不错。除了前期遇到些问题,后面的应用体验跟x86差不多,平时办公和开发用到的软件也都可以流畅跑起来。除了docker和虚拟机不能x86系统之外,没什么影响。
我个人习惯使用Vim和vscode做为golang的代码编辑器,在M1下基本无问题,可以用。Goland支持当然也没有问题的。
最让人惊艳的就是散热,首先没有风扇的声音干扰太爽了。😁 就日常开发工作中,相比16寸 mac来说温度着实低些。
全网都在鼓吹M1的性能,个人也相当的感兴趣,所以来一波简单粗暴、不可靠的压力测试。由于工作主要是基于golang开发,那么索性就测试github中较热门的benchmark。
下面是 mac m1 跟 mac 2019 16寸 i7的性能对比,分别做了5轮测试,且go test都限制为4个u,取各个平台的多次结果中较为平均的测试输出。压力测试项目用的这个 github.com/cornelk/go-benchmark 。
单单就测试耗时来说,m1是要比intel i7执行的快个14%。其实之前在两个mac上还做过 go_serialization_benchmarks 对比测试,m1耗时依然要比intel i7快12%左右。
mac m1
// mac m1
➜ go-benchmark git:(master) go test -bench=. -cpu=4
goos: darwin
goarch: amd64
pkg: github.com/cornelk/go-benchmark
BenchmarkAtomicInt32-4 334891 3539 ns/op
BenchmarkAtomicInt64-4 335152 3551 ns/op
BenchmarkAtomicUintptr-4 333566 3551 ns/op
BenchmarkDefer-4 3812605 315 ns/op
BenchmarkDeferNo-4 39484240 30.4 ns/op
BenchmarkGoroutineNew-4 10000 2556633 ns/op
BenchmarkGoroutineChan1RteCPU-4 10000 1370799 ns/op
BenchmarkGoroutineChan10RteCPU-4 10000 314480 ns/op
BenchmarkGoroutineChanCPURteCPU-4 10000 349479 ns/op
BenchmarkGoroutineChan100RteCPU-4 10000 150737 ns/op
BenchmarkGoroutineChan10000RteCPU-4 10000 159831 ns/op
BenchmarkGoroutineChan10Rte10-4 10000 320326 ns/op
BenchmarkGoroutineChan100Rte100-4 10000 253850 ns/op
BenchmarkGoroutineChan10000Rte10000-4 100 14479701 ns/op
BenchmarkHashing64MD5-4 5085172 250 ns/op 32.05 MB/s
BenchmarkHashing64SHA1-4 4629715 280 ns/op 28.53 MB/s
BenchmarkHashing64SHA256-4 3403106 354 ns/op 22.62 MB/s
BenchmarkHashing64SHA3B224-4 1511235 828 ns/op 9.66 MB/s
BenchmarkHashing64SHA3B256-4 1791288 765 ns/op 10.45 MB/s
BenchmarkHashing64RIPEMD160-4 2268490 529 ns/op 15.11 MB/s
BenchmarkHashing64Blake2B-4 1834280 707 ns/op 11.32 MB/s
BenchmarkHashing64Blake2BSimd-4 1937584 622 ns/op 12.86 MB/s
BenchmarkHashing64Murmur3-4 13321485 134 ns/op 59.49 MB/s
BenchmarkHashing64Murmur3Twmb-4 14345737 89.2 ns/op 89.73 MB/s
BenchmarkHashing64SipHash-4 18197372 85.3 ns/op 93.77 MB/s
BenchmarkHashing64XXHash-4 16784458 68.6 ns/op 116.63 MB/s
BenchmarkHashing64XXHashpier-4 17751019 84.3 ns/op 94.90 MB/s
BenchmarkHashing64HighwayHash-4 8982220 141 ns/op 56.64 MB/s
BenchmarkHashing32XXHashvova-4 18115452 65.8 ns/op 121.56 MB/s
BenchmarkHashing32XXHashpier-4 20853364 63.9 ns/op 125.20 MB/s
BenchmarkHashing32XXHash-4 13377956 98.3 ns/op 81.40 MB/s
BenchmarkHashing16XXHash-4 18447655 98.3 ns/op 81.36 MB/s
BenchmarkHashing8XXHash-4 18637072 68.7 ns/op 116.47 MB/s
BenchmarkValueUnsafePointer-4 53164192 22.3 ns/op
BenchmarkValueInterface-4 23458231 51.0 ns/op
BenchmarkReflect-4 2154338 555 ns/op
BenchmarkCast-4 18145458 66.1 ns/op
BenchmarkParameterPassedByPointer-4 12744134 92.5 ns/op
BenchmarkParameterPassedByValue-4 12046428 93.0 ns/op
BenchmarkSliceReadRange-4 54937928 21.7 ns/op
BenchmarkSliceReadForward-4 38538789 31.0 ns/op
BenchmarkSliceReadBackwards-4 33178958 36.0 ns/op
BenchmarkSliceReadLastItemFirst-4 38209411 31.4 ns/op
BenchmarkSliceFillByIndex-4 55740060 21.5 ns/op
BenchmarkSliceFillByIndexMake-4 56151075 26.9 ns/op
BenchmarkSliceFillMakeAppend-4 50314112 23.9 ns/op
BenchmarkSliceFillAppendNoMake-4 3114499 601 ns/op
BenchmarkSliceFillSmallMakeAppend-4 2443990 943 ns/op
BenchmarkFillLinkedListPushBack-4 619824 3911 ns/op
BenchmarkFillLinkedListPushFront-4 692575 2082 ns/op
BenchmarkSyncRWMutex-4 11111484 109 ns/op
BenchmarkSyncRWAtomic-4 10568516 113 ns/op
BenchmarkSyncRWAtomicGosched-4 13135485 91.8 ns/op
PASS
ok github.com/cornelk/go-benchmark 327.366s
mac intel i7 2019 16寸
// mac intel i7 2019 16寸
go test -bench=. -cpu=4
goos: darwin
goarch: amd64
pkg: github.com/cornelk/go-benchmark
BenchmarkAtomicInt32-4 309592 3785 ns/op
BenchmarkAtomicInt64-4 310130 3941 ns/op
BenchmarkAtomicUintptr-4 300513 3910 ns/op
BenchmarkDefer-4 3523532 328 ns/op
BenchmarkDeferNo-4 12503139 91.2 ns/op
BenchmarkGoroutineNew-4 10000 1820902 ns/op
BenchmarkGoroutineChan1RteCPU-4 10000 334300 ns/op
BenchmarkGoroutineChan10RteCPU-4 10000 220070 ns/op
BenchmarkGoroutineChanCPURteCPU-4 10000 204412 ns/op
BenchmarkGoroutineChan100RteCPU-4 10000 170625 ns/op
BenchmarkGoroutineChan10000RteCPU-4 10000 175718 ns/op
BenchmarkGoroutineChan10Rte10-4 10000 213040 ns/op
BenchmarkGoroutineChan100Rte100-4 10000 241891 ns/op
BenchmarkGoroutineChan10000Rte10000-4 100 19974006 ns/op
BenchmarkHashing64MD5-4 7532625 189 ns/op 42.33 MB/s
BenchmarkHashing64SHA1-4 5739030 186 ns/op 43.08 MB/s
BenchmarkHashing64SHA256-4 5050978 242 ns/op 33.01 MB/s
BenchmarkHashing64SHA3B224-4 1565026 901 ns/op 8.88 MB/s
BenchmarkHashing64SHA3B256-4 1690936 765 ns/op 10.45 MB/s
BenchmarkHashing64RIPEMD160-4 2395820 499 ns/op 16.02 MB/s
BenchmarkHashing64Blake2B-4 3472456 341 ns/op 23.49 MB/s
BenchmarkHashing64Blake2BSimd-4 3831225 340 ns/op 23.54 MB/s
BenchmarkHashing64Murmur3-4 18620680 64.3 ns/op 124.35 MB/s
BenchmarkHashing64Murmur3Twmb-4 19444350 63.5 ns/op 125.97 MB/s
BenchmarkHashing64SipHash-4 21155768 56.0 ns/op 142.77 MB/s
BenchmarkHashing64XXHash-4 31849977 51.3 ns/op 155.94 MB/s
BenchmarkHashing64XXHashpier-4 28207137 44.9 ns/op 178.29 MB/s
BenchmarkHashing64HighwayHash-4 13295876 92.0 ns/op 86.95 MB/s
BenchmarkHashing32XXHashvova-4 33265984 35.6 ns/op 224.68 MB/s
BenchmarkHashing32XXHashpier-4 31837797 37.0 ns/op 216.20 MB/s
BenchmarkHashing32XXHash-4 21471313 56.1 ns/op 142.53 MB/s
BenchmarkHashing16XXHash-4 21619030 55.0 ns/op 145.49 MB/s
BenchmarkHashing8XXHash-4 31882546 36.8 ns/op 217.49 MB/s
BenchmarkValueUnsafePointer-4 68717324 17.0 ns/op
BenchmarkValueInterface-4 30155677 38.9 ns/op
BenchmarkReflect-4 7165081 165 ns/op
BenchmarkCast-4 18640602 62.4 ns/op
BenchmarkParameterPassedByPointer-4 16345183 76.5 ns/op
BenchmarkParameterPassedByValue-4 10353224 120 ns/op
BenchmarkSliceReadRange-4 59617837 19.7 ns/op
BenchmarkSliceReadForward-4 18860553 61.5 ns/op
BenchmarkSliceReadBackwards-4 18713661 62.0 ns/op
BenchmarkSliceReadLastItemFirst-4 47315362 25.2 ns/op
BenchmarkSliceFillByIndex-4 72714333 16.3 ns/op
BenchmarkSliceFillByIndexMake-4 35459602 31.7 ns/op
BenchmarkSliceFillMakeAppend-4 41651622 28.7 ns/op
BenchmarkSliceFillAppendNoMake-4 3953661 671 ns/op
BenchmarkSliceFillSmallMakeAppend-4 2419346 430 ns/op
BenchmarkFillLinkedListPushBack-4 498951 2398 ns/op
BenchmarkFillLinkedListPushFront-4 503970 2394 ns/op
BenchmarkSyncRWMutex-4 19353127 61.8 ns/op
BenchmarkSyncRWAtomic-4 4075513 303 ns/op
BenchmarkSyncRWAtomicGosched-4 18012901 68.9 ns/op
PASS
ok github.com/cornelk/go-benchmark 375.283s
社区里其他人的测试
下面m1 vs intel的测试结果显得更加专业,文章的总结都表示M1的结果让人惊艳。但像crypto这类高度依赖指令集的代码,intel运行性能还是要高于M1处理器。
https://roland.zone/m1-go-benchmarks/
https://gohugo.io/news/hugo-macos-intel-vs-arm/
Mac M1各方面还真是可以,性能压测数据也相对可观,但还是建议够买需求的朋友再稳稳。毕竟对于程序员来说,Mac是生产工具,而不是让你烦躁的发动机。要么等开发工具完美适配,要么等M2出世。
M1的发热控制的不错,在压测的几十分钟内,M1的发热要比16寸低一些。另外,长时间跑cpu密集运算,M1还是会有些降频的。
Recommend
-
69
作者:王清培本文原创,转载请注明作者及出处压力机及压力工具检测Linux openfiles limit 设置排查周边依赖空接口压测检测聚合报告中 throug...
-
38
用 redis 的 list 数据结构作为轻量级的消息队列,对于小系统确实是小而美,可控能力强。 当然与kafka 和 rabbitmq 相比它还有很多缺陷,在服务进行生产和消费的时候,还需要加上部分逻辑进行处理。 自己写了点 golang...
-
53
本文作者来自本号的粉丝:林夕_Yume,作者微信: wxid_nvd5wwng4v2i22 欢迎大家关注他的简书:https://www.jianshu.com/u/3fa2b243f30d 大家有同样需求的同学赶紧加他好...
-
15
Dubbo 服务性能压测(with JMeter) 最近在做Dubbo服务与Prometheus的监控集成,为了测试监控组件对Dubbo RPC 调用的性能影响,就需要对添加前后做性能测试。虽然之前给组内搭建了统一的Dubbo 服务测试平台,但...
-
16
一、环境说明: 此次演示是dellr620 物理服务器,系统为centos7.6 x86_64位硬件相关的信息如下: [root@mysql-redis scripts]# sh hw_msg1.sh +------------------------------------...
-
13
golang mac m1的性能压测 – 峰云就她了 峰云就她了 专注于Golang、Python、DB、cluster 同事在我的强烈推荐下购买了mac m1,13寸...
-
6
排查压测问题引发的系统性能调优过程 By 木子雷 发表于...
-
10
-
10
Python实现Android性能数据获取及压测场景模拟 2021年5月22日 | 最近更新于 下午7:42在做自动化脚本测试中,需要去获取Android设备CPU和内存数据,并对不同CPU占用场景进行模拟,用来测试系统不同CPU状态下对应用运行状态的影响。本文内容...
-
7
用 golang 来编写压测工具 calendar Mar 1, 2016 clock 2 min read...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK