2016-03-08 3 views
5

मैं अपने जाने पुस्तकालय रूपरेखा करने की कोशिश के साथ केवल एक लाइन को दर्शाता है।Golang रूपरेखा - top10 पता लगाने के लिए क्या किया जा रहा है ताकि ज्यादा ग में एक ही बात की तुलना में धीमी ++ का कारण है, 100%

मैं,

func BenchmarkFile(t *testing.B) { 
    tmpFile, err := ioutil.TempFile("", TMP_FILE_PREFIX) 

    fw, err := NewFile(tmpFile.Name()) 
    text := []byte("testing") 
    for i := 0; i < b.N; i++ { 
     _, err = fw.Write(text) 
    } 
    fw.Close() 
} 

NewFile जो हमारे द्विआधारी प्रतिनिधित्व करने के लिए डेटा encodes अपने कस्टम लेखक वापसी सरल बेंचमार्क है यहां तक ​​कि उन्हें सेक, और सिस्टम फाइल करने के लिए लिखें।

रनिंग go test -bench . -memprofile mem.out -cpuprofile cpu.out मैं विश्लेषण करने के अलावा प्राप्त

PASS 
BenchmarkFile-16 2000000000   0.20 ns/op 
ok  .../writer/iowriter 9.074s 

यह

# go tool pprof cpu.out 
Entering interactive mode (type "help" for commands) 
(pprof) top10 
930ms of 930ms total ( 100%) 
     flat flat% sum%  cum cum% 
    930ms 100% 100%  930ms 100% 
(pprof) 

मैं भी example.go एप्लिकेशन जो मेरे लेखक उपयोग कर रहा है लिखने की कोशिश, और pprof.StartCPUProfile(f) जोड़ने के रूप में http://blog.golang.org/profiling-go-programs में लेकिन साथ दिखाया गया है एक ही परिणाम।

मैं गलत क्या कर रहा हूँ, और मैं कैसे निर्धारित कर सकते हैं मेरी lib की टोंटी क्या है? अग्रिम धन्यवाद

+2

तुम क्यों प्रयोग कर रहे हैं "i <1000"? बेंचमार्क को बीएन फ़ील्ड का उपयोग करना चाहिए या वे सही परिणाम नहीं देंगे, क्योंकि प्रत्येक बेंचमार्क फ़ंक्शन को बीएन के विभिन्न मानों के साथ संभावित रूप से कई बार कहा जाता है। – nussjustin

+0

ठीक है, मैं ठीक कर देंगे कि – sejvlond

उत्तर

7

ठीक है यह आसान है, मैं उपकरण pprof जाना द्विआधारी जोड़ने के लिए याद आती है, एसआई यह यह एक ही देता है का उपयोग कर

# go tool pprof write cpu.out 
Entering interactive mode (type "help" for commands) 
(pprof) top10 
7.02s of 7.38s total (95.12%) 
Dropped 14 nodes (cum <= 0.04s) 
Showing top 10 nodes out of 32 (cum >= 0.19s) 
     flat flat% sum%  cum cum% 
    6.55s 88.75% 88.75%  6.76s 91.60% syscall.Syscall 
    ... 

और जब बेंचमार्क परीक्षणों का उपयोग कर, द्विआधारी वहाँ बनाई गई है और हो गया है परिणाम।

+1

आपको यह उत्तर कृपया स्पष्ट कर सकते हैं? यह स्पष्ट नहीं है कि आपका समाधान क्या था या क्या यह काम करता था। – Dan

+0

मुझे लगता है कि यह बहुत स्पष्ट है। तो यह हो गया है "मैं द्विआधारी जोड़ने के लिए उपकरण जाना pprof याद आती है": "उपकरण जाना cpu.out लिखने pprof" और इस आदेश के बाद, आप उत्पादन देख सकते हैं, तो यह काम किया .. – sejvlond

+0

सोच उन लोगों के लिए, " लिखो "बाइनरी का नाम है। –

0

sejvolnd के जवाब पर विस्तार करने के लिए:

pprof द्विआधारी है कि वास्तव में पहली बार एक तर्क के रूप में cpu.out फ़ाइल उत्पन्न की जरूरत है।

तो तुम go tool pprof <go binary of your program> <generaged profiling output file>

जैसे के रूप में कमांड चलाने की आवश्यकता go tool pprof go_binary cpu.pprof

संबंधित मुद्दे

 संबंधित मुद्दे