20150919 – Research

1. Xen 소스 코드 분석
– 아래는 Xen에서 IRQ에 관련된 함수를 따라가본 것을 간략히 정리한 것.

alloc_vcpu() -> vcpu_initialise() -> hvm_vcpu_initialise() -> vlapic_init()

vioapic_deliver() -> iopaic_inj_irq() -> vlapic_set_irq() -> vcpu_kick()
vlapic_accept_irq() -> vlapic_set_irq() -> vcpu_kick()

do_event_channel_op() -> evtchn_2l_set_pending() -> vcpu_mark_events_pending() -> vcpu_kick()

evtchn_2l_unmask() -> vcpu_mark_events_pending() -> vcpu_kick()

evtchn_port_unmask() -> evtchn_fifo_unmask() -> evtchn_fifo_set_pending() -> vcpu_mark_events_pending() -> vcpu_kick()

hypercall(29) -> do_sched_op() -> do_poll() -> evtchn_port_is_pending()

send_guest_vcpu_virq() -> evtchn_port_set_pending()

send_global_virq() -> send_guest_global_virq() -> evtchn_port_set_pending()

hypercall() -> do_IRQ() -> __do_IRQ_guest() -> send_guest_pirq() -> evtchn_port_set_pending() -> vcpu_mark_events_pending() -> hvm_assert_evtchn_irq() -> vlapic_set_irq() ->

dpci_softirq() -> hvm_dirq_assist -> send_guest_pirq()

do_hvm_op() -> hvmop_inject_msi() -> hvm_inject_msi() -> send_guest_pirq()

– csched_vcpu_wake 함수가 interrupt가 발생하는 시점에서 vcpu를 깨우는 역할을 한다.
– interrupt와 IPI가 발생하는 위치를 찾기 쉽지 않은데, perfc_incr 함수 키워드로 해서 찾으면 쉽게 찾을 수 있다. perfc_incr 함수가 이벤트를 세는 것에 쓰이는 것으로 보인다. ./xen 아래에서 grep으로 검색하면 된다.
– perfc_incr(ipis), perfc_incr(irqs)가 등이 있음.
– 어떻게 interrupt 또는 IPI로 인한 scheduling delay를 측정할 수 있는지는 모르겠다.

Advertisements
Tagged with: , , , , , ,
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 98,564 hits
%d bloggers like this: