• D
    net: Introduce e1000e device emulation · 6f3fbe4e
    Dmitry Fleytman 提交于
    This patch introduces emulation for the Intel 82574 adapter, AKA e1000e.
    
    This implementation is derived from the e1000 emulation code, and
    utilizes the TX/RX packet abstractions that were initially developed for
    the vmxnet3 device. Although some parts of the introduced code may be
    shared with e1000, the differences are substantial enough so that the
    only shared resources for the two devices are the definitions in
    hw/net/e1000_regs.h.
    
    Similarly to vmxnet3, the new device uses virtio headers for task
    offloads (for backends that support virtio extensions). Usage of
    virtio headers may be forcibly disabled via a boolean device property
    "vnet" (which is enabled by default). In such case task offloads
    will be performed in software, in the same way it is done on
    backends that do not support virtio headers.
    
    The device code is split into two parts:
    
      1. hw/net/e1000e.c: QEMU-specific code for a network device;
      2. hw/net/e1000e_core.[hc]: Device emulation according to the spec.
    
    The new device name is e1000e.
    
    Intel specifications for the 82574 controller are available at:
    http://www.intel.com/content/dam/doc/datasheet/82574l-gbe-controller-datasheet.pdf
    
    Throughput measurement results (iperf2):
    
                    Fedora 22 guest, TCP, RX
        4 ++------------------------------------------+
          |                                           |
          |                           X   X   X   X   X
      3.5 ++          X   X   X   X                   |
          |       X                                   |
          |                                           |
        3 ++                                          |
    G     |   X                                       |
    b     |                                           |
    / 2.5 ++                                          |
    s     |                                           |
          |                                           |
        2 ++                                          |
          |                                           |
          |                                           |
      1.5 X+                                          |
          |                                           |
          +   +   +   +   +   +   +   +   +   +   +   +
        1 ++--+---+---+---+---+---+---+---+---+---+---+
         32  64  128 256 512  1   2   4   8  16  32  64
          B   B   B   B   B   KB  KB  KB  KB KB  KB  KB
                           Buffer size
    
                   Fedora 22 guest, TCP, TX
      18 ++-------------------------------------------+
         |                        X                   |
      16 ++                           X   X   X   X   X
         |                   X                        |
      14 ++                                           |
         |                                            |
      12 ++                                           |
    G    |               X                            |
    b 10 ++                                           |
    /    |                                            |
    s  8 ++                                           |
         |                                            |
       6 ++          X                                |
         |                                            |
       4 ++                                           |
         |       X                                    |
       2 ++  X                                        |
         X   +   +   +   +   +    +   +   +   +   +   +
       0 ++--+---+---+---+---+----+---+---+---+---+---+
        32  64  128 256 512  1    2   4   8  16  32  64
         B   B   B   B   B   KB   KB  KB  KB KB  KB  KB
                           Buffer size
    
                    Fedora 22 guest, UDP, RX
        3 ++------------------------------------------+
          |                                           X
          |                                           |
      2.5 ++                                          |
          |                                           |
          |                                           |
        2 ++                                 X        |
    G     |                                           |
    b     |                                           |
    / 1.5 ++                                          |
    s     |                         X                 |
          |                                           |
        1 ++                                          |
          |                                           |
          |                 X                         |
      0.5 ++                                          |
          |        X                                  |
          X        +        +       +        +        +
        0 ++-------+--------+-------+--------+--------+
         32       64       128     256      512       1
          B        B         B       B        B      KB
                           Datagram size
    
                    Fedora 22 guest, UDP, TX
        1 ++------------------------------------------+
          |                                           X
      0.9 ++                                          |
          |                                           |
      0.8 ++                                          |
      0.7 ++                                          |
          |                                           |
    G 0.6 ++                                          |
    b     |                                           |
    / 0.5 ++                                          |
    s     |                                  X        |
      0.4 ++                                          |
          |                                           |
      0.3 ++                                          |
      0.2 ++                        X                 |
          |                                           |
      0.1 ++                X                         |
          X        X        +       +        +        +
        0 ++-------+--------+-------+--------+--------+
         32       64       128     256      512       1
          B        B         B       B        B      KB
                           Datagram size
    
                  Windows 2012R2 guest, TCP, RX
      3.2 ++------------------------------------------+
          |                                   X       |
        3 ++                                          |
          |                                           |
      2.8 ++                                          |
          |                                           |
      2.6 ++                              X           |
    G     |   X                   X   X           X   X
    b 2.4 ++      X       X                           |
    /     |                                           |
    s 2.2 ++                                          |
          |                                           |
        2 ++                                          |
          |           X       X                       |
      1.8 ++                                          |
          |                                           |
      1.6 X+                                          |
          +   +   +   +   +   +   +   +   +   +   +   +
      1.4 ++--+---+---+---+---+---+---+---+---+---+---+
         32  64  128 256 512  1   2   4   8  16  32  64
          B   B   B   B   B   KB  KB  KB  KB KB  KB  KB
                           Buffer size
    
                 Windows 2012R2 guest, TCP, TX
      14 ++-------------------------------------------+
         |                                            |
         |                                        X   X
      12 ++                                           |
         |                                            |
      10 ++                                           |
         |                                            |
    G    |                                            |
    b  8 ++                                           |
    /    |                                    X       |
    s  6 ++                                           |
         |                                            |
         |                                            |
       4 ++                               X           |
         |                                            |
       2 ++                                           |
         |           X   X            X               |
         +   X   X   +   +   X    X   +   +   +   +   +
       0 X+--+---+---+---+---+----+---+---+---+---+---+
        32  64  128 256 512  1    2   4   8  16  32  64
         B   B   B   B   B   KB   KB  KB  KB KB  KB  KB
                           Buffer size
    
                  Windows 2012R2 guest, UDP, RX
      1.6 ++------------------------------------------X
          |                                           |
      1.4 ++                                          |
          |                                           |
      1.2 ++                                          |
          |                                  X        |
          |                                           |
    G   1 ++                                          |
    b     |                                           |
    / 0.8 ++                                          |
    s     |                                           |
      0.6 ++                        X                 |
          |                                           |
      0.4 ++                                          |
          |                 X                         |
          |                                           |
      0.2 ++       X                                  |
          X        +        +       +        +        +
        0 ++-------+--------+-------+--------+--------+
         32       64       128     256      512       1
          B        B         B       B        B      KB
                           Datagram size
    
                  Windows 2012R2 guest, UDP, TX
      0.6 ++------------------------------------------+
          |                                           X
          |                                           |
      0.5 ++                                          |
          |                                           |
          |                                           |
      0.4 ++                                          |
    G     |                                           |
    b     |                                           |
    / 0.3 ++                                 X        |
    s     |                                           |
          |                                           |
      0.2 ++                                          |
          |                                           |
          |                         X                 |
      0.1 ++                                          |
          |                 X                         |
          X        X        +       +        +        +
        0 ++-------+--------+-------+--------+--------+
         32       64       128     256      512       1
          B        B         B       B        B      KB
                           Datagram size
    Signed-off-by: NDmitry Fleytman <dmitry.fleytman@ravellosystems.com>
    Signed-off-by: NLeonid Bloch <leonid.bloch@ravellosystems.com>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NJason Wang <jasowang@redhat.com>
    6f3fbe4e
trace-events 144.8 KB