안녕하세요!!
그동안 눈팅만 하다가 처음으로 질문을 올려봅니다.
가상화는 시작한지 한 2주정도 되는것 같습니다.
사용환경
1. Hypervisor 및 Dom0 : XenServer 6.2(이제 완전히 오픈소스화 되었다고 합니다.)
2. GuestOS : FC12 + 2.6.35 대 커널버전 사용
3. GuestOS 종류는 다음과 같이 분류되고 있는 것으로 알고 있습니다.
1) PV : Xen 이 최초 제안한 반가상화 모델
2) HVM : Intel 및 AMD 에서 CPU 에서 가상화 기술을 지원함으로써 Xen 전가상화 지원하는 모델
3) PV on HVM : 전가상화에서 성능을 높이기 위해서 PV 기능 지원(어느 시점 이후의 배포판 및 리눅스 커널버전 이상에서 지원)
2.6.35 대 커널버전에서 지원하지 않음
4. 질문
간략히 요약하면, 네트워크 성능이 너무 좋지 않아서 알아본 결과 netfront 드라이버를 올려야 된다는 것을
파악하고(기본으로 realtek 8139 드라이버가 올라가는데, 성능이 무지 안좋네요 ㅋ) make menuconfig 를
통해서 XEN 설정을 활성화 시킨 이후에 GusetOS 로 설치하였으나, 여전히 realtek 8139 드라이버가 올라가고
netfront 드라이버가 로딩되지 않네요.
간단히 분석 결과, xet-netfront.c 의 netif_init 함수에서
if (!xen_domain())
return -ENODEV;
에서 리턴이 됩니다. 즉, xen_domain_type 이라는 변수값이 XEN_NATIVE 이기 때문에 netfront 가 올라가지 않더군요.
커널 소스를 찾아보니 xen_start_kernel 함수에서 xen_domain_type = XEN_PV_DOMAIN 값을 넣어주고 있습니다.
하지만, xen_start_kernel 이 불리지가 않고 있었습니다. xen_start_kernel 이 안불리게 되면 PV 가 아니라 HVM 환경으로
되는 것이라고 생각이 됩니다.
현재는 아래와 같이 함수가 호출이 되고 있습니다.
x86_64_start_kernel -> x86_64_start_reservations -> start_kernel
제가 기대하고 있었던 함수 호출은
xen_start_kernel -> x86_64_start_reservations -> start_kernel 인데요.
이리저리 구글신에게 폭풍 검색을 해도 딱히 원하는 답이 나오지가 않네요.
원래 Xen Hypervisor 의 GuestOS 로 리눅스가 올라가게 되면, xen_start_kernel 이 자동적으로 불려져야 하는게 아닌가요?
(start_kernel 함수가 최초로 불려지는게 아니라요...)
가상화는 할수록 모르는게 너무 많은것 같네요 ㅜㅜ
고수님들의 답변 부탁드립니다.
.
자답입니다.
XenCenter 에서 GuestOS 를 설치할때 Template을 선택하게 되어 있는데 Fedora 템플릿이 없어서 "Other install media" 를 선택해서 설치하니 xen_start_kernel 함수가 호출이 되지 않았네요.
Fedora 에 대응되는 Rea Hat Enterprise 6 Template 를 선택해서 설치하니 xen_start_kernel 함수가 호출이 잘 되는 것을 확인했습니다.
다만 Fedora 설치시 처음에 boot: 프롬프트로 빠져서 kickstart 로 OS 를 설치하려고 하는데 이 부분은 생략이 되고 바로 하드디스크 인식해서 설치과정으로 빠지네요. 요걸로 다시 삽질중입니다. 에휴 ^^;;(일반 Fedora 커널은 설치가 잘 됩니다.)