10

golang mac m1的性能压测 – 峰云就她了

 3 years ago
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的性能压测 – 峰云就她了

专注于Golang、Python、DB、cluster

同事在我的强烈推荐下购买了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测试版。

golang mac m1 编译

但这也不能耽误人家工作呀,所以在网上一堆找方案,安装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还是会有些降频的。


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc
weixin_new.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK