gpt4 book ai didi

linux - Golang : What is etext?

转载 作者:IT老高 更新时间:2023-10-28 13:09:29 36 4
gpt4 key购买 nike

我已经开始分析我的一些 Go1.2 代码,最上面的项目总是名为“etext”的东西。我四处搜索,但除了可能与 Go 例程中的调用深度有关之外,找不到太多关于它的信息。但是,我没有使用任何 Go 例程,并且“etext”仍然占用了总执行时间的 75% 或更多。

(pprof) top20 
Total: 171 samples
128 74.9% 74.9% 128 74.9% etext

任何人都可以解释这是什么以及是否有任何方法可以减少影响?

最佳答案

我遇到了同样的问题,然后我发现了这个:pprof broken in go 1.2? .为了验证它确实是 1.2 的错误,我编写了以下“hello world”程序:

package main

import (
"fmt"
"testing"
)

func BenchmarkPrintln( t *testing.B ){
TestPrintln( nil )
}

func TestPrintln( t *testing.T ){
for i := 0; i < 10000; i++ {
fmt.Println("hello " + " world!")
}
}

如您所见,它只调用 fmt.Println。

您可以使用“go test –c”​​编译它。使用“./test.test -test.bench 运行。 -test.cpuprofile=test.prof”使用“go tool pprof test.test test.prof”查看结果

(pprof) top10
Total: 36 samples
18 50.0% 50.0% 18 50.0% syscall.Syscall
8 22.2% 72.2% 8 22.2% etext
4 11.1% 83.3% 4 11.1% runtime.usleep
3 8.3% 91.7% 3 8.3% runtime.futex
1 2.8% 94.4% 1 2.8% MHeap_AllocLocked
1 2.8% 97.2% 1 2.8% fmt.(*fmt).padString
1 2.8% 100.0% 1 2.8% os.epipecheck
0 0.0% 100.0% 1 2.8% MCentral_Grow
0 0.0% 100.0% 33 91.7% System
0 0.0% 100.0% 3 8.3% _/home/xxiao/work/test.BenchmarkPrintln

以上结果是使用 go 1.2.1 得到的然后我使用 go 1.1.1 做了同样的事情,得到了以下结果:

(pprof) top10
Total: 10 samples
2 20.0% 20.0% 2 20.0% scanblock
1 10.0% 30.0% 1 10.0% fmt.(*pp).free
1 10.0% 40.0% 1 10.0% fmt.(*pp).printField
1 10.0% 50.0% 2 20.0% fmt.newPrinter
1 10.0% 60.0% 2 20.0% os.(*File).Write
1 10.0% 70.0% 1 10.0% runtime.MCache_Alloc
1 10.0% 80.0% 1 10.0% runtime.exitsyscall
1 10.0% 90.0% 1 10.0% sweepspan
1 10.0% 100.0% 1 10.0% sync.(*Mutex).Lock
0 0.0% 100.0% 6 60.0% _/home/xxiao/work/test.BenchmarkPrintln

可以看到1.2.1的结果没有多大意义。 Syscall 和 etext 占用大部分时间。而且 1.1.1 的结果看起来是对的。

所以我确信这确实是一个 1.2.1 错误。我在实际项目中切换到使用 go 1.1.1,现在我对分析结果感到满意。

关于linux - Golang : What is etext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21301018/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com