블로그 이미지
shinyroot

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2011. 9. 10. 06:08 Life/Photo Log


간만에 싸이 사진첩을 훑다가 가져온다. 사진 이쁘게 나올라고 오래버틸라고 안간힘을 썼던 기억이..ㅋ
그냥 예전 기록들이 이리저리 흩어져있고 넘쳐나는 SNS때문에 "에이 다 안해" 했던건 사실인데 이렇게라도 셀프 퍼오기를 통해 블로그라도 살려놔야지 원 ~ㅋ (라고 말하고 또 몇개월 안할 센스) 
posted by shinyroot
2011. 1. 8. 13:14 IT/System
가상화 기술은 기존의 "하나의 컴퓨터에 하나의 OS"가 아닌 "하나의 컴퓨터에 여러개의 가상 컴퓨터, 그리고 각각 독립적으로 운용되는 OS"로 개념을 바꾼 시스템 기술이다. 나는 약 5년정도 가상화 기술에 대해 연구해오고 있다. 학부때 마냥 하드웨어를 컨트롤하는 OS 커널이 궁금해서 들여다보고 싶은 마음에 이해도 잘 안되는 코드를 보다가 가상화라는 것을 알았고, 저건 또 뭔데 OS 아래까지 내려가서 OS까지 컨트롤하려고 들어! 라는 생각이 들 때쯤 관심이 시작 되었다. 

연구 시작은 소프트웨어에서 가장 '제어력'이 높은 것을 자세히 알아보고 싶다는 생각에 별 생각 없이 OS 커널 마저 맘대로 휘두를수 있는 가상화 기술을 보기 시작했다. 하지만 컴퓨터 연구라는 것이 너무 발전속도가 빠른 나머지 먼저 냄새 맡고 몰려들어 소위 말해 문을 닫고 나가 버린 분야가 많은 탓에 내가 보기 시작 할 때만 해도 많은 코어 연구들이 어느정도 되어있는 상황이었다. 솔직히 말해 난 연구에 대한 취지 때문에 시작했다기보다 단순히 재밌어 보여서 시작했다. 

OS 커널을 좋아하게 된 이유는 실제 하드웨어들을 가상화 해서 사용자에게 보여주는 것이 너무 신기해서였다. 학부 OS 강의를 들었을 때 "사람은 하드웨어와 같은 기계를 직접 다루기 힘들기 때문에 커널이 이를 모두 숨기고 마치 여러 개의 프로세스가 가상 프로세서 위에서 동작하고 각자는 자기만의 가상 주소공간이 있고 디스크의 섹터가 아닌 파일을 다루게 된다."라는 말씀과 "컴퓨터 공학을 하는 사람이라면 꼭 커널 코드는 한번쯤 볼 필요가 있다" 라는 말씀을 듣고 새로운 세계로 뛰어들고 싶다는 욕구가 생겼었다. 그런데 OS가 진짜라고 믿고 있는 하드웨어가 실제로는 가상화 기술이 며느리도 모르게 추상화 시켜주고 있는 가상 하드웨어일 수 있다니... 소프트웨어 세상은 하드웨어 위에 여러 계층의 스택들이 존재하고 아래 스택은 윗 스택에게 사기를 치는 세상이구나. 효율성 때문에 나뉜 스택들이지만 그들이 치는 사기로 인해 발생하는 역효과들을 극복하는 것들이 연구의 주제가 되고 그것들은 종종 cross-layering, 즉 사기 그만 치고 좋은게 좋은거니 나랑 동맹이나 맺어서 좀 잘해보자. 라는 접근도 필요하게 된다.

가상화 연구는 수십년도 전에 이미 개념이 확립되고 소프트웨어/하드웨어에서 해야할 일들이 무엇인지 연구가 되어 있었다. 90년도 후반 스탠포드는 Disco라는 가상화 기술을 토대로 VMware를 만들고 다시금 가상화 연구가 활성화될 쯤 2003년도에 영국 캠브릿지 대학은 공개 소스 기반의 Xen을 세상에 내놓았다. 하지만 Xen은 획기적인 아이디어를 제시한 연구는 아니었다. 반가상화 기술을 사용했지만 전에 Denali등에서도 구현이 된 바 있고 (Xen처럼 완벽하진 않았지만) 실제로 Disco또한 OS에 수정을 가했다 (비록 성능보다도 수정이 불가피했기 때문이지만). 더욱이 Disco에서는 가상화의 핵심이 되는 메모리 가상화 기술, NUMA 가상화 지원이나 투명한 메모리 공유, CoW 기반의 디스크 등의 자원 최적화가 이미 이루어진 상태였다. 그럼에도 불구하고 Xen은 현재 서버에서 많이 쓰이고 있는 실제 리눅스를 수정하여 반가상화 기술을 통해 실제 우리가 쓰는 인텔 머신 환경에서 상당히 적은 오버헤드로 가상 머신들을 구동할 수 있는 첫번째 공개물이었다. 다시 돌아와서 나같은 신참내기 학생에게는 2003년도가 가상화 연구의 시작이라고 생각될 정도였다. 하지만 그것이 연구의 관점에서 가장 걸림돌이 되었다는 사실을 알게되었다. 

