OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-dev message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [virtio-dev] [PATCH v2] virtio-net: add mtu configuration field



On 25 Jan 2016, at 17:03, Aaron Conole <aconole@redhat.com> wrote:

"Michael S. Tsirkin" <mst@redhat.com> writes:
On Mon, Jan 25, 2016 at 10:32:29AM +0200, Yan Vugenfirer wrote:

   On 24 Jan 2016, at 11:27, Michael S. Tsirkin <mst@redhat.com> wrote:

   On Sun, Jan 24, 2016 at 10:42:24AM +0200, Yan Vugenfirer wrote:


          On 21 Jan 2016, at 07:27, Michael S. Tsirkin <mst@redhat.com> wrote:

          On Wed, Jan 20, 2016 at 12:42:45PM -0500, Aaron Conole wrote:

              "Michael S. Tsirkin" <mst@redhat.com> writes:

                  On Fri, Jan 15, 2016 at 04:28:30PM -0500, Aaron Conole
       wrote:

                      Sometimes it is essential for libvirt to be able to
       configure
                      MTU
                      on guest's NICs to a value different from 1500.

                      The change adds a new field to configuration area of
       network
                      devices. It will be used to pass initial MTU from the
       device to
                      the driver, and to pass modified MTU from driver to the
       device
                      or from device to driver for both host-guest and
       guest-host
                      interaction.

                      In addition, in order to support backward and forward
                      compatibility, we introduce a new feature bit called
                      VIRTIO_NET_F_DEFAULT_MTU.

                      Signed-off-by: Aaron Conole <aconole@redhat.com>
                      Cc: Victor Kaplansky <victork@redhat.com>


                  Since apparently windows guests can't support
                  such mtu negotiation in the driver, we'd have
                  to implement this in a guest agent for these
                  guests.


              I think that was due to a previous patch which did not include a
              mechanism for reporting the guest->host changes. This includes
       such a
              feedback mechanism. However, I may have misunderstood Yan's
       previous
              email.



       What I meant to say is that in Windows we cannot dynamically change MTU
       from
       the device driver. We can set MTU on driver initialisation. Also 



          This part?
          We don’t have the way to support host report of MTU change to the
       guest
          on Windows.

          Actually I have a question about this, too.

          MTU changes can't be reported to guest, ok.

          But let's assume MTU is static.
          Can this MTU be discovered during install?


       If it is static, it can be discovered during driver load with some
       restrictions.


   Are the restrictions on value or on how it's accessed then?


By restriction I meant that the driver is not fully initialised yet. So we will
have to use control queue in poll mode. 
Initial value restrictions are in the registry, but I think we can ignore them
in this case.

Or use the min value between the two.

Just to make sure I understand correctly, with this information:

1) Attempting to provide a mechanism for reprogramming the MTU using
  the driver/device is a no-go for some operating systems'
  incompatibility

2) We could provide a maximum initial value, and the guest is free, on
  initialization to pick a smaller initial value

If this is good enough, I can rework the patches ONLY to state these
things, and we can leave reprogramming the MTU as a work for guest
agent, or some future mechanism. 

Did I understand this? Does the approach seem correct?

OK from my side for this kind of approach. 








          I see this:

          NetKVM/wlh/ParaNdis6-Driver.c:
          miniportAttributes.GeneralAttributes.MtuSize =
          pContext->MaxPacketSize.nMaxDataSize;



       This is an initialisation of the miniport driver. We could access
       virtio device
       at this point (most probably without interrupts) and get MTU.
       Currently we get the value from registry - pContext->
       MaxPacketSize.nMaxDataSize
       = pConfiguration->MTU.ulValue;



          Yan?



              Please advise, Yan.


                  It thus seems advantageous to always have it in
                  a guest agent, so that libvirt can change it
                  for all guests in the same way, consistently.

                  Do you agree to the above? If yes, why do we need
                  a new device field?


              I am not very familiar with qemu-ga. If Yan says the new
       proposal
              will not work, then I will investigate that more thoroughly.


                      ---
                      v1:
                      This is an attempt at continuing the work done by Victor
                      Kaplansky on
                      mtu negiotiation for virtio-net devices. It attempts to
       pick up
                      from
                      https://lists.oasis-open.org/archives/virtio-dev/201508/
                      msg00007.html
                      and is just a minor blurb from the first patch along
       with the
                      2nd patch
                      from the series, and some of the feedback integrated.

                      v2:
                      Rephrase and provide a mechanism for guest->host and
       host->
                      guest
                      communication through a driver read-only and driver
       write-only
                      field.

                      content.tex | 31 +++++++++++++++++++++++++++++++
                      1 file changed, 31 insertions(+)

                      diff --git a/content.tex b/content.tex
                      index d989d98..b855691 100644
                      --- a/content.tex
                      +++ b/content.tex
                      @@ -3078,6 +3078,11 @@ features.

                      \item[VIRTIO_NET_F_CTRL_MAC_ADDR(23)] Set MAC address
       through
                      control
                          channel.
                      +
                      +\item[VIRTIO_NET_F_MTU(24)] Negotiated MTU is
       supported. If
                      +    offered by the device, device advises driver about
       initial
                      +    MTU to be used. If negotiated, the driver uses \
       field{mtu}
                      as
                      +    an initial value.
                      \end{description}

                      \subsubsection{Feature bit requirements}\label
       {sec:Device Types
                      / Network Device / Feature bits / Feature bit
       requirements}
                      @@ -3132,11 +3137,21 @@ of each of transmit and receive
                      virtqueues (receiveq1\ldots receiveqN
                      and transmitq1\ldots transmitqN respectively) that can
       be
                      configured once VIRTIO_NET_F_MQ
                      is negotiated.

                      +The following driver-read-only field, \field{mtu} only
       exists
                      if
                      +VIRTIO_NET_F_MTU is set. This field specifies the MTU
       that the
                      device expects
                      +the driver to honor.
                      +
                      +The following driver-write-only field, \field
       {mtu_requested}
                      only exists if
                      +VIRTIO_NET_F_MTU is set. This field will be written by
       the
                      driver when it wants
                      +to request an MTU change from the device.
                      +
                      \begin{lstlisting}
                      struct virtio_net_config {
                              u8 mac[6];
                              le16 status;
                              le16 max_virtqueue_pairs;
                      +        le16 mtu;
                      +        le16 mtu_requested;
                      };
                      \end{lstlisting}

                      @@ -3145,6 +3160,18 @@ struct virtio_net_config {
                      The device MUST set \field{max_virtqueue_pairs} to
       between 1
                      and 0x8000 inclusive,
                      if it offers VIRTIO_NET_F_MQ.

                      +\devicenormative{\subsubsection}{Device configuration
       layout}
                      {Device Types / Network Device / Device configuration
       layout}
                      +
                      +The device MUST set \field{mtu} to between 68 and 65535
                      inclusive,
                      +if it offers VIRTIO_NET_F_MTU.
                      +
                      +Any time the device modifies \field{mtu}, it MUST send
       a
                      configuration change
                      +notification.
                      +
                      +The driver MAY set \field{mtu_requested} to between 68
       and
                      65535 inclusive,
                      +if the device offers VIRTIO_NET_F_MTU. Any time the
       driver
                      modifies
                      +\field{mtu_requested}, it MUST also send a
       configuration
                      change notification.
                      +
                      \drivernormative{\subsubsection}{Device configuration
       layout}
                      {Device Types / Network Device / Device configuration
       layout}

                      A driver SHOULD negotiate VIRTIO_NET_F_MAC if the device
       offers
                      it.
                      @@ -3157,6 +3184,10 @@ If the driver does not negotiate
       the
                      VIRTIO_NET_F_STATUS feature, it SHOULD
                      assume the link is active, otherwise it SHOULD read the
       link
                      status from
                      the bottom bit of \field{status}.

                      +A driver SHOULD negotiate VIRTIO_NET_F_MTU if the
       device
                      offers it.  If the
                      +driver negotiates the VIRTIO_NET_F_MTU feature, the
       driver
                      MUST use \field{mtu}
                      +as the value for MTU.
                      +
                      \subsubsection{Legacy Interface: Device configuration
       layout}\
                      label{sec:Device Types / Network Device / Device
       configuration
                      layout / Legacy Interface: Device configuration layout}
                      \label{sec:Device Types / Block Device / Feature bits /
       Device
                      configuration layout / Legacy Interface: Device
       configuration
                      layout}
                      When using the legacy interface, transitional devices
       and
                      drivers
                      -- 
                      2.5.0


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




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



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

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



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]