-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Limiting software will help hardware #27
Comments
If this helps perf, I think we could definitely consider restricting packet numbers to 4 bytes. MsQuic already always uses 4 bytes.
On RX, we definitely can/do use the same length CIDs in MsQuic. On TX, we don't have control of the CID, so we can't place any restrictions. |
An additional request is to keep the connection ID as short as possible. I speculate that different devices may have different limitations, in general the shorter the better. |
As previously indicated, we have no control for the TX path. But even for the RX path, the size and composition of the CID will generally be dictated based on the load balancer model. For instance, encrypted CID LB models will require 18-byte CIDs. So, while I agree that smaller might be better, we cannot make any assumptions or restrictions in this area, unfortunately. In fact, I think we should assume worst case here, and do what we can to optimize for it. |
@BorisPis @stevedoyle (and any others) for the constant packet number issue, should it be a recommendation or a requirement? |
Right, because the client selects the CID.
Right, and these will likely have slightly worse performance and scale.
Hmm... For high speed connections using hardware, it will simplify things if this was required. But, we can live with it being only a recommendation. In any case, I think that the kernel-driver interface should indicate whether this is enforced or not. The device's offload for a flow may look slightly differently when packet numbers are guaranteed to be 4 bytes. |
Based on this feedback and others I've received privately, I'm leaning towards possibly having the following restrictions to make things simpler for the hardware (and to some extent the software):
|
That would improve receive offload, if possible please consider doing so.
In general, the connection ID problem is mainly a receive side issue. On transmit, software and hardware can use a short <=4B hint to indicate the connection's parameters. This however is not possible on receive as the NIC sees the packet before software.
That would help as well. Even making the packet number length a constant would avoid a lookup as long as hardware knows this ahead of time. |
We had some discussions yesterday, and are currently leaning towards:
|
Consider adding an API for users to indicate that on the send side, packets will not use variable length fields. Doing variable length field processing in hardware is more costly, and performance and scale will improve if assumptions can be made on packet header format.
In particular, consider:
The text was updated successfully, but these errors were encountered: