[virtio-dev] Re: [virtio-comment] Re: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
在 2023/2/17 下午6:07, Michael S. Tsirkin 写道: On Fri, Feb 17, 2023 at 11:40:15AM +0200, Alvaro Karsz wrote: Maybe we can use struct virtio_net_ctrl_coal inside struct virtio_net_ctrl_coal_vq instead of repeating max_usecs and max_packets? I'm not sure if it would be confusing, what do you think? Hi Alvaro. I guess you mean one of the following two forms: #1 struct virtio_net_ctrl_coal { le32 max_packets; le32 max_usecs; }; struct virtio_net_ctrl_coal_vq { le16 vqn; le16 reserved; struct virtio_net_ctrl_coal coal; } coal_vq; #2 struct virtio_net_ctrl_coal { le32 max_packets; le32 max_usecs; le16 vqn; // if _F_VQ_NOTF_COAL is negotiated le16 reserved; // if _F_VQ_NOTF_COAL is negotiated }; If it's #1, I think the format is a bit ugly, it's not semantic to use coal_vq to send global commands when _F_VQ_NOTF_COAL is not negotiated, and the presence of vqn and reserved is awkward. If it's #2, I think this is a bit like the v1 version, using virtio_net_ctrl_coal as a virtual queue to send commands does not seem to be semantic, but it is indeed more unified in function. I think we should hear from Michael and Parav. I meant #1. We can see virtio_net_ctrl_coal as a struct holding coalescing parameters, regardless of the commands. Yes, let's wait for more comments on that. Reusing virtio_net_ctrl_coal is a nice thought. Makes it a bit clearer these have exactly the same role. Whether to put vqn first or last does not matter imho. +Virtqueue coalescing parameters: +\begin{itemize} +\item \field{vqn}: The virtqueue number of the enabled transmit or receive virtqueue, excluding the control virtqueue. +\item \field{max_packets}: The maximum number of packets sent/received by the specified virtqueue before a TX/RX notification. +\item \field{max_usecs}: The maximum number of TX/RX usecs that the specified virtqueue delays a TX/RX notification. +\end{itemize} + +\field{reserved} is reserved and it is ignored by the device. + max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. ("Maximum number of packets to receive/send before a RX/TX notification"). The fact that this is applied to all VQs or to a specific one is derived from the command. Same for max_usecs. Maybe we can join the coalescing parameters somehow instead of repeating the explanations? Any thoughts on this part? I think I agree. Generally I think we should first of all describe the new VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET, moving all explanation text to that. Then just explain that VIRTIO_NET_CTRL_NOTF_COAL_TX_SET and VIRTIO_NET_CTRL_NOTF_COAL_RX_SET have the same effect as VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET repeated for all currently enabled tx/rx vqs. Plus maybe a single annotated example where there's a mix of VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET, VIRTIO_NET_CTRL_NOTF_COAL_RX_SET and VIRTIO_NET_CTRL_NOTF_COAL_TX_SET commands. For example with 2 vq pairs: 1. VIRTIO_NET_CTRL_NOTF_COAL_RX_SET sets for vq 0 and 2, vq 1 and 3 retain reset value 2. VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET sets vq 0, vq 2 retains value from 1 3. VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET sets vq 1, vq 3 retains reset value 4. VIRTIO_NET_CTRL_NOTF_COAL_TX_SET overrides command 3 no need for many examples. Good idea. This is a clear and comprehensive example. Thanks. - To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
RE: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
> From: Michael S. Tsirkin > Sent: Friday, February 17, 2023 5:07 AM > > > #1 > > > struct virtio_net_ctrl_coal { > > > le32 max_packets; > > > le32 max_usecs; > > > }; > > > > > > struct virtio_net_ctrl_coal_vq { > > > le16 vqn; > > > le16 reserved; > > > struct virtio_net_ctrl_coal coal; } coal_vq; > > > I think we should hear from Michael and Parav. > > > > > > > I meant #1. > > We can see virtio_net_ctrl_coal as a struct holding coalescing > > parameters, regardless of the commands. > > Yes, let's wait for more comments on that. > +1 for #1. > Reusing virtio_net_ctrl_coal is a nice thought. Makes it a bit clearer these > have > exactly the same role. > Whether to put vqn first or last does not matter imho. > Putting VQN first looks better to me, to say for vqn -> below are the parameters. We may find more parameters in future too in same struct. At that point also having vqn first reads better. > > > > > +Virtqueue coalescing parameters: > > > > > +\begin{itemize} > > > > > +\item \field{vqn}: The virtqueue number of the enabled transmit or > receive virtqueue, excluding the control virtqueue. > > > > > +\item \field{max_packets}: The maximum number of packets > sent/received by the specified virtqueue before a TX/RX notification. > > > > > +\item \field{max_usecs}: The maximum number of TX/RX usecs that > the specified virtqueue delays a TX/RX notification. > > > > > +\end{itemize} > > > > > + > > > > > +\field{reserved} is reserved and it is ignored by the device. > > > > > + > > > > > > > > max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET > and > > > > with VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. > > > > ("Maximum number of packets to receive/send before a RX/TX > notification"). > > > > The fact that this is applied to all VQs or to a specific one is > > > > derived from the command. > > > > Same for max_usecs. > > > > Maybe we can join the coalescing parameters somehow instead of > > > > repeating the explanations? > > > > > > > > Any thoughts on this part? > > I think I agree. Generally I think we should first of all describe the new > VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET, moving all explanation text to that. > > Then just explain that VIRTIO_NET_CTRL_NOTF_COAL_TX_SET and > VIRTIO_NET_CTRL_NOTF_COAL_RX_SET have the same effect as > VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET repeated for all currently enabled > tx/rx vqs. > Plus maybe a single annotated example where there's a mix of > VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET, > VIRTIO_NET_CTRL_NOTF_COAL_RX_SET and > VIRTIO_NET_CTRL_NOTF_COAL_TX_SET commands. For example with 2 vq > pairs: > > 1. VIRTIO_NET_CTRL_NOTF_COAL_RX_SET sets for vq 0 and 2, vq 1 and 3 retain > reset value 2. VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET sets vq 0, vq 2 retains > value from 1 3. VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET sets vq 1, vq 3 retains > reset value 4. VIRTIO_NET_CTRL_NOTF_COAL_TX_SET overrides command 3 > > no need for many examples. +1. - To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
Re: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
On Fri, Feb 17, 2023 at 06:06:03PM +0800, Heng Qi wrote: > On Fri, Feb 17, 2023 at 11:40:15AM +0200, Alvaro Karsz wrote: > > > > Maybe we can use struct virtio_net_ctrl_coal inside struct > > > > virtio_net_ctrl_coal_vq instead of repeating max_usecs and > > > > max_packets? > > > > I'm not sure if it would be confusing, what do you think? > > > > > > > > > > Hi Alvaro. > > > > > > I guess you mean one of the following two forms: > > > > > > #1 > > > struct virtio_net_ctrl_coal { > > > le32 max_packets; > > > le32 max_usecs; > > > }; > > > > > > struct virtio_net_ctrl_coal_vq { > > > le16 vqn; > > > le16 reserved; > > > struct virtio_net_ctrl_coal coal; > > > } coal_vq; > > > > > > #2 > > > struct virtio_net_ctrl_coal { > > > le32 max_packets; > > > le32 max_usecs; > > > le16 vqn; // if _F_VQ_NOTF_COAL is negotiated > > > le16 reserved; // if _F_VQ_NOTF_COAL is negotiated > > > }; > > > > > > If it's #1, I think the format is a bit ugly, it's not semantic to use > > > coal_vq to send global commands when _F_VQ_NOTF_COAL is not negotiated, > > > and the presence of vqn and reserved is awkward. > > > If it's #2, I think this is a bit like the v1 version, using > > > virtio_net_ctrl_coal as a virtual queue to send commands does not seem to > > > be semantic, but it is indeed more unified in function. > > > > > > I think we should hear from Michael and Parav. > > > > > > > I meant #1. > > We can see virtio_net_ctrl_coal as a struct holding coalescing > > parameters, regardless of the commands. > > Yes, let's wait for more comments on that. > > > > > > > +Virtqueue coalescing parameters: > > > > > +\begin{itemize} > > > > > +\item \field{vqn}: The virtqueue number of the enabled transmit or > > > > > receive virtqueue, excluding the control virtqueue. > > > > > +\item \field{max_packets}: The maximum number of packets > > > > > sent/received by the specified virtqueue before a TX/RX notification. > > > > > +\item \field{max_usecs}: The maximum number of TX/RX usecs that the > > > > > specified virtqueue delays a TX/RX notification. > > > > > +\end{itemize} > > > > > + > > > > > +\field{reserved} is reserved and it is ignored by the device. > > > > > + > > > > > > > > max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with > > > > VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. > > > > ("Maximum number of packets to receive/send before a RX/TX > > > > notification"). > > > > The fact that this is applied to all VQs or to a specific one is > > > > derived from the command. > > > > Same for max_usecs. > > > > Maybe we can join the coalescing parameters somehow instead of > > > > repeating the explanations? > > > > > > > > Any thoughts on this part? > > Good idea, and if so, is there a good way to expose vqn to the interpretation > of max_packets ? not sure what you are asking here. > > #1 > \item \field{vqn}: The virtqueue number of the enabled transmit or receive > virtqueue. an enabled - 1st time you mention a virtqueue. > \item \field{max_packets}: The maximum number of packets sent/received by the > specified virtqueue before a TX/RX notification. > > #2 > \item \field{max_packets}: Maximum number of packets to receive/send before a > RX/TX notification. > > Thanks. - To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
Re: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
On Fri, Feb 17, 2023 at 11:40:15AM +0200, Alvaro Karsz wrote: > > > Maybe we can use struct virtio_net_ctrl_coal inside struct > > > virtio_net_ctrl_coal_vq instead of repeating max_usecs and > > > max_packets? > > > I'm not sure if it would be confusing, what do you think? > > > > > > > Hi Alvaro. > > > > I guess you mean one of the following two forms: > > > > #1 > > struct virtio_net_ctrl_coal { > > le32 max_packets; > > le32 max_usecs; > > }; > > > > struct virtio_net_ctrl_coal_vq { > > le16 vqn; > > le16 reserved; > > struct virtio_net_ctrl_coal coal; > > } coal_vq; > > > > #2 > > struct virtio_net_ctrl_coal { > > le32 max_packets; > > le32 max_usecs; > > le16 vqn; // if _F_VQ_NOTF_COAL is negotiated > > le16 reserved; // if _F_VQ_NOTF_COAL is negotiated > > }; > > > > If it's #1, I think the format is a bit ugly, it's not semantic to use > > coal_vq to send global commands when _F_VQ_NOTF_COAL is not negotiated, and > > the presence of vqn and reserved is awkward. > > If it's #2, I think this is a bit like the v1 version, using > > virtio_net_ctrl_coal as a virtual queue to send commands does not seem to > > be semantic, but it is indeed more unified in function. > > > > I think we should hear from Michael and Parav. > > > > I meant #1. > We can see virtio_net_ctrl_coal as a struct holding coalescing > parameters, regardless of the commands. > Yes, let's wait for more comments on that. Reusing virtio_net_ctrl_coal is a nice thought. Makes it a bit clearer these have exactly the same role. Whether to put vqn first or last does not matter imho. > > > > +Virtqueue coalescing parameters: > > > > +\begin{itemize} > > > > +\item \field{vqn}: The virtqueue number of the enabled transmit or > > > > receive virtqueue, excluding the control virtqueue. > > > > +\item \field{max_packets}: The maximum number of packets sent/received > > > > by the specified virtqueue before a TX/RX notification. > > > > +\item \field{max_usecs}: The maximum number of TX/RX usecs that the > > > > specified virtqueue delays a TX/RX notification. > > > > +\end{itemize} > > > > + > > > > +\field{reserved} is reserved and it is ignored by the device. > > > > + > > > > > > max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with > > > VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. > > > ("Maximum number of packets to receive/send before a RX/TX notification"). > > > The fact that this is applied to all VQs or to a specific one is > > > derived from the command. > > > Same for max_usecs. > > > Maybe we can join the coalescing parameters somehow instead of > > > repeating the explanations? > > > > > Any thoughts on this part? I think I agree. Generally I think we should first of all describe the new VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET, moving all explanation text to that. Then just explain that VIRTIO_NET_CTRL_NOTF_COAL_TX_SET and VIRTIO_NET_CTRL_NOTF_COAL_RX_SET have the same effect as VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET repeated for all currently enabled tx/rx vqs. Plus maybe a single annotated example where there's a mix of VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET, VIRTIO_NET_CTRL_NOTF_COAL_RX_SET and VIRTIO_NET_CTRL_NOTF_COAL_TX_SET commands. For example with 2 vq pairs: 1. VIRTIO_NET_CTRL_NOTF_COAL_RX_SET sets for vq 0 and 2, vq 1 and 3 retain reset value 2. VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET sets vq 0, vq 2 retains value from 1 3. VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET sets vq 1, vq 3 retains reset value 4. VIRTIO_NET_CTRL_NOTF_COAL_TX_SET overrides command 3 no need for many examples. -- MST - To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
Re: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
On Fri, Feb 17, 2023 at 11:40:15AM +0200, Alvaro Karsz wrote: > > > Maybe we can use struct virtio_net_ctrl_coal inside struct > > > virtio_net_ctrl_coal_vq instead of repeating max_usecs and > > > max_packets? > > > I'm not sure if it would be confusing, what do you think? > > > > > > > Hi Alvaro. > > > > I guess you mean one of the following two forms: > > > > #1 > > struct virtio_net_ctrl_coal { > > le32 max_packets; > > le32 max_usecs; > > }; > > > > struct virtio_net_ctrl_coal_vq { > > le16 vqn; > > le16 reserved; > > struct virtio_net_ctrl_coal coal; > > } coal_vq; > > > > #2 > > struct virtio_net_ctrl_coal { > > le32 max_packets; > > le32 max_usecs; > > le16 vqn; // if _F_VQ_NOTF_COAL is negotiated > > le16 reserved; // if _F_VQ_NOTF_COAL is negotiated > > }; > > > > If it's #1, I think the format is a bit ugly, it's not semantic to use > > coal_vq to send global commands when _F_VQ_NOTF_COAL is not negotiated, and > > the presence of vqn and reserved is awkward. > > If it's #2, I think this is a bit like the v1 version, using > > virtio_net_ctrl_coal as a virtual queue to send commands does not seem to > > be semantic, but it is indeed more unified in function. > > > > I think we should hear from Michael and Parav. > > > > I meant #1. > We can see virtio_net_ctrl_coal as a struct holding coalescing > parameters, regardless of the commands. > Yes, let's wait for more comments on that. > > > > > +Virtqueue coalescing parameters: > > > > +\begin{itemize} > > > > +\item \field{vqn}: The virtqueue number of the enabled transmit or > > > > receive virtqueue, excluding the control virtqueue. > > > > +\item \field{max_packets}: The maximum number of packets sent/received > > > > by the specified virtqueue before a TX/RX notification. > > > > +\item \field{max_usecs}: The maximum number of TX/RX usecs that the > > > > specified virtqueue delays a TX/RX notification. > > > > +\end{itemize} > > > > + > > > > +\field{reserved} is reserved and it is ignored by the device. > > > > + > > > > > > max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with > > > VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. > > > ("Maximum number of packets to receive/send before a RX/TX notification"). > > > The fact that this is applied to all VQs or to a specific one is > > > derived from the command. > > > Same for max_usecs. > > > Maybe we can join the coalescing parameters somehow instead of > > > repeating the explanations? > > > > > Any thoughts on this part? Good idea, and if so, is there a good way to expose vqn to the interpretation of max_packets ? #1 \item \field{vqn}: The virtqueue number of the enabled transmit or receive virtqueue. \item \field{max_packets}: The maximum number of packets sent/received by the specified virtqueue before a TX/RX notification. #2 \item \field{max_packets}: Maximum number of packets to receive/send before a RX/TX notification. Thanks. - To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
Re: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
> > Maybe we can use struct virtio_net_ctrl_coal inside struct > > virtio_net_ctrl_coal_vq instead of repeating max_usecs and > > max_packets? > > I'm not sure if it would be confusing, what do you think? > > > > Hi Alvaro. > > I guess you mean one of the following two forms: > > #1 > struct virtio_net_ctrl_coal { > le32 max_packets; > le32 max_usecs; > }; > > struct virtio_net_ctrl_coal_vq { > le16 vqn; > le16 reserved; > struct virtio_net_ctrl_coal coal; > } coal_vq; > > #2 > struct virtio_net_ctrl_coal { > le32 max_packets; > le32 max_usecs; > le16 vqn; // if _F_VQ_NOTF_COAL is negotiated > le16 reserved; // if _F_VQ_NOTF_COAL is negotiated > }; > > If it's #1, I think the format is a bit ugly, it's not semantic to use > coal_vq to send global commands when _F_VQ_NOTF_COAL is not negotiated, and > the presence of vqn and reserved is awkward. > If it's #2, I think this is a bit like the v1 version, using > virtio_net_ctrl_coal as a virtual queue to send commands does not seem to be > semantic, but it is indeed more unified in function. > > I think we should hear from Michael and Parav. > I meant #1. We can see virtio_net_ctrl_coal as a struct holding coalescing parameters, regardless of the commands. Yes, let's wait for more comments on that. > > > +Virtqueue coalescing parameters: > > > +\begin{itemize} > > > +\item \field{vqn}: The virtqueue number of the enabled transmit or > > > receive virtqueue, excluding the control virtqueue. > > > +\item \field{max_packets}: The maximum number of packets sent/received > > > by the specified virtqueue before a TX/RX notification. > > > +\item \field{max_usecs}: The maximum number of TX/RX usecs that the > > > specified virtqueue delays a TX/RX notification. > > > +\end{itemize} > > > + > > > +\field{reserved} is reserved and it is ignored by the device. > > > + > > > > max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with > > VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. > > ("Maximum number of packets to receive/send before a RX/TX notification"). > > The fact that this is applied to all VQs or to a specific one is > > derived from the command. > > Same for max_usecs. > > Maybe we can join the coalescing parameters somehow instead of > > repeating the explanations? > > Any thoughts on this part? - To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
Re: [virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
On Fri, Feb 17, 2023 at 10:42:21AM +0200, Alvaro Karsz wrote: > Hi Heng, > > > +\item[VIRTIO_NET_F_VQ_NOTF_COAL(52)] Device supports the virtqueue > > +notifications coalescing. > > + > > \item[VIRTIO_NET_F_NOTF_COAL(53)] Device supports notifications coalescing. > > > > \item[VIRTIO_NET_F_GUEST_USO4 (54)] Driver can receive USOv4 packets. > > @@ -3140,6 +3143,7 @@ \subsubsection{Feature bit > > requirements}\label{sec:Device Types / Network Device > > \item[VIRTIO_NET_F_NOTF_COAL] Requires VIRTIO_NET_F_CTRL_VQ. > > \item[VIRTIO_NET_F_RSC_EXT] Requires VIRTIO_NET_F_HOST_TSO4 or > > VIRTIO_NET_F_HOST_TSO6. > > \item[VIRTIO_NET_F_RSS] Requires VIRTIO_NET_F_CTRL_VQ. > > +\item[VIRTIO_NET_F_VQ_NOTF_COAL] Requires VIRTIO_NET_F_CTRL_VQ. > > \end{description} > > > > \subsubsection{Legacy Interface: Feature bits}\label{sec:Device Types / > > Network Device / Feature bits / Legacy Interface: Feature bits} > > @@ -4501,8 +4505,11 @@ \subsubsection{Control Virtqueue}\label{sec:Device > > Types / Network Device / Devi > > }; > > > > #define VIRTIO_NET_CTRL_NOTF_COAL 6 > > - #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0 > > + #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0 > > #define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET 1 > > + #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET 2 > > + #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET 3 > > + > > \end{lstlisting} > > > > Coalescing parameters: > > @@ -4514,12 +4521,67 @@ \subsubsection{Control Virtqueue}\label{sec:Device > > Types / Network Device / Devi > > \end{itemize} > > > > > > -The class VIRTIO_NET_CTRL_NOTF_COAL has 2 commands: > > +The class VIRTIO_NET_CTRL_NOTF_COAL has 4 commands: > > \begin{enumerate} > > \item VIRTIO_NET_CTRL_NOTF_COAL_TX_SET: set the \field{tx_usecs} and > > \field{tx_max_packets} parameters. > > \item VIRTIO_NET_CTRL_NOTF_COAL_RX_SET: set the \field{rx_usecs} and > > \field{rx_max_packets} parameters. > > +\item VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET: set the \field{max_packets} and > > \field{max_usecs} parameters for a enabled > > +transmit/receive virtqueue whose > > number is \field{vqn}. > > +\item VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET: the device gets the > > \field{max_packets} and \field{max_usecs} parameters of > > +a enabled transmit/receive > > virtqueue whose number is \field{vqn}, and then > > +responds them to the driver. > > \end{enumerate} > > > > +If the VIRTIO_NET_F_VQ_NOTF_COAL feature is negotiated: > > +1. a driver can send a VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET command to set the > > coalescing > > + parameters of a enabled transmit/receive virtqueue. > > +2. a driver can send a VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET command to a > > device, and the device > > + responds to the driver with the coalescing parameters of a enabled > > transmit/receive virtqueue. > > + > > +\begin{lstlisting} > > +struct virtio_net_ctrl_coal_vq { > > +le16 vqn; > > +le16 reserved; > > +le32 max_packets; > > +le32 max_usecs; > > +}; > > +\end{lstlisting} > > + > > Maybe we can use struct virtio_net_ctrl_coal inside struct > virtio_net_ctrl_coal_vq instead of repeating max_usecs and > max_packets? > I'm not sure if it would be confusing, what do you think? > Hi Alvaro. I guess you mean one of the following two forms: #1 struct virtio_net_ctrl_coal { le32 max_packets; le32 max_usecs; }; struct virtio_net_ctrl_coal_vq { le16 vqn; le16 reserved; struct virtio_net_ctrl_coal coal; } coal_vq; #2 struct virtio_net_ctrl_coal { le32 max_packets; le32 max_usecs; le16 vqn; // if _F_VQ_NOTF_COAL is negotiated le16 reserved; // if _F_VQ_NOTF_COAL is negotiated }; If it's #1, I think the format is a bit ugly, it's not semantic to use coal_vq to send global commands when _F_VQ_NOTF_COAL is not negotiated, and the presence of vqn and reserved is awkward. If it's #2, I think this is a bit like the v1 version, using virtio_net_ctrl_coal as a virtual queue to send commands does not seem to be semantic, but it is indeed more unified in function. I think we should hear from Michael and Parav. > > +Virtqueue coalescing parameters: > > +\begin{itemize} > > +\item \field{vqn}: The virtqueue number of the enabled transmit or receive > > virtqueue, excluding the control virtqueue. > > +\item \field{max_packets}: The maximum number of packets sent/received by > > the specified virtqueue before a TX/RX notification. > > +\item \field{max_usecs}: The maximum number of TX/RX usecs that the > > specified virtqueue delays a TX/RX notification. > > +\end{itemize} > > + > > +\field{reserved} is reserved and it is ignored by the device. > > + > > max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with > VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. > ("Maximum number of packets to receive/send before a RX/TX notification"). > The fact that this is applied to all VQs or to a specific one
[virtio-dev] Re: [virtio-comment] [PATCH v3] virtio-net: support the virtqueue coalescing moderation
Hi Heng, > +\item[VIRTIO_NET_F_VQ_NOTF_COAL(52)] Device supports the virtqueue > +notifications coalescing. > + > \item[VIRTIO_NET_F_NOTF_COAL(53)] Device supports notifications coalescing. > > \item[VIRTIO_NET_F_GUEST_USO4 (54)] Driver can receive USOv4 packets. > @@ -3140,6 +3143,7 @@ \subsubsection{Feature bit > requirements}\label{sec:Device Types / Network Device > \item[VIRTIO_NET_F_NOTF_COAL] Requires VIRTIO_NET_F_CTRL_VQ. > \item[VIRTIO_NET_F_RSC_EXT] Requires VIRTIO_NET_F_HOST_TSO4 or > VIRTIO_NET_F_HOST_TSO6. > \item[VIRTIO_NET_F_RSS] Requires VIRTIO_NET_F_CTRL_VQ. > +\item[VIRTIO_NET_F_VQ_NOTF_COAL] Requires VIRTIO_NET_F_CTRL_VQ. > \end{description} > > \subsubsection{Legacy Interface: Feature bits}\label{sec:Device Types / > Network Device / Feature bits / Legacy Interface: Feature bits} > @@ -4501,8 +4505,11 @@ \subsubsection{Control Virtqueue}\label{sec:Device > Types / Network Device / Devi > }; > > #define VIRTIO_NET_CTRL_NOTF_COAL 6 > - #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0 > + #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0 > #define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET 1 > + #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET 2 > + #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET 3 > + > \end{lstlisting} > > Coalescing parameters: > @@ -4514,12 +4521,67 @@ \subsubsection{Control Virtqueue}\label{sec:Device > Types / Network Device / Devi > \end{itemize} > > > -The class VIRTIO_NET_CTRL_NOTF_COAL has 2 commands: > +The class VIRTIO_NET_CTRL_NOTF_COAL has 4 commands: > \begin{enumerate} > \item VIRTIO_NET_CTRL_NOTF_COAL_TX_SET: set the \field{tx_usecs} and > \field{tx_max_packets} parameters. > \item VIRTIO_NET_CTRL_NOTF_COAL_RX_SET: set the \field{rx_usecs} and > \field{rx_max_packets} parameters. > +\item VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET: set the \field{max_packets} and > \field{max_usecs} parameters for a enabled > +transmit/receive virtqueue whose > number is \field{vqn}. > +\item VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET: the device gets the > \field{max_packets} and \field{max_usecs} parameters of > +a enabled transmit/receive virtqueue > whose number is \field{vqn}, and then > +responds them to the driver. > \end{enumerate} > > +If the VIRTIO_NET_F_VQ_NOTF_COAL feature is negotiated: > +1. a driver can send a VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET command to set the > coalescing > + parameters of a enabled transmit/receive virtqueue. > +2. a driver can send a VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET command to a device, > and the device > + responds to the driver with the coalescing parameters of a enabled > transmit/receive virtqueue. > + > +\begin{lstlisting} > +struct virtio_net_ctrl_coal_vq { > +le16 vqn; > +le16 reserved; > +le32 max_packets; > +le32 max_usecs; > +}; > +\end{lstlisting} > + Maybe we can use struct virtio_net_ctrl_coal inside struct virtio_net_ctrl_coal_vq instead of repeating max_usecs and max_packets? I'm not sure if it would be confusing, what do you think? > +Virtqueue coalescing parameters: > +\begin{itemize} > +\item \field{vqn}: The virtqueue number of the enabled transmit or receive > virtqueue, excluding the control virtqueue. > +\item \field{max_packets}: The maximum number of packets sent/received by > the specified virtqueue before a TX/RX notification. > +\item \field{max_usecs}: The maximum number of TX/RX usecs that the > specified virtqueue delays a TX/RX notification. > +\end{itemize} > + > +\field{reserved} is reserved and it is ignored by the device. > + max_packets is the same with VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET and with VIRTIO_NET_CTRL_NOTF_COAL_[T/R]X_SET. ("Maximum number of packets to receive/send before a RX/TX notification"). The fact that this is applied to all VQs or to a specific one is derived from the command. Same for max_usecs. Maybe we can join the coalescing parameters somehow instead of repeating the explanations? > +THe value of \field{vqn} satisfies $ 0 \leq vqn < max_virtqueue_pairs \ast 2 > $. > +The conversion between \field{vqn} and transmitq/receiveq index: > +\begin{itemize} > +$ \lfloor vqn / 2 \rfloor $ is the index of the corresponding receiveq. > +$ \lfloor (vqn / 2) + 1 \rfloor $ is the index of the corresponding tranmitq. > +\end{itemize} > + > +The VIRTIO_NET_CTRL_NOTF_COAL_RX_SET command is the same as the > VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET > +command repeated for each virtqueue of receiveq1\ldots receiveqN. > + > +The VIRTIO_NET_CTRL_NOTF_COAL_TX_SET command is the same as the > VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET > +command repeated for each virtqueue of transmitq1\ldots transmitqN. > + > +If coalescing parameters are being set, the device applies the last > coalescing parameters received for a > +virtqueue, regardless of the command used to deliver the parameters. For > example: > +# Command sequence 1: > +1. VIRTIO_NET_CTRL_NOTF_COAL_RX_SET command with $