가상머신/Docker를 즐겨쓴다면..

근 2년간을 macOS에서 docker desktop과 parallels/virtualbox 마지막엔 qemu로 VM을 열심히 써왔던 것 같다. 윈도우즈 VM이거나 linux docker container였으니까 MacOS에서 두 개의 VM을 굴렸던 것이라고 보면 된다.

왜 이런 바보같은 짓을 할 수 밖에 없었냐면 내가 주로 사용하는 OS가 macOS였기 때문인데, 그보다 macOS 위에서 VM을 굴리는 것이 그다지 성능 손실이 일어나지 않겠거니 해서였다고 봐야할 것 같다. 아니 애초에 MacOS에서 docker desktop과 VM을 쓴 것이 실험적인 것이었는데 의외로 너무 잘 돌아가다보니 쓸만해 매일 매일 쓰다보니 진정 ‘뭣이 중헌디?’를 잊어버렸기 때문이지 싶다.

같은 하드웨어에 linux를 host OS로 전환하기 전까진.

그냥 linux로 넘어오고 나니 전혀 다른 세상이 펼쳐진다. MacOS를 포기하면 세상이 이렇게 편해지는 것을. 사실 이것은 같은 하드웨어에서 geekbench를 OS 별로 돌려봐도 답이 나온다. Linux에서 geekbench score가 가장 좋다. MacOS에서 가장 낮고.

Linux에서 돌아가는 VM은 모두 쾌속이다. VM만 쾌속인가 모든 OS 서비스가 일사천리로 돌아가기 때문에 답답한 구석이 전혀 없다. MacOS를 VM으로 돌려도 빠르긴 한데 그래픽 가속 기능을 사용해서 VM에서 부드럽지 못할 뿐 이것만 빼면 MacOS에서 application의 알짜 속도는 꽤 빠르다. MacOS를 그래서 더 VM으로 잘 안돌리는 이유이긴 한데, 이것도 드라이버 레벨에서 언젠간 극복가능하지 싶다. 무슨 말이냐고? 그래픽 가속 기능을 사용하는 OS도 VM으로 돌아갈 때 host GPU의 도움을 받아 빠르게 실행하는 방법이 생기지 않을까 하는 것이다. PCI passthru를 쓰지 않더라도 말이다.

어차피 VM으로 게임을 하지 않을 사람들에겐 그래픽 가속 기능이란 거 OS가 사용하는 것은 그다지 아주 빠릿해야 할 필요가 없으니까 말이다.

요약하면

추가로 MacOS에서 VM을 쓰면, 잘은 알 수 없으나 file system 변환을 위한 layer가 하나 돌아가는 것 같은데, 이것 때문에 몹시 성능 저하가 일어난다.

무슨 말이냐고? VM이 VM 자체의 가상 파일 시스템 (qcow2 같은) 을 쓰는데, 이것을 access 할 때도 뭔가 모를 성능 저하가 발생하고 더 큰 것은 host의 file system에서 읽고 쓰고 할 때 막대한 성능저하가 일어나는 것으로 보인다. 특허 Docker.

그래서 docker desktop보단 qemu로 linux를 올리고 그 안에서 dockerd를 띄우고 macOS에 docker client를 설치해서 불러다 쓰는게 좀 더 낫지 않을까 한다.

요사이 MacOS docker desktop은 제법 수익을 기대하고 있는지 뭔가 잦은 업데를 요구하고 주저리 주저리 팝업되는 게 많아서 짜증난다. 어차피 MacOS에서는 linux VM은 돌아야 docker를 실행할 수 있고 그럴 바에야 그것이 qemu면 차라리 빠르기라도 하니까 host의 filesystem을 nfs로 내보내고 그것을 docker를 돌리는 VM에서 받아서 작업할 수 있게 하면 차라리 성능이 조금이라도 나아진다. 또 qemu가 linux를 boot할 때 걸리는 시간이 docker가 VM을 올리는 것 보다 빠르다.

귀찮으면 docker desktop이 답인데, 매일 매일 쓴다고 치면 qemu 쪽이 낫다는 얘기다. 어차피 그 과정을 모두 처음부터 script로 만들어놓고 자동화하면 수고할 것도 없다.

