Bug 852665
Summary: | Backport e1000 receive queue fixes from upstream | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 6 | Reporter: | Amos Kong <akong> |
Component: | qemu-kvm | Assignee: | Amos Kong <akong> |
Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
Severity: | medium | Docs Contact: | |
Priority: | medium | ||
Version: | 6.4 | CC: | 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
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 . 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 |