실제로 Xen이 공개되고 가상화 연구는 날개를 달았다. 공개되지 않고 내부적인 코어 기술들만 감질나게 논문으로 공개하는 VMware와는 달리 Xen은 모든 기술들을 개발한 족족 공개소스에 포함하고 연구논문을 발표했다. 안드로이드가 플랫폼을 오픈하면서 일어났던 일들처럼 역시 전세계의 시스템 개발자들이 냄새를 맡고 열광하며 달려들었다. 누가 돈주고 고용하지 않아도 필요한 기술들을 개발하고 실험해주는 사람들이 많아지면서 Xen은 많은 발전을 했다. 산업계에 비해 연구자들은 실제로 얼마나 가치가 있는지는 몰라도 흥미로운 시도를 해보기를 좋아하는데 그 것을 만족시켜주는 적격인 환경이 나타난것이다. 하지만 03년도 이후에 나온 가상화 논문들은 그 기술들의 참신함보다는 공개와 공유라는 측면으로 인정받을만한 논문들이 주를 이루었다. 그 이유는 어떤 분야나 그렇듯 연구와 실제의 차이 때문이다. 많은 기술들이 이미 Disco/VMware, L4커널 등 다른 그룹들에서 발표한 논문으로의 회귀이거나 개선을 추가하는 수준이었다.

위에서 말했듯 가상화 기술은 OS 마저도 하나의 프로세스처럼 만들어버리는 또 하나의 커널이다. 기술자들은 이 사실 자체로 매료가 될 지 모르지만, 실제로 OS 커널 연구를 수십년 해온 (교수님 뻘의) 연구자들의 입장으로는 단순히 "가상 머신 기술이라고 해서 OS 커널이랑 다를게 뭔데?" 라는 지겹고도 근본적으로 틀린말이 없는 질문에 맞닥뜨리게 된다. 위에서 말했던 03년도가 가상화 연구가 시작되는 시점으로 착각하는 신참내기 연구자로서는 그런 말을 들으면 특별히 할 수 있는 말이 없게 된다. 그래도 입이 달려서인지 할 수 있는 말은 "가... 가상화니까요.. 좀 다르지 않을까요" 혹은 "아...아무도 이걸 가상화에 적용은 안해봤어요.." 이다. 실제 2000년도 이후 많은 가상화 연구들이 80~90년도에 활발히 연구되었던 OS 연구에 비해 참신성이 떨어지는 것은 어쩔 수가 없었다. 또 다른 커널 레이어링에 불과하니까..OS가 여러 프로세스를 대상으로 했던 일들을 가상 머신 모니터가 OS를 대상으로 하면 되니까.. 난 사실 그 때까지만 해도 연구와 기술의 갭에 대해서 생각해본적이 별로 없었다.

사실 가상화 기술뿐만이 아니다. 80~90년도에 멀티프로세서를 연구 했던 사람들이 자주 하는 소리는 멀티코어라서 달라질 것이 뭐가 있냐는 거란다. 멀티코어는 멀티칩이 아니라 단일칩으로 여러개의 코어를 모았기 때문에 예전보다 지연시간도 짧아지고 한 칩으로 모여버렸으니 그 칩에 있는 자원들을 공유한다는 측면이 달라서 주로 그런 관점에서 연구가 많이 진행되었다. Xen과 마찬가지로 연구 관점에서 멀티코어 프로토타입을 내놓았던 스탠포드나 텍사스 오스틴 대학 등과 같은 그룹이 선구자로 인식되고 있다. 뭐 예상했듯이 난 멀티 프로세서 연구조차도 처음엔 멀티코어 연구가 시작이라고 착각해버렸다. 마찬가지로 멀티코어를 처음 공부하려고 마음 먹었을 때 ISCA등의 학회에 80년대부터 실린 멀티프로세서 연구들에 혀를 내두를수 밖에 없었다. 

다행히 지금은 가상화 기술이 내가 처음에 시작했을때 보다 엄청나게 보편화 되었다. 특히 클라우드 컴퓨팅이라는 환경이 각광받기 시작하면서 가상화 기술이 마치 OS 기술과 같이 당연한 기술로 여겨지는 모습들을 보고 있다. 연구 측면에서 조금 쉽게 말하면, 이제 이 연구가 예전에 OS가 했던거랑 다른게 뭐냐라는 질문에 "가상화에서 한것이 다른건데요" 라고 말하는것이 아주 헛소리만은 아닌 시대가 되긴 했다. 조금은 위안을 하지만 여전히 OS에서의 훌륭한 연구논문들을 읽고 있을 때면 아직 넓게 보는 관점이 많이 부족하고 생각보다 정말 많은 사람들이 비슷한 문제에 대해 수십년전에 이미 고민을 다했구나라는 사실에 숙연해진다. 어쩔 수 없이 그 사람들이 고민 했던 기술이 지금 이렇게 가상화가 일반화되고 멀티코어가 들어서있는 시대에 다른 것들이 무엇인지 아주 쪼잔한 레벨에서부터 조금 그럴듯할만한 것까지 찾을려고 노력하고 있는것이 사실이다. 

결론은 가상화 기술이 컴퓨팅의 새로운 패러다임이 아니라 단순히 OS 아래 한 겹의 OS가 더 자리 잡고 있는 계층적 OS 시스템이라는 것이고, 이 기술의 발전을 위해서는 기존에 이루어져왔던 OS 기술에 대한 포괄적인 이해가 필요하다는 것이다. 가상 머신 모니터가 가상 프로세서 위에 OS를 스케줄하고 OS는 그 안에서 다시 프로세스를 스케줄링 하는것은, 수십년 전부터 OS가 프로세스를 스케줄링 하면 프로세스가 안에서 스레드 스케줄링을 하는 모습과 다를바가 없다. (더 지독한것은 최근 IBM의 Turtles project에서 비교적 실용화할만한 결과를 내놓은 중첩 가상화 (nested virtualization) 기술을 통해 아주 무한대로 상위 소프트웨어 스택들에게 사기를 치고자 한다는 것이지만, 결국 근본은 다를 것이 없다.) 기술과 현실의 차이 때문에 우리가 사용하는 모든 OS에 OS 연구 기술이 들어간것이 아니다. 실제로 Linux에서 문제를 발견했고 그 해결방안까지 떠올랐을지라도 (충격적이지만) 10년도 전에 이미 제안된 기술인 것들도 많다. 가상화 기술에서 Live migration을 접했을 때 대단하다고 생각했지만 결국 process migration의 더 간단한 형태라는 것을 알았을 때 아 정말 나 초중고등학교 다닐때 심지어 나 태어나기 전에도 사람들은 정말 대단한 연구들을 많이 했구나 하고 느낀다. 

언젠가 교수님께서 이런 말씀을 하신적이 있다. "너네는 옛날 논문 잘 안 읽지.. 지금 너네들이 말한거 이런이런 연구에서 다 한거야.. 살펴봐". 실제로 우리들은 최신논문에 집착한다. 이제 2011년이 되어서 말인데 2008년도 논문만 되도 "흠 그건 나온지 꽤 되었네." 라고 한다. 그만큼 쏟아지는 논문이 많아서 최신 논문도 모두 다 체크 못하고 있는 것이 현실인데 2~30년전의 논문이라니 어떻게 접근해야할지 아찔하곤 했다. 요즘에는 최근 논문이라도 과거 관련 연구를 잘 정리해놓은 논문들을 읽으며 추가로 보면 좋을 것 같은 논문을 체크하곤 하는데 체크하다보면 "대체 이런 논문들은 언제 이렇게 다 나온거야" 싶다. 예전 것도 제대로 공부하지 못했으면서 최신 것에 novelty를 불어넣기란 정말 어려운 일이다. 연구에서 가장 필요한 사자성어라면 "온고지신"을 뽑겠다. 너무 당연한 사실이라고? 맞다. 당연한 사실을 깨닫는데 생각보다는 오랜 시간이 걸렸고, 안타까운것은 그 당연한 사실을 여전히 제대로 실천하지 못하고 있다는 사실이 부끄럽다.

항상 긴 글을 쓰면 결론 내는 것은 어렵더라. 그리고 항상 내가 글을 쓸 땐 결론은 뜬금없다. "정신과 시간의 방이 필요하다". 끝.
posted by shinyroot
2010. 12. 12. 13:25 Life/Monolog



미친듯이 햝는 토끼. 미동도 않다 하품하는 토끼. 
posted by shinyroot