[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Xen-unstable Linux 3.14-rc3 and 3.13 Network troubles "bisected"
Wednesday, March 12, 2014, 12:35:22 PM, you wrote: > On Wed, Mar 12, 2014 at 02:42:43AM +0100, Sander Eikelenboom wrote: > [...] >> Ok you asked for it .. so here we go .. ;-) : >> >> - Xen-unstable >> - DomU: >> - PV guest >> - Debian Wheezy >> - Kernel: 3.14-rc5 (.config see dom0 .config) >> - Running netserver >> - Dom0: >> - Debian Wheezy >> - Kernel: 3.13.6 + additional patches (see attached git log and .config) >> - 2 physical NIC's >> - Autoballooning is prevented by using dom0_mem=1536M,max:1536M for xen >> and mem=1536M for dom0 kernel stanzas in grub >> - vcpu 0 is pinned on pcpu 0 and exclusively for dom0 >> >> - Networking: >> - Routed bridge >> - eth0 = internet >> - eth1 = lan 172.16.x.x >> - xen_bridge = bridge for VM's 192.168.1.x >> - iptables NAT and routing >> - attached dom0 and domU ifconfig output >> - attached ethtool -k output for the bridge, vif and guest eth0 >> >> Triggering workload: >> - Well that's were the problem is :-) >> - The Guest has a normal disk and swap (phy/lvm) and >> shared storage with glusterfs (glusterfs server is on dom0) >> - The Guest exposes this storage via webdavs >> >> What triggers it is: >> - The Guest runs it's rsync of the shared storage to a remote client on >> the internet >> So this causes traffic from Dom0 to domU (reading storage) .. >> back from domU to dom0 and via iptables NAT on to eth0 (actual rsync) >> or vice versa when syncing the other way around >> - At the same time do a backup from a windows machine from the lan to >> the webdavs server >> So this causes traffic from eth1 to domU (webdav) .. >> back from domU to dom0 (writing to the shared storage) >> >> So in essence it is doing quite some netback && netfront stress testing :-) >> >> It seems to only trigger when doing both the rsync and the webdav >> simultaneous. >> >> I tried my best to emulate any of this with netperf (and multiple instances), >> i tried with various (odd) packet sizes and the packet / byte rates >> transmitted >> are higher then with the workload above ... but it doesn't seem to trigger >> with netpref >> >> So i don't think it will be easy to replicate ... >> > Sorry, this is probably not something I can setup. *sigh* >> Perhaps running through the available logging again .. and try to answer >> some questions ... this is just with one guest running kernels as before >> only added debugging to netfront and xen (diffs attached): >> >> Mar 12 02:00:44 backup kernel: [ 496.840646] net eth0: rx->offset: 0, size: >> 4294967295 > This "size" here is actually "status", status=-1, it's an error... >> Mar 12 02:00:44 backup kernel: [ 496.840665] net eth0: cons:1346005 slots:1 >> rp:1346013 max:18 err:0 rx->id:212 rx->offset:0 size:4294967295 ref:572 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.840680] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.840687] net eth0: cons:1346005 slots:2 >> rp:1346013 max:18 err:-22 rx->id:214 rx->offset:0 size:4294967295 ref:657 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.840701] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.840712] net eth0: cons:1346005 slots:3 >> rp:1346013 max:18 err:-22 rx->id:215 rx->offset:0 size:4294967295 ref:667 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.840733] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.840740] net eth0: cons:1346005 slots:4 >> rp:1346013 max:18 err:-22 rx->id:216 rx->offset:0 size:4294967295 ref:716 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.840757] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.840764] net eth0: cons:1346005 slots:5 >> rp:1346013 max:18 err:-22 rx->id:217 rx->offset:0 size:4294967295 ref:755 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.840778] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.840784] net eth0: cons:1346005 slots:6 >> rp:1346013 max:18 err:-22 rx->id:218 rx->offset:0 size:4294967295 ref:592 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.840801] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.840807] net eth0: cons:1346005 slots:7 >> rp:1346013 max:18 err:-22 rx->id:219 rx->offset:0 size:4294967295 ref:633 >> pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 gso_type:0 gso_segs:0 >> RING_HAS_UNCONSUMED_RESPONSES:9 cons_changed:1 cons_before:1346004 >> xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.841043] net eth0: rx->offset: 0, size: >> 4294967295 >> >> Mar 12 02:00:44 backup kernel: [ 496.841052] net eth0: cons:1346025 slots:1 >> rp:1346038 max:18 err:0 rx->id:232 rx->offset:0 size:4294967295 >> ref:-131941395332491 pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 >> gso_type:0 gso_segs:0 RING_HAS_UNCONSUMED_RESPONSES:13 cons_changed:1 >> cons_before:1346024 xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.841067] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.841074] net eth0: cons:1346025 slots:2 >> rp:1346038 max:18 err:-22 rx->id:234 rx->offset:0 size:4294967295 >> ref:-131941395332579 pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 >> gso_type:0 gso_segs:0 RING_HAS_UNCONSUMED_RESPONSES:29 cons_changed:1 >> cons_before:1346024 xennet_get_extras_err:0 >> Mar 12 02:00:44 backup kernel: [ 496.841092] net eth0: rx->offset: 0, size: >> 4294967295 >> Mar 12 02:00:44 backup kernel: [ 496.841101] net eth0: cons:1346025 slots:3 >> rp:1346038 max:18 err:-22 rx->id:235 rx->offset:0 size:4294967295 >> ref:-131941395332408 pagesize:4096 skb_ipsummed:0 is_gso:0 gso_size:0 >> gso_type:0 gso_segs:0 RING_HAS_UNCONSUMED_RESPONSES:29 cons_changed:1 >> cons_before:1346024 xennet_get_extras_err:0 >> >> >> (XEN) [2014-03-12 01:00:44] grant_table.c:1856:d0v2 Bad grant reference >> 4325377 gt_version:1 ldom:0 readonly:0 allow_transitive:1 >> (XEN) [2014-03-12 01:00:44] grant_table.c:2100:d0v2 acquire_grant_for_copy >> failed .. dest_is_gref rc:-3 source.domid:32752 dest.domid:1 s_frame:5478146 >> source_off:0 source_len:4096 op->source.offset:0 op->len:1168 > rc = -3 when acquiring grant. This means grant reference is unrecognised > or inappropriate. The grant reference is 4325377 which is obviously too > large for a sensible grant ref. It's just garbage. >> (XEN) [2014-03-12 01:00:44] grant_table.c:1856:d0v2 Bad grant reference >> 19791875 gt_version:1 ldom:0 readonly:0 allow_transitive:1 >> (XEN) [2014-03-12 01:00:44] grant_table.c:2100:d0v2 acquire_grant_for_copy >> failed .. dest_is_gref rc:-3 source.domid:32752 dest.domid:1 s_frame:5497610 >> source_off:0 source_len:4096 op->source.offset:0 op->len:2476 >> (XEN) [2014-03-12 01:00:44] grant_table.c:1856:d0v2 Bad grant reference >> 4325379 gt_version:1 ldom:0 readonly:0 allow_transitive:1 >> (XEN) [2014-03-12 01:00:44] grant_table.c:2100:d0v2 acquire_grant_for_copy >> failed .. dest_is_gref rc:-3 source.domid:32752 dest.domid:1 s_frame:5478282 >> source_off:0 source_len:4096 op->source.offset:0 op->len:1634 >> (XEN) [2014-03-12 01:00:44] grant_table.c:1856:d0v2 Bad grant reference >> 4325379 gt_version:1 ldom:0 readonly:0 allow_transitive:1 >> (XEN) [2014-03-12 01:00:44] grant_table.c:2100:d0v2 acquire_grant_for_copy >> failed .. dest_is_gref rc:-3 source.domid:32752 dest.domid:1 s_frame:5497610 >> source_off:0 source_len:4096 op->source.offset:1634 op->len:1620 >> (XEN) [2014-03-12 01:00:44] grant_table.c:1856:d0v2 Bad grant reference >> 4325377 gt_version:1 ldom:0 readonly:0 allow_transitive:1 >> (XEN) [2014-03-12 01:00:44] grant_table.c:2100:d0v2 acquire_grant_for_copy >> failed .. dest_is_gref rc:-3 source.domid:32752 dest.domid:1 s_frame:5497609 >> source_off:0 source_len:4096 op->source.offset:0 op->len:4096 >> (XEN) [2014-03-12 01:00:44] grant_table.c:1856:d0v2 Bad grant reference >> 19791875 gt_version:1 ldom:0 readonly:0 allow_transitive:1 >> >> - Sometimes (but not always) netfront also spits out: >> dev_warn(dev, "Invalid extra type: %d\n", extra->type); >> where the extra type seems a random value (seen 196, 31 ..) >> - Sometimes (but not always) netfront also spits out: >> dev_warn(dev, "Need more slots\n"); >> - Sometimes (but not always) netfront also spits out: >> dev_warn(dev, "Missing extra info\n"); >> > That's because garbage is pushed to frontend. It's trying to decode some > random values. >> >> First question that comes to my mind: >> - Are the warnings netfront spits out the cause of xen reporting the bad >> grant reference ? >> Or >> Are the Bad grant references Xen is reporting .. causing netfront to spit >> out the warnings ? > No. They are not directly connected. > 0. backend breaks down a skb into slots. > 1. backend gets a request from the rx ring (a slot with gref provided by > frontend), until all slots in skb are handled. > 2. backend grant-copies data to that slot (with gref). > 3. backend pushes a response to frontend, whose content depends on the > result of previous step. > 4. frontend handles that response. > So the grant copy error in hypervisor you're seeing is in 2. The > complaint from frontend is in 4, when backend pushes a response with > error status in it. The bug is most likely in 0, when the calculation > goes wrong - either in the breakdown process, or in the macro that > returns usable slots (this can lead to backend thinks there's enough > slots while there's not). Ok so perhaps a debug patch which does more sanity checking there ? Because i don't see any errors/warnings from netback in dom0. >> - Why is that "if (rx->flags & XEN_NETRXF_extra_info) {}" part in >> xen-netfront.c doing there and changing cons midway ? >> The commit message from f942dc2552b8bfdee607be867b12a8971bb9cd85 that >> introduced the if says: >> >> One major change from xen.git is that the guest transmit path (i.e. what >> looks like receive to netback) has been significantly reworked to remove >> the dependency on the out of tree PageForeign page flag (a core kernel >> patch which enables a per page destructor callback on the final >> put_page). This page flag was used in order to implement a grant map >> based transmit path (where guest pages are mapped directly into SKB >> frags). Instead this version of netback uses grant copy operations into >> regular memory belonging to the backend domain. Reinstating the grant >> map functionality is something which I would like to revisit in the >> future. >> >> It *is* using grant copy now .. so should this part have been removed ? >> And >> Could Paul's commit that seems to be the first to trigger these events >> affect this ? >> > This depicts guest *transmit* path, but the issue you're seeing is in > guest *receive* path. So that's totally different thing. Errr yes well if the (rx->flags & XEN_NETRXF_extra_info) {}) should only be doing something on the transmit path .. why does it seem to result to true on my issue ? (see cons_changed=1 in the debub output.. and you see cons being cons + 1 after that) > Wei. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |