Interix 대 Cygwin
저는 Windows에서 Cygwin 덕택을 톡톡히 보고 있습니다.
어찌하다 어제 밤에 Interix(Windows Service for Unix)에 손을 대게 됐는데요..
NT 커널에서 지원하는 POSIX 인터페이스를 직접 쓸 수 있다는 말에 흉내만 내는 Cygwin보다 훨씬 나을 것만 같다는 생각으로, 어떻게든 Interix 위에서 쓸만한 환경을 만들어보려고 했습니다. Interop Systems에서 필요한 패키지들을 유료:(로 가입한 사람들에 한해서 제공을 하고 있는 것 같았습니다. 섣불리 돈을 내기가 겁나서 좀 더 뒤적거려보니 NetBSD의 pkgsrc도 Interix를 지원하더군요! 근데 아직 시작 단계인지(1년은 넘은 것 같은데..) 필요한 녀석들 중에 바이너리로 미리 컴파일된게 별로 없더군요. 소스 컴파일은 지금 Interix를 쓰려는 노트북에서 하기엔 좀 부담스럽고..
패키지 몇몇을 열심히 컴파일해보다가 너무 느린 것 같아서 아주 유치한 성능 실험을 해봤습니다. 처음엔 한심하게 생긴 도스창에 Interix의 셸이 붙어있어서 입출력이 느리고 그게 전체적으로 발목을 잡나보다 했는데,, 실험 결과를 보니 정말 Interix가 Cygwin보다 느린게 아닌가라는 결론을 짓게 만들었습니다.
Cygwin에서는:
$ cat *.JPG | dd of=/dev/null 213244+144개의 레코드를 입력하였습니다 213316+1개의 레코드를 출력하였습니다 109217989 bytes (109 MB) copied, 12.68 seconds, 8.6 MB/s
Interix에서는:
bash-2.05b$ cat *.JPG | dd of=/dev/null 202580+1 records in 202580+1 records out 103721310 bytes transferred in 15 secs (6914754 bytes/sec)
Cygwin을 먼저 돌렸기 때문에 캐시 효과만 생각해도 Interix가 당연히 빨라야 할텐데 그렇지 않습니다. :( Interix에서 돌린 뒤에 Cygwin에서 다시 돌리면 게임오버입니다:
$ cat *.JPG | dd of=/dev/null 213316+1개의 레코드를 입력하였습니다 213316+1개의 레코드를 출력하였습니다 109217989 bytes (109 MB) copied, 6.776 seconds, 16.1 MB/s
Interix에서는 또 돌려봐도 똑같은 수치가 나옵니다. Cygwin에서 용량이 좀 더 큰 것은, 이름에 한글이 들어간 파일이 Interix에서는 *로 매칭이 안돼서 그렇습니다. dd, cat은 각각 Interix와 Cygwin에서 /bin에 기본으로 설치된 녀석입니다. 처음엔 gzip, bzip2도 사이에 넣고 했는데 좀 더 확실하게 시스템콜 쪽의 차이를 보고 싶어서 뺐습니다. gzip 따위를 넣어서 user 쪽 부하를 늘려도 차이는 더 벌어지기만 하는 것 같습니다. (Interix가 어떤 컴파일러로 만들었는지 모르겠지만, 이건 gcc와 cl 간의 차이일 수도 있으니..)
Interix(WSFU)가 POSIX를 지원하기는 하나, 그게 정말로 native한 것인지는 의문입니다. 그냥 Cygwin보다 더 아래쪽에서 emulation을 구현했다는 것 뿐일지도 모르겠습니다. Cygwin에서는 fork도 쓰레드를 이용한 꼼수로 구현하고(그래서 fork로 갈라져 내려간 쪽에서 하나라도 맛이 가면 아마도 그 프로세스 식구(?)들이 다 같이 뻗을 수도 있고..), 여러가지로 Windows 쪽 프로세스와의 통신(시그널을 보낸다든지 하는..)도 미흡하고 그렇지만, 그래도 레드햇에서 성능 쪽에 많은 신경을 기울여서 개선시킨게 아닌가 싶습니다. Interix가 pthread도 native하게 지원하고 어쩌구 하는데, 갑자기 전체적인 신뢰가 무너지는군요. 그냥 Cygwin보다 커널하고 더 많은 정보를 교환하는, 우리가 소스는 볼 수 없으니 뭐라고 할 수는 없지만, 그냥 MS/Interix에서 뚝딱 만든 low level emulation layer가 아닌가 싶습니다. Cygwin이 조금씩 더 진화를 한다면 머지않아 Interix보다 커널과 더 착- 달라붙어서 돌아가는 녀석이 될 수 있지 않을까 싶습니다. 아무튼 Cygwin 만세입니다- \-_-/ SFU를 어서 지워야겠습니다.
@ SFU 관련 자료들을 뒤적이다보니, X-Win32 LX라는 윈도우즈용 X서버가 있더군요. 주말이라 일을 안하는지 아직 라이센스 키 승인을 못받아서 써보진 못했지만, GLX도 지원한다는 것 같고.. Exceed나 Xmanager 등 다른 것들에 비해서 성능이며 기능이 괜찮은 모양입니다. 원래는 X-Win32도 파는 것 같은데, 로컬에서 띄운 X만 되는 LX는 무료라고 합니다. 근데 ssh로 터널링해서 쓰면 항상 로컬에서 띄울 수 있지 않나 싶습니다만.. -_-; 지금은 Cygwin/X를 쓰고 있는데, 라이센스 키가 도착하는대로 써보고 여차하면 바꿔봐야겠습니다. 꿩대신 닭으로, Interix 대신 X 서버만 건지게 생겼네요. :lol: