20151027

1. Xen에서 IRQ 번호별 이벤트 측정
– Xen에서 IRQ를 번호별로 걸러내기 위해 다양한 시도를 해보았음.
– 현재까지 파악한 것에 따르면, Xen에서 IRQ의 시작은 do_IRQ 함수이다.
– 하지만 do_IRQ 함수에서 입출력을 따라가는 것이 쉽지 않아 보인다.
– do_IRQ() -> __do_IRQ_guest() -> send_guest_pirq()의 순서로 pirq가 전달됨.
– send_guest_pirq()와 동일한 레벨의 다른 함수는 send_guest_vcpu_virq(), send_guest_global_virq()가 있다. send_guest_vcpu_virq()가 guest VM에 IRQ를 전달할 것으로 보이는 함수이나, 실제로 호출되는 지점을 보면 VIRQ_TIMER, VIRQ_XENPMU의 목적으로 쓰인다. 따라서 입출력을 위한 목적으로 쓰이지 않는다.
– 반대로 vcpu_kick()을 호출하는 함수들을 따라가보기도 했다. vcpu_mark_events_pending() 함수가 이 함수들 중에 가장 입출력 이벤트와 밀접한 것으로 보였다. 그 외에 hvm_assert_evtchn_irq(), vlapic_accept_irq() 함수도 관계있어 보였다.
– vcpu_mark_events_pending() 함수는 evtchn_2l_set_pending(), evtchn_fifo_set_pending()에서 호출된다. vcpu_mark_events_pending() 을 호출하는 시점에서 IRQ 번호와 domain_id를 출력해보았으나, IRQ가 제대로 잡히지 않았다. 마우스 움직임과 키 눌림에 대한 IRQ만 잡히고, 그 외의 IRQ는 잡히지 않았다.
– 한편 네트워크의 입출력 상황에 대해 xentop에서 관리하고 있으므로, 이를 사용해 정보를 얻을 수 있었다. xentop에서는 내부적으로 /proc/net/dev를 읽어 이를 파싱하여 xentop 화면에 보여준다. packet의 수, byte의 크기 등을 확인할 수 있으므로, 이로 IRQ 번호를 대체할 수 있을지도 모른다. 네트워크 입출력이 IRQ에 잡히지 않는 것인지, 내가 못 찾은 것인지는 확신할 수 없다.
– xentop에서 network 관련 정보 수집 코드는 xenstat_collect_networks()이다.
– Xen에서는 네트워크 구현을 위해 내부적으로 두 개의 I/O 링을 사용한다고 한다. xen/include/public/io/netif.h에 정의되어 있으며, 두 개의 링을 통해서는 명령어만 전달된다. 그랜트 페이지를 공유함으로써 데이터를 공유한다. 하지만 직접 코드에 printk문을 넣어 동작을 확인했을 때에는, 동작하지 않았다.


2. 교수님과 미팅
– Xen에서 네트워크 입출력 관련된 IRQ가 잡히지 않음.
– 네트워크 입출력 관련 IRQ가 보이지 않는 현상이 있을 수 있음.
– Xen의 IRQ 루틴을 따르지 않을 수 있기 때문이다.
– xentop의 패킷 갯수, 데이터 사용량을 토대로 입출력 여부를 결정해도 좋다.

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

누적 방문자 수
  • 96,354 hits
%d bloggers like this: