20151026

1. Python에서 threading을 사용할 때 유의할 점
– Python에서 Threading 모듈은 실제로는 코어를 하나만 사용한다.
– 따라서 여러 쓰레드를 사용해도 실제 연산 시간이 적다면 문제가 되지 않음.
– 하지만 연산 시간이 길고, I/O 없이 실행되는 경우라면 문제가 될 수 있음.
– 이를 해결하기 위해서는 multiprocessing 모듈을 사용해야 함.
– multiprocessing 모듈은 대부분 Threading interface를 사용하고 있으므로, 문제 없이 Threading에서 multiprocessing 모듈로 전환 가능하다.
– 몇 가지 다른 인터페이스도 있는데, multiprocessing.Event() 객체가 set인지 확인하기 위한 메소드의 이름이 다르다. Threading에서는 isSet을 사용하는데, multiprocessing에서는 is_set을 사용한다.
– 개인적으로 Threading 모듈을 사용할 때와 multiprocessing 모듈을 사용할 때 가장 다르게 느꼈던 것은 변수 공유 방식이다. Threading 모듈은 프로세스를 새롭게 생성하는 방식이 아니므로, 전역 변수 공유가 된다. 하지만 multiprocessing의 경우에는 프로세스를 새롭게 생성하므로, 전역 변수의 공유 등이 되지 않는다. 이를 해결하기 위해서는 multiprocessing에서의 Pipe 또는 Queue를 사용해야 한다. Pickling 가능한 object라면 Pipe 또는 Queue를 사용해 thread간 공유가 가능하다. 개인적으로는 multiprocessing thread에서 지속적으로 써주고, Threading thread에서 지속적으로 읽어주는 방식으로 변수 공유를 구현했다. 이렇게 구현한 Threading thread는 오버헤드가 크지 않으므로, 큰 무리 없이 값을 받아올 수 있었다.
– Pipe에서 send, recv가 blocking call임에 유의해야 한다.


2. Xen에서 IRQ 번호별 이벤트 측정
– 소스 코드를 분석해본 결과, Xen에서 IRQ 관련 코드의 상당 부분이 linux kernel 코드와 유사한 것 같다.
– hypercall 추가하는 방법을 매번 잊는다. ./xen/include/public/xen.h에 hypercall 번호 추가. ./xen/arch/x86/x86_64/entry.S에서 hypercall table 및 argument table 수정.
– ./xen/arch/x86/irq.c에서 IRQ 관련 이벤트를 처리한다.
– domain 구조체 정의는 ./xen/include/xen/sched.h에 있음.
– __start_xen() -> init_IRQ 의 순서로 IRQ 초기화가 진행됨.
– pirq 18번은 키 입력할 때 발생한다. pirq 17번은 VNC 화면에서 마우스를 움직일 때 발생함.
– vioapic_deliver가 guest의 입출력에 관련이 있는 것 같다.

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,190 hits
%d bloggers like this: