Как интерпретировать ход pprof / mutex, показывающий ожидание при разблокировке? - PullRequest
0 голосов
/ 16 декабря 2018

Я оптимизирую производительность программы Go.Глядя на профилирование мьютекса, я получил

> go tool pprof -seconds 30 -ignore .*Shopify.*  http://HOST/debug/pprof/mutex
(pprof) top 20
Active filters:
ignore=.*Shopify.*
Showing nodes accounting for 3.08mins, 91.03% of 3.39mins total
Dropped 82 nodes (cum <= 0.02mins)
    flat  flat%   sum%        cum   cum%
3.08mins 91.03% 91.03%   3.08mins 91.03%  sync.(*Mutex).Unlock
       0     0% 91.03%   0.06mins  1.75%  ....func2
       0     0% 91.03%   0.06mins  1.75%  ....func3

Фрагмент кода

     .          .    502:    w.mu.Lock()

     .          .    ... some calculation

     .   5.02mins    510:    w.mu.Unlock()
     .          .    511:
     .          .    512:    return nil
     .          .    513:}

Что я не понимаю:

  • Почему профилирование мьютекса показываеттолько топ 1 имеет flat время, все остальные 0?
  • Если он показывает ожидание на Lock, то это, вероятно, означает, что расчет занимает слишком много времени, но что это значит, когда он показывает ожидание наUnlock?
...