You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
This issue pertains to running an O/T split setup with remote GPU transcoders.
Currently for each segment from an incoming stream, the RemoteTranscodeManager will pick a new transcoder each segment. This is not ideal as it will result in GPU session startup overhead each time a transcoder gets re-selected after a few segments.
Under ideal circumstances the stream is transcoded by the same remote transcoder until there's a negative outcome: error, timeout, invalid result, ... .
Describe the solution you'd like
Add a Sessions concept to the RemoteTranscoderManager. A Session keeps track of the current Transcoder to be used for each ongoing stream ManifestID.
This can be tracked in a mapping map[manifestID]*remoteTranscoder.
When a remoteTranscoder is assigned a ManifestID its load will increase by 1.
When a remoteTranscoder is removed for a ManifestID (either due to bad performance, error or the segment loop for the manifestID timing out) its load will be reduced by 1.
If there is an existing session whenever a Transcode request for a segment comes in we will use the remoteTranscoder currently in the map rather than call selectTranscoder() for each incoming request.
Other than trying to improve O/T performance. This new per-stream rather than per-segment behaviour also opens the door for more suitable selection algorithms such as latency based selection.
The selectTranscoder and completeTranscoders functions can be re-used to manage sessions instead.
The biggest change/addition would be a way for the RemoteTranscoderManager to listen for segment loop closures (or run its own cleanup loop).
The text was updated successfully, but these errors were encountered:
Is your feature request related to a problem? Please describe.
This issue pertains to running an O/T split setup with remote GPU transcoders.
Currently for each segment from an incoming stream, the
RemoteTranscodeManager
will pick a new transcoder each segment. This is not ideal as it will result in GPU session startup overhead each time a transcoder gets re-selected after a few segments.Under ideal circumstances the stream is transcoded by the same remote transcoder until there's a negative outcome: error, timeout, invalid result, ... .
Describe the solution you'd like
Add a
Sessions
concept to theRemoteTranscoderManager
. ASession
keeps track of the currentTranscoder
to be used for each ongoing streamManifestID
.This can be tracked in a mapping
map[manifestID]*remoteTranscoder
.When a
remoteTranscoder
is assigned aManifestID
itsload
will increase by 1.When a
remoteTranscoder
is removed for aManifestID
(either due to bad performance, error or the segment loop for themanifestID
timing out) its load will be reduced by 1.If there is an existing session whenever a
Transcode
request for a segment comes in we will use theremoteTranscoder
currently in the map rather than callselectTranscoder()
for each incoming request.Other than trying to improve O/T performance. This new per-stream rather than per-segment behaviour also opens the door for more suitable selection algorithms such as latency based selection.
The
selectTranscoder
andcompleteTranscoders
functions can be re-used to manage sessions instead.The biggest change/addition would be a way for the
RemoteTranscoderManager
to listen for segment loop closures (or run its own cleanup loop).The text was updated successfully, but these errors were encountered: