|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] xen_evtchn_do_upcall
On Mon, 2012-10-22 at 02:51 +0100, David Xu wrote:
> Hi,
>
>
> Is anybody know the purpose of this method (xen_evtchn_do_upcall)?
It is the callback used to inject event channels events (i.e. IRQs) into
the guest. You would expect to see it at the base of any stack trace
taken from interrupt context.
> When I run a user level application involved in TCP receiving and the
> SoftIRQ for eth0 on the same CPU core, everything is OK. But if I run
> them on 2 different cores, there will be xen_evtchn_do_upcall()
> existing (maybe when the local_bh_disable() or local_bh_enable() is
> called)
it would not be unusual to get an interrupt immediately after
re-enabling interrupts.
> in __inet_lookup_established() routine which costs longer time than
> the first scenario. Is it due to the synchronization issue between
> process context and softirq context? Thanks for any reply.
>
>
> 1) | __inet_lookup_established() {
> 1) | xen_evtchn_do_upcall() {
> 1) 0.054 us | exit_idle();
> 1) | irq_enter() {
> 1) | rcu_irq_enter() {
> 1) 0.102 us | rcu_exit_nohz();
> 1) 0.431 us | }
> 1) 0.064 us | idle_cpu();
> 1) 1.152 us | }
> 1) | __xen_evtchn_do_upcall() {
> 1) 0.119 us | irq_to_desc();
> 1) | handle_edge_irq() {
> 1) 0.107 us | _raw_spin_lock();
> 1) | ack_dynirq() {
> 1) | evtchn_from_irq() {
> 1) | info_for_irq() {
> 1) | irq_get_irq_data() {
> 1) 0.052 us | irq_to_desc();
> 1) 0.418 us | }
> 1) 0.782 us | }
> 1) 1.135 us | }
> 1) 0.049 us | irq_move_irq();
> 1) 1.800 us | }
> 1) | handle_irq_event() {
> 1) 0.161 us | _raw_spin_unlock();
> 1) | handle_irq_event_percpu() {
> 1) | xennet_interrupt() {
> 1) 0.125 us | _raw_spin_lock_irqsave();
> 1) | xennet_tx_buf_gc() {
> 1) 0.079 us | gnttab_query_foreign_access();
> 1) 0.050 us | gnttab_end_foreign_access_ref();
> 1) 0.069 us | gnttab_release_grant_reference();
> 1) | dev_kfree_skb_irq() {
> 1) 0.055 us | raise_softirq_irqoff();
> 1) 0.472 us | }
> 1) 0.049 us | gnttab_query_foreign_access();
> 1) 0.058 us | gnttab_end_foreign_access_ref();
> 1) 0.058 us | gnttab_release_grant_reference();
> 1) | dev_kfree_skb_irq() {
> 1) 0.050 us | raise_softirq_irqoff();
> 1) 0.456 us | }
> 1) 3.714 us | }
> 1) 0.102 us | _raw_spin_unlock_irqrestore();
> 1) 4.857 us | }
> 1) 0.061 us | note_interrupt();
> 1) 5.571 us | }
> 1) 0.054 us | _raw_spin_lock();
> 1) 6.707 us | }
> 1) 0.083 us | _raw_spin_unlock();
> 1) + 10.083 us | }
> 1) + 10.985 us | }
> 1) | irq_exit() {
> 1) | rcu_irq_exit() {
> 1) 0.087 us | rcu_enter_nohz();
> 1) 0.429 us | }
> 1) 0.049 us | idle_cpu();
> 1) 1.088 us | }
> 1) + 14.551 us | }
> 1) 0.191 us | } /* __inet_lookup_established */
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |