Virtualization의 종류

Posted 2008. 5. 13. 04:17
요즘 자주 듣는 단어 중에 하나가 가상화(virtualization) 기술입니다. 보통 운영체제 위에 또 다른 운영체제를 설치할 수 있게 해주는 VMware나 Parallels Desktop 등 통해 익숙해졌으리라 생각합니다.

가상화는 생각보다 넓은 범주의 기술을 의미하는데, 크게 다음 3가지로 나눠 볼 수 있습니다.

1) 머신-수준 가상화(Machine-Level Virtualization) : 이 범주에 속하는 대표적인 프로그램이 VMware, Parallels Desktop, Virtual Box 등입니다.

2) 시스템-수준 가상화(System-Level Virtualization) : Paravirtualilzation이라고도 불리며 Xen이 대표적입니다.

3) 언어-수준 가상화(Language-Level Virtualization) : 프로그래밍 언어 수준의 가상 머신을 의미하며 JVM과 .NET이 대표적인 언어 수준 가상화입니다.


저는 언어 수준 가상화만 관심 가지고 보고 있었는데, 요즘은 조금 더 밑으로 내려가도 재미있는 이슈가 많은 것 같다는 생각이 듭니다.

Dynamic Profiling

Posted 2008. 5. 13. 04:14
JIT를 제공하는 Java Server VM이 정적으로 컴파일된 C/C++ 수준 혹은 그 이상의 성능을 보일 수 있는 중요한 이유 중에 하나는 런타임에 수집한 데이터를 가지고 컴파일을 최적화하기 때문입니다.

다음 코드를 예로 봅시다.

for (i = 0 ; i < 10; i++) {
    if (cond) {
        g();
    } else {
        h():
    }
}

루프 안의 g 혹은 h 함수를 inline 할지 말지 결정하려면 cond이 true일 확률이 높은지 false인 확률이 높은지 알 수 있어야 합니다. 만약 cond가 거의 항상 true라면 g를 inline하고 h는 그냥 두어야 할 것입니다. 하지만 런타임 정보가 없는 C/C++ 컴파일러은 이런 최적화를 수행하기는 힘듭니다.

이런 한계 때문에 요즘은 일반적인 컴파일러들도 런타임 정보를 활용해 추가적인 최적화를 하기도 합니다. 일례로 인텔 컴파일러는 바이너리가 동적 프로파일링(dynamic profiling)을 수행하도록 한 번 컴파일한 후에, 이를 실행해 얻은 프로파일링 데이터를 바탕으로 다시 한 번 컴파일해 최적화된 코드를 생성할 수도 있습니다.


파이썬 구현들

Posted 2008. 4. 30. 21:05
흔히 파이썬하면 파이썬 언어 명세보다는 Guido van Rossum이 작성한 CPython을 의미하는 경우가 많습니다. 하지만 CPython 외에도 파이썬을 구현한 프로젝트가 많이 있었습니다. 한 때 많은 사람들의 관심을 받았던 Stackless Python을 필두로 시작된 파이썬 구현은 현재 JVM과 .NET에 올라간 Jython, IronPython으로 이어지고 있습니다. 파이썬으로 파이썬을 구현하자는 PyPy 프로젝트도 있습니다.

더 이상 개발되지는 않지만 실험적인 파이썬 구현으로는 PyVM과 Vyper가 있었습니다. 그 중 Vyper는 John Max Skaller OCaml로 작성한 파이썬 구현입니다. 당시 파이썬 스코핑(scoping) 룰에 불만을 품고 시작해 좀 더 빠르고 함수적인 파이썬을 만들려는 시도였습니다. IBM dW에 보면 Stackless Python의 Christian Tismer와 Vyper의 John Max Skaller와 인터뷰가 있더군요. 하지만 지금은 Vyper의 홈페이지 링크조차 깨진 채 존재하지 않는군요. 아아. Vyper가 커뮤니티의 도움을 얻어 CPython과 더불어 성장해줬다면 조금 더 함수형인 파이썬이 나왔을지도 모르겠습니다.

« PREV : 1 : ··· : 4 : 5 : 6 : 7 : 8 : 9 : 10 : ··· : 82 : NEXT »