• Toshiaki Makita's avatar
    virtio_net: Disable interrupts if napi_complete_done rescheduled napi · fdaa767a
    Toshiaki Makita authored
    Since commit 39e6c820 ("net: solve a NAPI race") napi has been able
    to be rescheduled within napi_complete_done() even in non-busypoll case,
    but virtnet_poll() always enabled interrupts before complete, and when
    napi was rescheduled within napi_complete_done() it did not disable
    interrupts.
    This caused more interrupts when event idx is disabled.
    
    According to commit cbdadbbf ("virtio_net: fix race in RX VQ
    processing") we cannot place virtqueue_enable_cb_prepare() after
    NAPI_STATE_SCHED is cleared, so disable interrupts again if
    napi_complete_done() returned false.
    
    Tested with vhost-user of OVS 2.7 on host, which does not have the event
    idx feature.
    
    * Before patch:
    
    $ netperf -t UDP_STREAM -H 192.168.150.253 -l 60 -- -m 1472
    MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.150.253 () port 0 AF_INET
    Socket  Message  Elapsed      Messages
    Size    Size     Time         Okay Errors   Throughput
    bytes   bytes    secs            #      #   10^6bits/sec
    
    212992    1472   60.00     32763206      0    6430.32
    212992           60.00     23384299           4589.56
    
    Interrupts on guest: 9872369
    Packets/interrupt:   2.37
    
    * After patch
    
    $ netperf -t UDP_STREAM -H 192.168.150.253 -l 60 -- -m 1472
    MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.150.253 () port 0 AF_INET
    Socket  Message  Elapsed      Messages
    Size    Size     Time         Okay Errors   Throughput
    bytes   bytes    secs            #      #   10^6bits/sec
    
    212992    1472   60.00     32794646      0    6436.49
    212992           60.00     32793501           6436.27
    
    Interrupts on guest: 4941299
    Packets/interrupt:   6.64
    Signed-off-by: default avatarToshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
    Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Acked-by: default avatarJason Wang <jasowang@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fdaa767a
virtio_net.c 73 KB