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


"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?

>> 
>> 
>> 
>> 
>> 
>> 
>>            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


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