페이스북 '힙합VM', PHP 성능을 춤추게 하다

일반입력 :2011/12/16 11:06    수정: 2011/12/16 11:30

페이스북이 자사 웹서비스 운영 효율과 서버 처리 성능을 높이기 위해 만든 '힙합 가상 머신(VM)' 기술을 공개했다.

한 영국 매체는 지난 14일 페이스북 힙합VM이 PHP 속도를 끌어올리는 '알약'을 조제했다고 보도했다. 힙합VM은 '힙합포PHP' 기술을 적용해온 소프트웨어 개발환경에 더 빠른 실행 속도와 더 높은 개발 효율을 제공하기 위해 등장했다.

힙합포PHP는 페이스북이 웹애플리케이션용 언어인 PHP의 코드를 C++언어로 변환시켜 동작 성능을 높여 주는 기술로 지난해 나왔다.

이와 달리 힙합VM은 PHP 코드를 VM에서 실행되는 명령부호(바이트코드)로 바꾼다. 그리고 이를 프로세서가 알아듣는 기계언어(바이너리코드)로 보내 주는 저스트인타임(JIT) 컴파일러를 실행한다.

힙합VM 프로젝트에 참여한 개발자 제이슨 에반스는 페이스북은 최종적으로 자사 서비스에 쓰인 모든 PHP코드를 힙합VM으로 실행시킬 계획이라고 언급했다. 다만 구체적인 완료 시점을 언급하지 않았다.

그에 따르면 전체 페이스북 시스템에 적용하기 위해 추가적인 기술을 도입해야 할 것으로 보인다. 시스템 시작과 전 시스템에 걸친 통계 분석 결과를 산출하는데 걸리는 시간을 줄이기 위한 '온디스크 바이트코드' 형식을 생성하고 코드 번역기 성능을 더 안정화시켜야 하는 문제가 남았다는 설명이다.

■힙합 포 PHP?

페이스북이 힙합VM을 도입하기 전 준비 성격으로 추진해온 힙합포PHP는 페이스북 페이지 읽기 속도를 높이고 서버 1만대가 처리하는 연산 성능을 끌어올린 것으로 평가된다.

이를 위해 웹 환경을 위한 '동적 언어' PHP를 '타입 지정 언어' C++ 바꿔주는 것이다. '컴파일'을 거치는 C++ 언어의 실행 속도는 PHP같은 인터프리트 언어에 비해 빠른 것으로 알려졌다.

페이스북이 처한 문제는 힙합포PHP가 PHP를 '정적으로' 변환하기 때문에, '힙합인터프리터(hphpi)'라 불리는 언어처리기를 별도로 만들어야 했다는 점이다.

그런데 페이스북은 hphpi를 안정적으로 운용하려면 많은 노력이 필요하다는 점을 깨달았을 것이라고 개발자 에반스는 추정했다.

■페이스북의 고민

에반스에 따르면 실제 서비스되고 있는 페이스북 시스템에서 비교실험을 거친 결과, 초기 적용된 힙합VM의 바이트코드 언어처리기는 hphpi보다 1.6배 빨랐다.

hphpi를 써서 개발한 소프트웨어는 실제 페이스북 웹사이트에 올라가 서비스될 때 바이너리 형태로 최적화되도록 힙합컴파일러(hphpc)를 쓰게 되는데, PHP를 추상화된 계층형 문법(AST)으로 바꾸고 C++로 바꾸고 최종적으로 x64시스템 명령어로 바꾸는 여러 단계를 거친다. hphpi 성능은 hphpc에 비해 60% 수준이다.

관련기사

에반스는 많은 페이스북 개발자들이 매일 만드는 PHP코드는 끝없이 고치고 다시 읽어들이고 버그를 잡는 과정을 반복하게 된다며 hphpi에서 힙합VM 언어처리기로 바꿀 경우 페이지를 다시 읽는 시간이 8초에서 5초로 달라지면 생산성에 결정적인 차이를 만든다고 설명했다.

그는 힙합VM을 만드는 자신의 팀이 힙합VM과 hphpc 컴파일 바이너리간의 성능차를 몇개월 이내에 빠르게 줄여나갈 수 있을 것으로 기대중이라고 밝혔다. 힙합VM을 위한 동적 언어 번역기를 안정화하고 실제 서비스 공간인 프로덕션 환경에 완전히 적용시켜 비교 가능한 정적 분석 결과를 얻어낼 수 있을 것이라고 예고했다.