그런데 그 끝판왕은 그냥 linux다. MacOS를 정 써야 된다면 맥미니나 맥북에어를 하나 더해서 그 자체는 터미널 화하든가 client로 만들어버리면 된다. 무슨 말이냐고? 인텔 맥에 VM이나 Docker를 돌리는 것은 바보같은 일이고, 해킨을 해서 MacOS와 다른 VM을 공존시키는 것은, 더구나 Ryzen Hackintosh를 하면서 VM을 굴리는 짓(=내가 하던 짓) 더 바보같은 짓이다. 어찌보면 이게 시간을 절약할 수 있는 일이지 싶지만 개개의 VM에서 까먹는 시간이 만만치 않기 때문에 이게 어쩌다 한두번, 아니면 한주에 한 두번 쓰는 게 아니라 매일 매일이 되다보면 엄청난 시간 손실을 가져온다.

이를테면 MacOS/Hackintosh에서 VM으로 40초 걸릴 일이면 Native 혹은 Linux VM으로 가면 20초에 다 할 수 있고 (단순히 CPU 속도/VM처리 문제가 아니다 파일 시스템 가상화/파일 시스템간 변환 때문에 들어가는 시간을 포함시켜야 한다) Linux VM인 경우에 windows VM을 다루는 것도 뛰어나기 때문에 여기서도 막대한 시간 절감을 가져온다. 이게 내가 하는 일에서 차지하는 빈도가 어느 정도냐에 따라서 결정난다고 봐야 한다.

Windows상에서 WSL을 굴리는 게 어떠냐는 질문을 할 수도 있다. 즉 Windows를 host OS로 하고 linux를 WSL로 하면 어떠냐는 질문이다. WSL로 많은 linux container를 쓰기도 뭐하고 docker처럼 깔끔하게 떨어지지도 않기에 (원하는 container를 적시 적기에 가져다 쓸 수 없음) WSL보다는 windows용 docker desktop이 낫지 싶지만 docker desktop이 최근에 배보다 배꼽이 큰 지경이 되었기에, WSL2에서 dockerd를 돌리고 docker client도 돌려야 하는 일이 발생하게 된다.

이 역시도 이미 (내가 다 해봐서 아는데!) 해본 경험으로 따르면 내가 host OS에서 windows game을 돌리는 입장에선 의미가 있다. 또 MacOS를 쓸 일 없다면 이게 방법이지 싶기도 하다. qemu를 돌리는 것보단 WSL2가 낫고 당연히 윈도우즈 전용 조립컴에서는 모든 드라이버들이 윈도우즈로 최적화되어있어서 반응이 대단히 빠르다. 다만 WSL2와 windows filesystem을 연결시켜서 작업해야 할 때 뭔가 성능 저하가 일어나고 있는 것은 확연히 보여진다. 그래봐야 MacOS에서 VM들을 돌릴 때에 비하면 미미하지만.

그래도 또 아쉬운 것은 짜증나는 윈도우즈의 파일시스템 컨벤션이다. 이를테면 유닉스 시스템과 다르게 하기 위해서 백슬래쉬를 사용하는 것이나 드라이브 표시자를 앞에붙이는 일이나. 이 모든 것들이 이렇게 linux가 압도하는 세상에 와서는 모두 독이 되고 있는 것이다. 무슨 소리냐고? 이 세상은 윈도우즈 혼자 존재하는 세상이 아니고 사실 컴퓨팅 세계에서는 유닉스의 파일 시스템 컨벤션을 쓰는 것이 대세다 (리눅스는 말할 것도 없고 MacOS도 그러하고 iOS도 그러하고 Android도 그러하다). 쉽게 말해서 Windows 혼자 삐딱선을 타고 있는데, 이젠 더 이상 혼자 삐딱선을 타기가 뭐하니 애매 모호한 입장을 취하고 있다. OS가 판갈이를 할 때마다 점점 더 애매한 입장을 취하고 있다. Windows 11에 와서는 더더욱 unix 계열에 가까와져가고 있지만 그동안의 곤조를 버릴 수 없으니 애매한 상태로 그냥 있는 것이다.

사실 Windows 11에 와서는 과거의 구태를 많이 벗어던질 줄 알았는데 차마 그러진 못했다 여전히. 인텔 CPU 성능이 AMD에 밀리고 Apple에 빌려서 윈도우즈-인텔 저변이 무너지면 컴퓨팅하긴 훨씬 편한 세상이 오지 않을까 하는 생각이 있다. 지금이라도 MSFT가 정신차리지 싶지 해도 여전히 정신 못차고 있으니 그런 면에 있어선 인텔이나 매한가지구나 싶다.