On Wed, 21 Dec 2022 12:17:29 +0200, Alvaro Karsz <alvaro.ka...@solid-run.com> 
wrote:
> This patch adds a new feature VIRTIO_NET_F_NOTF_COAL_LOW_HIGH,
> and adds 2 new commands to VIRTIO_NET_CTRL_NOTF_COAL class:
>       * VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET - create a low-rate set of
>         coalescing parameters. the device should switch to this set when
>         the packet rate (packets per second) reaches the pkt_rate_low 
> threshold.
>
>       * VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET - create a high-rate set of
>           coalescing parameters. the device should switch to this set when
>           the packet rate (packets per second) reaches the pkt_rate_high 
> threshold.
>
> A device may have up to 3 sets, and should switch between them based on
> the packet rate.


I want to know which one is better than NetDim(Coalesce Adaptive) in driver.

I know Heng Qi's work in this.

Thanks


>
> Signed-off-by: Alvaro Karsz <alvaro.ka...@solid-run.com>
> ---
>  content.tex | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 60 insertions(+), 1 deletion(-)
>
> diff --git a/content.tex b/content.tex
> index 96f4723..969f945 100644
> --- a/content.tex
> +++ b/content.tex
> @@ -3088,6 +3088,8 @@ \subsection{Feature bits}\label{sec:Device Types / 
> Network Device / Feature bits
>  \item[VIRTIO_NET_F_CTRL_MAC_ADDR(23)] Set MAC address through control
>      channel.
>
> +\item[VIRTIO_NET_F_NOTF_COAL_LOW_HIGH(50)] Device supports notifications 
> coalescing low rate and high rate sets.
> +
>  \item[VIRTIO_NET_F_NOTF_COAL(53)] Device supports notifications coalescing.
>
>  \item[VIRTIO_NET_F_GUEST_USO4 (54)] Driver can receive USOv4 packets.
> @@ -3142,6 +3144,7 @@ \subsubsection{Feature bit 
> requirements}\label{sec:Device Types / Network Device
>  \item[VIRTIO_NET_F_MQ] Requires VIRTIO_NET_F_CTRL_VQ.
>  \item[VIRTIO_NET_F_CTRL_MAC_ADDR] Requires VIRTIO_NET_F_CTRL_VQ.
>  \item[VIRTIO_NET_F_NOTF_COAL] Requires VIRTIO_NET_F_CTRL_VQ.
> +\item[VIRTIO_NET_F_NOTF_COAL_LOW_HIGH] Requires VIRTIO_NET_F_NOTF_COAL.
>  \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.
>  \end{description}
> @@ -4504,9 +4507,25 @@ \subsubsection{Control Virtqueue}\label{sec:Device 
> Types / Network Device / Devi
>      le32 tx_usecs;
>  };
>
> +//Only if VIRTIO_NET_F_NOTF_COAL_LOW_HIGH negotiated
> +struct virtio_net_ctrl_coal_low {
> +        le32 pkt_rate_low;
> +        struct virtio_net_ctrl_coal_tx tx;
> +        struct virtio_net_ctrl_coal_rx rx;
> +};
> +
> +//Only if VIRTIO_NET_F_NOTF_COAL_LOW_HIGH negotiated
> +struct virtio_net_ctrl_coal_high {
> +        le32 pkt_rate_high;
> +        struct virtio_net_ctrl_coal_tx tx;
> +        struct virtio_net_ctrl_coal_rx rx;
> +};
> +
>  #define VIRTIO_NET_CTRL_NOTF_COAL 6
>   #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET  0
>   #define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET 1
> + #define VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET 2 //Only if 
> VIRTIO_NET_F_NOTF_COAL_LOW_HIGH negotiated
> + #define VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET 3 //Only if 
> VIRTIO_NET_F_NOTF_COAL_LOW_HIGH negotiated
>  \end{lstlisting}
>
>  Coalescing parameters:
> @@ -4515,13 +4534,17 @@ \subsubsection{Control Virtqueue}\label{sec:Device 
> Types / Network Device / Devi
>  \item \field{tx_usecs}: Maximum number of usecs to delay a TX notification.
>  \item \field{rx_max_packets}: Maximum number of packets to receive before a 
> RX notification.
>  \item \field{tx_max_packets}: Maximum number of packets to send before a TX 
> notification.
> +\item \field{pkt_rate_low}: Threshold for low packet rate set (packets per 
> second).
> +\item \field{pkt_rate_high}: Threshold for high packet rate set (packets per 
> second).
>  \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_LOW_SET: set the \field{rx_usecs}, 
> \field{rx_max_packets}, \field{tx_usecs} and \field{tx_max_packets} set for a 
> rate of \field{pkt_rate_low} or less packets per second.
> +\item VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET: set the \field{rx_usecs}, 
> \field{rx_max_packets}, \field{tx_usecs} and \field{tx_max_packets} set for a 
> rate of \field{pkt_rate_high} or more packets per second.
>  \end{enumerate}
>
>  \subparagraph{RX Notifications}\label{sec:Device Types / Network Device / 
> Device Operation / Control Virtqueue / Notifications Coalescing / RX 
> Notifications}
> @@ -4554,18 +4577,54 @@ \subsubsection{Control Virtqueue}\label{sec:Device 
> Types / Network Device / Devi
>  \item If the notifications are not suppressed by the driver, the device will 
> send an used buffer notification, otherwise, the device will not send an used 
> buffer notification as long as the notifications are suppressed.
>  \end{itemize}
>
> +\subparagraph{Low/High Rate Notifications Sets}\label{sec:Device Types / 
> Network Device / Device Operation / Control Virtqueue / Notifications 
> Coalescing / Low/High Rate Notifications Sets}
> +
> +If the VIRTIO_NET_F_NOTF_COAL_LOW_HIGH feature is negotiated, the driver may 
> send VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET/VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET 
> commands to the device.
> +
> +The virtio_net_ctrl_coal_low struct defines a set of coalescing parameters 
> (\field{rx_usecs}, \field{tx_usecs}, \field{rx_max_packets} and 
> \field{tx_max_packets}) that should be used when the packets rate is equal or 
> lower than \field{pkt_rate_low} packets per second.
> +
> +The virtio_net_ctrl_coal_high struct defines a set of coalescing parameters 
> (\field{rx_usecs}, \field{tx_usecs}, \field{rx_max_packets} and 
> \field{tx_max_packets}) that should be used when the packets rate is equal or 
> higher than \field{pkt_rate_high} packets per second.
> +
> +A device may have up to 3 sets of coalescing parameters, and should switch 
> between the sets based on the packet rate.
> +
> +A device may have only a low rate set, in this case, it should coalesce 
> notifications only when the packet rate crosses down the \field{pkt_rate_low} 
> threshold.
> +
> +A device may have only a high rate set, in this case, it should coalesce 
> notifications only when the packet rate crosses up the \field{pkt_rate_high} 
> threshold.
> +
> +A device may have only a high rate set and a low rate set, in this case, it 
> should coalesce notifications only when the packet rate crosses up the 
> \field{pkt_rate_high} threshold, or crosses down the \field{pkt_rate_low} 
> threshold.
> +
>  \drivernormative{\subparagraph}{Notifications Coalescing}{Device Types / 
> Network Device / Device Operation / Control Virtqueue / Notifications 
> Coalescing}
>
>  If the VIRTIO_NET_F_NOTF_COAL feature has not been negotiated, the driver 
> MUST NOT issue VIRTIO_NET_CTRL_NOTF_COAL commands.
>
> +If the VIRTIO_NET_F_NOTF_COAL_LOW_HIGH feature has not been negotiated, the 
> driver MUST NOT issue 
> VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET/VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET commands.
> +
> +The driver SHOULD issue a VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET command with 
> \field{pkt_rate_low} 0 in order to remove the low rate set.
> +
> +The driver SHOULD issue a VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET command with 
> \field{pkt_rate_high} 0 in order to remove the high rate set.
> +
> +The driver MUST NOT issue a VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET command with 
> \field{pkt_rate_low} equal or higher than \field{pkt_rate_high}, if 
> VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET was issued.
> +
> +The driver MUST NOT issue a VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET command with 
> \field{pkt_rate_high} equal or lower than \field{pkt_rate_low}, if 
> VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET was issued.
> +
>  \devicenormative{\subparagraph}{Notifications Coalescing}{Device Types / 
> Network Device / Device Operation / Control Virtqueue / Notifications 
> Coalescing}
>
>  A device SHOULD respond to the VIRTIO_NET_CTRL_NOTF_COAL commands with 
> VIRTIO_NET_ERR if it was not able to change the parameters.
>
>  A device SHOULD NOT send used buffer notifications to the driver, if the 
> notifications are suppressed as explained in \ref{sec:Basic Facilities of a 
> Virtio Device / Virtqueues / Used Buffer Notification Suppression}, even if 
> the coalescing counters expired.
>
> +The device MUST remove the low rate set if a 
> VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET command with \field{pkt_rate_low} 0 is 
> received.
> +
> +The device MUST remove the high rate set if a 
> VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET command with \field{pkt_rate_high} 0 is 
> received.
> +
> +The device MUST respond with VIRTIO_NET_ERR to a 
> VIRTIO_NET_CTRL_NOTF_COAL_LOW_SET command with \field{pkt_rate_low} equal or 
> higher than \field{pkt_rate_high}, if a high rate set is being used.
> +
> +The device MUST respond with VIRTIO_NET_ERR to a 
> VIRTIO_NET_CTRL_NOTF_COAL_HIGH_SET command with \field{pkt_rate_high} equal 
> or lower than \field{pkt_rate_low}, if a low rate set is being used.
> +
>  Upon reset, a device MUST initialize all coalescing parameters to 0.
>
> +Upon reset, a device MUST not have a low rate and high rate sets.
> +
>  \subsubsection{Legacy Interface: Framing Requirements}\label{sec:Device
>  Types / Network Device / Legacy Interface: Framing Requirements}
>
> --
> 2.32.0
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org
> For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscr...@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-h...@lists.oasis-open.org

Reply via email to