• Tom Bergan's avatar
    http2: interface to support pluggable schedulers · 4be9b97e
    Tom Bergan authored
    This adds an interface to support pluggable schedulers. The interface
    is defined in writesched.go. The only type needed by this interface is
    FrameWriteRequest, which describes a request to write a frame (this used
    to be called frameWriteMsg). The scheduler can be configured with a new
    field in http2.Server. Two schedulers are implemented:
    
    1) A random scheduler that is essentially equivalent to the existing
       scheduler. This is currently the default scheduler if none is
       configured. The implementation is in writesched_random.go.
    
    2) A scheduler that uses H2 weights and priorities. The H2 priority tree
       is maintained as a tree of priorityNodes. The next frame is chosen by
       walking this tree in topological order, where sibling nodes are ordered
       by their bandwidth usage relative to their H2 weight. Two optional
       features are added to improve performance -- these are configured with
       PriorityWriteSchedulerConfig.
    
    Fixes golang/go#16168
    
    Change-Id: I97ec93e5c58c2efec35455ba2f3c31e849f706af
    Reviewed-on: https://go-review.googlesource.com/25366Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    4be9b97e
writesched_priority.go 13.1 KB