Bug 852665

Summary: Backport e1000 receive queue fixes from upstream
Product: Red Hat Enterprise Linux 6 Reporter: Amos Kong <akong>
Component: qemu-kvmAssignee: Amos Kong <akong>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 6.4CC: acathrow, ailan, areis, bsarathy, dyasny, flang, jasowang, juzhang, mkenneth, pbonzini, rhod, virt-maint
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: qemu-kvm-0.12.1.2-2.320.el6 Doc Type: Enhancement
Doc Text:
Cause: Virtio-net has code to flush the queue and notify the iothread whenever new receive buffers are added by the guest, it can help to improve the latency. Consequence: Need to do same thing for other driver. Fix: Signal to the IO thread to repoll the file descriptor, when the queue is emptied. Flush queue whenever can_receive can go from false to true. Result: Latency time is improved.
Story Points: ---
Clone Of: Environment:
Last Closed: 2013-02-21 07:39:13 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Comment 2 Amos Kong 2012-08-31 10:17:06 UTC
Hi Junyi,

You can verify this bug by checking the latency time (respond time) of ping command, regression should not exist here.

steps:
1. ping guest from host
# ping $guest_ip -i 0.01
2. check the latency time

Comment 8 langfang 2012-11-06 09:14:08 UTC
test this bug as follow version:
# uname -r
2.6.32-335.el6.x86_64
# rpm -q qemu-kvm
qemu-kvm-0.12.1.2-2.316.el6.x86_64

guest:rhel6.4

steps:
1.boot guest with e1000 NIC
2.on host ping guest
# ping 10.66.7.114 -i 0.01

results:
# ping 10.66.7.114 -i 0.01 
PING 10.66.7.114 (10.66.7.114) 56(84) bytes of data.
64 bytes from 10.66.7.114: icmp_seq=1 ttl=64 time=1.40 ms
64 bytes from 10.66.7.114: icmp_seq=2 ttl=64 time=0.205 ms
64 bytes from 10.66.7.114: icmp_seq=3 ttl=64 time=0.215 ms
64 bytes from 10.66.7.114: icmp_seq=4 ttl=64 time=0.213 ms
64 bytes from 10.66.7.114: icmp_seq=5 ttl=64 time=0.211 ms
64 bytes from 10.66.7.114: icmp_seq=6 ttl=64 time=0.214 ms
64 bytes from 10.66.7.114: icmp_seq=7 ttl=64 time=0.213 ms
64 bytes from 10.66.7.114: icmp_seq=8 ttl=64 time=0.214 ms
64 bytes from 10.66.7.114: icmp_seq=9 ttl=64 time=0.220 ms
64 bytes from 10.66.7.114: icmp_seq=10 ttl=64 time=0.216 ms
64 bytes from 10.66.7.114: icmp_seq=11 ttl=64 time=0.234 ms
64 bytes from 10.66.7.114: icmp_seq=12 ttl=64 time=0.193 ms
64 bytes from 10.66.7.114: icmp_seq=13 ttl=64 time=0.232 ms
64 bytes from 10.66.7.114: icmp_seq=14 ttl=64 time=0.192 ms
64 bytes from 10.66.7.114: icmp_seq=15 ttl=64 time=0.216 ms
64 bytes from 10.66.7.114: icmp_seq=16 ttl=64 time=0.214 ms
64 bytes from 10.66.7.114: icmp_seq=17 ttl=64 time=0.234 ms
64 bytes from 10.66.7.114: icmp_seq=18 ttl=64 time=0.212 ms
64 bytes from 10.66.7.114: icmp_seq=19 ttl=64 time=0.192 ms
64 bytes from 10.66.7.114: icmp_seq=20 ttl=64 time=0.192 ms
64 bytes from 10.66.7.114: icmp_seq=21 ttl=64 time=0.219 ms
64 bytes from 10.66.7.114: icmp_seq=22 ttl=64 time=0.191 ms
64 bytes from 10.66.7.114: icmp_seq=23 ttl=64 time=0.185 ms
64 bytes from 10.66.7.114: icmp_seq=24 ttl=64 time=0.177 ms
64 bytes from 10.66.7.114: icmp_seq=25 ttl=64 time=0.216 ms
64 bytes from 10.66.7.114: icmp_seq=26 ttl=64 time=0.192 ms
64 bytes from 10.66.7.114: icmp_seq=27 ttl=64 time=0.218 ms
64 bytes from 10.66.7.114: icmp_seq=28 ttl=64 time=0.191 ms
64 bytes from 10.66.7.114: icmp_seq=29 ttl=64 time=0.216 ms
64 bytes from 10.66.7.114: icmp_seq=30 ttl=64 time=0.191 ms
64 bytes from 10.66.7.114: icmp_seq=31 ttl=64 time=0.220 ms
64 bytes from 10.66.7.114: icmp_seq=32 ttl=64 time=0.191 ms
64 bytes from 10.66.7.114: icmp_seq=33 ttl=64 time=0.158 ms
64 bytes from 10.66.7.114: icmp_seq=34 ttl=64 time=0.191 ms
64 bytes from 10.66.7.114: icmp_seq=35 ttl=64 time=0.191 ms
64 bytes from 10.66.7.114: icmp_seq=36 ttl=64 time=0.176 ms
64 bytes from 10.66.7.114: icmp_seq=37 ttl=64 time=0.262 ms
64 bytes from 10.66.7.114: icmp_seq=38 ttl=64 time=0.195 ms
64 bytes from 10.66.7.114: icmp_seq=39 ttl=64 time=0.215 ms
64 bytes from 10.66.7.114: icmp_seq=40 ttl=64 time=0.192 ms
64 bytes from 10.66.7.114: icmp_seq=41 ttl=64 time=0.220 ms
64 bytes from 10.66.7.114: icmp_seq=42 ttl=64 time=0.193 ms
64 bytes from 10.66.7.114: icmp_seq=43 ttl=64 time=0.186 ms
64 bytes from 10.66.7.114: icmp_seq=44 ttl=64 time=0.176 ms
64 bytes from 10.66.7.114: icmp_seq=45 ttl=64 time=0.186 ms
64 bytes from 10.66.7.114: icmp_seq=46 ttl=64 time=0.214 ms
64 bytes from 10.66.7.114: icmp_seq=47 ttl=64 time=0.214 ms
64 bytes from 10.66.7.114: icmp_seq=48 ttl=64 time=0.192 ms
64 bytes from 10.66.7.114: icmp_seq=49 ttl=64 time=0.240 ms


test on the fixed version
# uname -r
2.6.32-337.el6.x86_64
# rpm -q qemu-kvm
qemu-kvm-0.12.1.2-2.331.el6.x86_64

guest:rhel6.4

the steps as same as reproduce

results:
[root@localhost home]# ping 10.66.6.206 -i 0.01
PING 10.66.6.206 (10.66.6.206) 56(84) bytes of data.
64 bytes from 10.66.6.206: icmp_seq=1 ttl=64 time=1.10 ms
64 bytes from 10.66.6.206: icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=3 ttl=64 time=0.096 ms
64 bytes from 10.66.6.206: icmp_seq=4 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=5 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=6 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=7 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=8 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=9 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=10 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=11 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=12 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=13 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=14 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=15 ttl=64 time=0.108 ms
64 bytes from 10.66.6.206: icmp_seq=16 ttl=64 time=0.105 ms
64 bytes from 10.66.6.206: icmp_seq=17 ttl=64 time=0.104 ms
64 bytes from 10.66.6.206: icmp_seq=18 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=19 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=20 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=21 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=22 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=23 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=24 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=25 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=26 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=27 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=28 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=29 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=30 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=31 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=32 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=33 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=34 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=35 ttl=64 time=0.095 ms
64 bytes from 10.66.6.206: icmp_seq=36 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=37 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=38 ttl=64 time=0.112 ms
64 bytes from 10.66.6.206: icmp_seq=39 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=40 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=41 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=42 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=43 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=44 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=45 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=46 ttl=64 time=0.096 ms
64 bytes from 10.66.6.206: icmp_seq=47 ttl=64 time=0.095 ms
64 bytes from 10.66.6.206: icmp_seq=48 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=49 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=50 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=51 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=52 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=53 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=54 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=55 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=56 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=57 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=58 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=59 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=60 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=61 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=62 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=63 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=64 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=65 ttl=64 time=0.096 ms
64 bytes from 10.66.6.206: icmp_seq=66 ttl=64 time=0.094 ms
64 bytes from 10.66.6.206: icmp_seq=67 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=68 ttl=64 time=0.092 ms
64 bytes from 10.66.6.206: icmp_seq=69 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=70 ttl=64 time=0.093 ms
64 bytes from 10.66.6.206: icmp_seq=71 ttl=64 time=0.091 ms
64 bytes from 10.66.6.206: icmp_seq=72 ttl=64 time=0.093 ms


as above test ,on the fixed version,the latency time (respond time) of ping have more faster speed .

Comment 11 errata-xmlrpc 2013-02-21 07:39:13 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHBA-2013-0527.html