proc: optimize FindGoroutine by checking the cache first (#2118)

This commit is contained in:
Alessandro Arzilli 2020-08-05 18:10:13 +02:00 committed by GitHub
parent 46731820df
commit 7a8316b52f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -388,6 +388,10 @@ func FindGoroutine(dbp *Target, gid int) (*G, error) {
return nil, fmt.Errorf("unknown goroutine %d", gid) return nil, fmt.Errorf("unknown goroutine %d", gid)
} }
if g := dbp.gcache.partialGCache[gid]; g != nil {
return g, nil
}
// Calling GoroutinesInfo could be slow if there are many goroutines // Calling GoroutinesInfo could be slow if there are many goroutines
// running, check if a running goroutine has been requested first. // running, check if a running goroutine has been requested first.
for _, thread := range dbp.ThreadList() { for _, thread := range dbp.ThreadList() {
@ -397,10 +401,6 @@ func FindGoroutine(dbp *Target, gid int) (*G, error) {
} }
} }
if g := dbp.gcache.partialGCache[gid]; g != nil {
return g, nil
}
const goroutinesInfoLimit = 10 const goroutinesInfoLimit = 10
nextg := 0 nextg := 0
for nextg >= 0 { for nextg >= 0 {