[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Issue: Networking performance in Xen VM on Arm64
On Fri, Oct 28, 2022 at 05:54:05PM +0800, Leo Yan wrote: [...] > If map to the code, I think the function xennet_start_xmit() in Xen > frontend driver is critical for the sending interval in domU. I can > see several things cost time when sending a packet: > > - Xen frontend driver needs to setup grant table for every skb, it > invokes the function xennet_tx_setup_grant() and > gnttab_grant_foreign_access_ref() to prepare grant table; > > - Xen frontend driver sends notification by calling > notify_remote_via_irq(). It will trap to Xen hypervisor to send the > interrupt, this takes several macro seonds for this step. > > - Xen frontend driver calls xennet_tx_buf_gc(), the interval for this > function is vary, it will take ~30us in the case for reclaiming grant > table. > > Any thoughts for this? Supplement info with Ftrace function graph. You could see below log which shows the time is spent in xennet_start_xmit(): 1) | xennet_start_xmit() { 1) | /* xennet_start_xmit: TSC: 50702652609 */ 1) 0.240 us | _raw_spin_lock_irqsave(); 1) | netif_skb_features() { 1) 0.280 us | skb_network_protocol(); 1) 0.920 us | } 1) | gnttab_foreach_grant_in_range() { 1) | xennet_tx_setup_grant() { 1) 0.280 us | gnttab_claim_grant_reference(); 1) | gnttab_grant_foreign_access_ref() { 1) 0.280 us | gnttab_update_entry_v1(); 1) 0.800 us | } 1) | /* id=103 ref=871 offset=2050 len=1514 TSC: 50702652709 */ 1) 2.200 us | } 1) 2.800 us | } 1) | /* xennet_notify_tx_irq: TSC: 50702652741 */ 1) | notify_remote_via_irq() { 1) | irq_get_irq_data() { 1) 0.240 us | irq_to_desc(); 1) 0.760 us | } 1) 3.880 us | } 1) 0.280 us | xennet_tx_buf_gc(); 1) 0.240 us | _raw_spin_unlock_irqrestore(); 1) + 11.120 us | } 1) | xennet_start_xmit() { 1) | /* xennet_start_xmit: TSC: 50702652974 */ 1) 0.280 us | _raw_spin_lock_irqsave(); 1) | netif_skb_features() { 1) 0.240 us | skb_network_protocol(); 1) 0.760 us | } 1) | gnttab_foreach_grant_in_range() { 1) | xennet_tx_setup_grant() { 1) 0.280 us | gnttab_claim_grant_reference(); 1) | gnttab_grant_foreign_access_ref() { 1) 0.360 us | gnttab_update_entry_v1(); 1) 0.840 us | } 1) | /* id=101 ref=869 offset=1026 len=574 TSC: 50702653093 */ 1) 2.800 us | } 1) 3.320 us | } 1) | /* xennet_notify_tx_irq: TSC: 50702653124 */ 1) | notify_remote_via_irq() { 1) | irq_get_irq_data() { 1) 0.240 us | irq_to_desc(); 1) 0.760 us | } 1) 3.840 us | } 1) 0.280 us | xennet_tx_buf_gc(); 1) 0.280 us | _raw_spin_unlock_irqrestore(); 1) + 11.800 us | } 1) | /* finish_transmit_data */ 1) | /* transmit_data */ 1) | /* finish_transmit_data */ 1) | /* transmit_data */ 1) | /* finish_transmit_data */ 1) | /* transmit_data */ 1) | /* finish_transmit_data */ 1) | /* Before_throttle */ 1) | xennet_start_xmit() { 1) | /* xennet_start_xmit: TSC: 50702654697 */ 1) 0.280 us | _raw_spin_lock_irqsave(); 1) | netif_skb_features() { 1) 0.240 us | skb_network_protocol(); 1) 0.760 us | } 1) | gnttab_foreach_grant_in_range() { 1) | xennet_tx_setup_grant() { 1) 0.280 us | gnttab_claim_grant_reference(); 1) | gnttab_grant_foreign_access_ref() { 1) 0.320 us | gnttab_update_entry_v1(); 1) 0.920 us | } 1) | /* id=3 ref=771 offset=2050 len=1514 TSC: 50702654801 */ 1) 2.400 us | } 1) 2.960 us | } 1) | /* xennet_notify_tx_irq: TSC: 50702654832 */ 1) | notify_remote_via_irq() { 1) | irq_get_irq_data() { 1) 0.280 us | irq_to_desc(); 1) 0.760 us | } 1) 4.160 us | } 1) | xennet_tx_buf_gc() { 1) | gnttab_end_foreign_access_ref() { 1) 0.480 us | gnttab_end_foreign_access_ref_v1(); 1) 0.960 us | } 1) 0.280 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.240 us | __raise_softirq_irqoff(); 1) 1.240 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.480 us | gnttab_end_foreign_access_ref_v1(); 1) 0.960 us | } 1) 0.240 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.240 us | __raise_softirq_irqoff(); 1) 0.760 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.400 us | gnttab_end_foreign_access_ref_v1(); 1) 0.840 us | } 1) 0.280 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.280 us | __raise_softirq_irqoff(); 1) 0.880 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.360 us | gnttab_end_foreign_access_ref_v1(); 1) 0.840 us | } 1) 0.240 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.240 us | __raise_softirq_irqoff(); 1) 0.760 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.240 us | gnttab_end_foreign_access_ref_v1(); 1) 0.760 us | } 1) 0.240 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.240 us | __raise_softirq_irqoff(); 1) 0.760 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.360 us | gnttab_end_foreign_access_ref_v1(); 1) 0.960 us | } 1) 0.240 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.240 us | __raise_softirq_irqoff(); 1) 0.760 us | } 1) + 17.720 us | } 1) 0.360 us | _raw_spin_unlock_irqrestore(); 1) + 29.320 us | } 1) | xennet_start_xmit() { 1) | /* xennet_start_xmit: TSC: 50702655824 */ 1) 0.360 us | _raw_spin_lock_irqsave(); 1) | netif_skb_features() { 1) 0.280 us | skb_network_protocol(); 1) 0.760 us | } 1) | gnttab_foreach_grant_in_range() { 1) | xennet_tx_setup_grant() { 1) 0.280 us | gnttab_claim_grant_reference(); 1) | gnttab_grant_foreign_access_ref() { 1) 0.280 us | gnttab_update_entry_v1(); 1) 0.880 us | } 1) | /* id=28 ref=796 offset=2 len=1514 TSC: 50702655925 */ 1) 2.280 us | } 1) 2.920 us | } 1) | /* xennet_notify_tx_irq: TSC: 50702655958 */ 1) | notify_remote_via_irq() { 1) | irq_get_irq_data() { 1) 0.280 us | irq_to_desc(); 1) 0.760 us | } 1) 4.160 us | } 1) | xennet_tx_buf_gc() { 1) | gnttab_end_foreign_access_ref() { 1) 0.360 us | gnttab_end_foreign_access_ref_v1(); 1) 0.880 us | } 1) 0.280 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.280 us | __raise_softirq_irqoff(); 1) 1.280 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.360 us | gnttab_end_foreign_access_ref_v1(); 1) 0.880 us | } 1) 0.760 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.280 us | __raise_softirq_irqoff(); 1) 0.760 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.400 us | gnttab_end_foreign_access_ref_v1(); 1) 0.880 us | } 1) 0.240 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.400 us | __raise_softirq_irqoff(); 1) 0.880 us | } 1) | gnttab_end_foreign_access_ref() { 1) 0.400 us | gnttab_end_foreign_access_ref_v1(); 1) 0.880 us | } 1) 0.280 us | gnttab_release_grant_reference(); 1) | __dev_kfree_skb_irq() { 1) 0.240 us | __raise_softirq_irqoff(); 1) 0.760 us | } 1) + 12.440 us | } 1) 0.800 us | _raw_spin_unlock_irqrestore(); 1) + 24.080 us | } 1) | xennet_start_xmit() { 1) | /* xennet_start_xmit: TSC: 50702656728 */ 1) 0.240 us | _raw_spin_lock_irqsave(); 1) | netif_skb_features() { 1) 0.240 us | skb_network_protocol(); 1) 0.760 us | } 1) | gnttab_foreach_grant_in_range() { 1) | xennet_tx_setup_grant() { 1) 0.280 us | gnttab_claim_grant_reference(); 1) | gnttab_grant_foreign_access_ref() { 1) 0.240 us | gnttab_update_entry_v1(); 1) 0.720 us | } 1) | /* id=103 ref=871 offset=2050 len=1422 TSC: 50702656823 */ 1) 2.160 us | } 1) 2.800 us | } 1) | /* xennet_notify_tx_irq: TSC: 50702656850 */ 1) | notify_remote_via_irq() { 1) | irq_get_irq_data() { 1) 0.240 us | irq_to_desc(); 1) 0.720 us | } 1) 3.920 us | } 1) 0.320 us | xennet_tx_buf_gc(); 1) 0.280 us | _raw_spin_unlock_irqrestore(); 1) + 11.000 us | }
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |