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
Currently the documentation does not elaborate on what the priority parameter actually means, does lower priority number mean the stream is drained first or is it the other way around?
it is mentioned that 0 is low and 0xFFFF is high, which logically seems to imply that 0xFFFF gets drained first
Over here
The circular linked list (Stream->SendLink) seems to be ordered from highest priority to lowest priority
voidQuicSendUpdateStreamPriority(
_In_QUIC_SEND*Send,
_In_QUIC_STREAM*Stream
)
{
CXPLAT_DBG_ASSERT(Stream->SendLink.Flink!=NULL);
CxPlatListEntryRemove(&Stream->SendLink);
CXPLAT_LIST_ENTRY*Entry=Send->SendStreams.Blink;
while (Entry!=&Send->SendStreams) {
//// Search back to front for the right place (based on priority) to// insert the stream.//if (Stream->SendPriority <=
CXPLAT_CONTAINING_RECORD(Entry, QUIC_STREAM, SendLink)->SendPriority) {
break;
}
Entry=Entry->Blink;
}
CxPlatListInsertHead(Entry, &Stream->SendLink); // Insert after current Entry
}
Over here
The first stream which can be sent seems to be sent, which would imply stream with a higher priority number is sent first.
_Success_(return!=NULL)
QUIC_STREAM*QuicSendGetNextStream(
_In_QUIC_SEND*Send,
_Out_uint32_t*PacketCount
)
{
QUIC_CONNECTION*Connection=QuicSendGetConnection(Send);
CXPLAT_DBG_ASSERT(!QuicConnIsClosed(Connection) ||CxPlatListIsEmpty(&Send->SendStreams));
CXPLAT_LIST_ENTRY*Entry=Send->SendStreams.Flink;
while (Entry!=&Send->SendStreams) {
//// TODO: performance: We currently search through blocked// streams repeatedly as we loop.//QUIC_STREAM*Stream=CXPLAT_CONTAINING_RECORD(Entry, QUIC_STREAM, SendLink);
//// Make sure, given the current state of the connection and the stream,// that we can use the stream to frame a packet.//if (QuicSendCanSendStreamNow(Stream)) {
if (Connection->State.UseRoundRobinStreamScheduling) {
//// Move the stream after any streams of the same priority. Start// with the "next" entry in the list and keep going until the// next entry's priority is less. Then move the stream before// that entry.//CXPLAT_LIST_ENTRY*LastEntry=Stream->SendLink.Flink;
while (LastEntry!=&Send->SendStreams) {
if (Stream->SendPriority>CXPLAT_CONTAINING_RECORD(LastEntry, QUIC_STREAM, SendLink)->SendPriority) {
break;
}
LastEntry=LastEntry->Flink;
}
if (LastEntry->Blink!=&Stream->SendLink) {
CxPlatListEntryRemove(&Stream->SendLink);
CxPlatListInsertTail(LastEntry, &Stream->SendLink);
}
*PacketCount=QUIC_STREAM_SEND_BATCH_COUNT;
} else { // FIFO prioritization scheme*PacketCount=UINT32_MAX;
}
returnStream;
}
Entry=Entry->Flink;
}
returnNULL;
}
Proposed solution
Add to description of stream priority in Settings.md.
Additional context
No response
The text was updated successfully, but these errors were encountered:
Describe the feature you'd like supported
Currently the documentation does not elaborate on what the priority parameter actually means, does lower priority number mean the stream is drained first or is it the other way around?
Over here
it is mentioned that 0 is low and 0xFFFF is high, which logically seems to imply that 0xFFFF gets drained first
Over here
The circular linked list (
Stream->SendLink
) seems to be ordered from highest priority to lowest priorityOver here
The first stream which can be sent seems to be sent, which would imply stream with a higher priority number is sent first.
Proposed solution
Add to description of stream priority in Settings.md.
Additional context
No response
The text was updated successfully, but these errors were encountered: