자연스레 내 관심은 얼마나 저렴하게 스타듀밸리 서버를 구동할 수 있느냐로 쏠렸다. GCP는 일단 배제. 아직 익숙하지 않다.
AWS와 Azure 모두 저렴한 가격에 1코어 1GB VM을 제공하고 있다. 요금제를 전략적으로 선택하고 잘 아껴쓴다는 가정하에 1달에 채 1달러가 안되는 가격으로 VM을 이용할 수 있다. 이 1코어 1GB VM으로 스타듀밸리를 구동할 수 있을까? 심지어는 GPU도 없다!
t2.micro는 AWS 프리 티어로 사용할 수 있는 VM이다. 한달동안 750시간 무료이기 때문에 사실상 VM 1개는 공짜라고 보면 된다.
1달은
24 * 31 = 744(시간)
이다.
고주파수 인텔 Xeon 프로세서 1코어에 1GB 램. 네트워크 성능은 Low to Moderate.
여기다가 스타듀밸리를 깔아보기로 했다.
GPU도 없는데 어떻게 VNC를 연단 말인가? 문득 걱정이 되었었다. 그래픽 카드 없이 GUI를 뽑아낸다는게... 이해가 되질 않았다.
우선 익숙한 우분투를 사용했다. t2.micro에 Ubuntu 20.04 이미지를 선택.
이런 가이드, 저런 가이드, 다 검색해보며 적용해봤는데 딱히 소득이 없었다.🙄
18.04는 꽤 오래된(많이 쓰인) 버전임에도 딱히 잘 되진 않았다. 내가 우분투 서버용 가이드를 본건지, 우분투 데스크톱용 가이드를 본건지, 잘 분간이 안되었다. 글을 쓰는 지금 다시 살펴보니 내가 운이 없었던듯...😯
이번엔 AWS에서 주력으로 밀고있는 Amazon Linux 2다. yum
을 사용하는걸로 보아 레드햇-페도라 기반인 것 같다.
CentOS를 쓸 때 추가 패키지 저장소로
epel
이라는 게 있는줄 몰라서 많이 힘들었던 적이 있다. 여러분은 꼭 알아두자.
여기는 아예 AWS에서 가이드를 제공한다. 여러분이 잠시 헤멜 만한 것을 살펴보자면,
- 로컬 컴퓨터에서 로컬 포트 5901/TCP(VNC)의 모든 트래픽을 인스턴스의 VNC 서버로 전달하는 터널을 생성하는 동안 SSH를 사용하여 인스턴스에 연결합니다.
SSH를 사용하여 인스턴스에 연결합니다.
-L
파라미터를 사용하여 포트 전달을 활성화합니다.PEM_FILE
을 프라이빗 키 경로로 바꿉니다.INSTANCE_IP
를 인스턴스의 퍼블릭 IP 또는 프라이빗 IP로 적절하게 바꿉니다.
ssh -L 5901:localhost:5901 -i PEM_FILE ec2-user@INSTANCE_IP
연결을 엽니다.
가이드에서 설치하는 tigervnc-server
는 기본적으로 5901
포트를 사용한다. 그래서 5901
포트를 열어주는 것이다. (사실 대부분의 VNC 서버가 5900
번대 포트를 사용한다) PEM_FILE
은 여러분이 EC2 인스턴스를 생성할 때 지정한 키 파일이다. INSTANCE_IP
에는 EC2 인스턴스의 퍼블릭 IP주소 또는 도메인을 입력하면 된다.
ssh -L 5901:localhost:5901 -i PEM_FILE ec2-user@INSTANCE_IP
을 입력하면 보안 그룹 설정에 5901
포트가 허용으로 추가된다.
가이드대로 하니 VNC 연결이 잘 되었다. 어떻게 GPU도 없는데 GUI 화면을 출력할 수 있을까? 정말 궁금하다. 그나저나 게임은 잘 돌아갈까?
이제 Steam을 설치할 차례다. 사실 내가 처음에 Ubuntu를 선택한건 Steam이 deb
패키지만 제공하기 때문이기도 했다.
음, 도대체 yum
을 쓰는 리눅스에선 어떻게 Steam을 설치할 수 있을까?
Flatpak은 Snap, AppImage같이 파일 하나로 모든 리눅스 배포판에서 앱 설치/실행을 가능하게 하는 패키지 형식이다. 캐노니컬이 밀어주는 Snap에 비해 패키지 종류가 그리 많지는 않지만, Flatpak에는 Snap엔 없는 Steam이 있다.😀
설치 방법을 알아보자.
$ sudo yum install flatpak
으로 Flatpak을 설치한다. 재부팅을 해줘도 좋다.
$ wget https://dl.flathub.org/repo/appstream/com.valvesoftware.Steam.flatpakref
Steam 설치 이미지를 받는다. (정확히 말해서 설치 이미지라기보단, 설치를 위한 참조 데이터를 담은 파일이다. 그래서 용량이 그리 크지 않다)
$ flatpak install com.valvesoftware.Steam.flatpakref
Steam을 설치한다. 이후 깔끔하게 재부팅을 해도 좋다.
이제 VNC로 원격 접속하여 Steam에 로그인한 뒤, 스타듀밸리를 설치한다.🙂
실행해보자.
t2.micro 인스턴스라면 대부분 실행 자체는 되지만 아주 느릴 것이다. 가장 큰 이유라면 램 부족.
$ sar -r 2 Linux 4.14.232-176.381.amzn2.x86_64 06/04/2021 _x86_64_ (1 CPU) 02:15:19 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 02:15:21 AM 62576 944320 93.79 0 144776 3570940 354.65 736540 122816 4 02:15:23 AM 63012 943884 93.74 0 143936 3570940 354.65 739408 119080 4 02:15:25 AM 62908 943988 93.75 0 144488 3570940 354.65 739792 119264 4 02:15:27 AM 62784 944112 93.76 0 144488 3570940 354.65 739816 119240 0 02:15:29 AM 72376 934520 92.81 0 134712 3570940 354.65 735436 113824 0 ^C 02:15:30 AM 72484 934412 92.80 0 134712 3570940 354.65 735436 113824 0 Average: 66023 940873 93.44 0 141185 3570940 354.65 737738 118008 2
램 사용량을 확인해보면 거의 100% 가까이 치솟는다. 그래도 GPU 없이 구동된다는 것만으로도 감지덕지다.
$ sar -r 2 Linux 4.14.232-176.381.amzn2.x86_64 (ip-172-31-11-199.ap-northeast-2.compute.internal) 06/04/2021 _x86_64_ (1 CPU) 03:30:40 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 03:30:42 AM 111588 895308 88.92 0 328888 2731508 271.28 578832 196388 4 03:30:44 AM 111588 895308 88.92 0 328888 2731508 271.28 578832 196388 4 03:30:46 AM 111588 895308 88.92 0 328888 2731508 271.28 578832 196388 4 03:30:48 AM 111588 895308 88.92 0 328888 2731508 271.28 578832 196388 4 ^C 03:30:49 AM 111588 895308 88.92 0 328888 2731508 271.28 578832 196388 4 Average: 111588 895308 88.92 0 328888 2731508 271.28 578832 196388 4
사실 아이들 상태에서도 램 사용량이 심상치 않았다. %commit
값도 예사롭지 않다. 뭔가 실행이라도 하면 300%를 넘길 것이다.
서버 스펙을 조금만 올려보자.
T3a 인스턴스는 버스트 가능한 차세대 범용 인스턴스 유형으로, 기본 수준의 CPU 성능과 함께, 필요할 때는 언제든지 CPU 사용량을 버스트할 수 있는 기능을 제공합니다. T3a 인스턴스는 컴퓨팅, 메모리 및 네트워크 리소스를 균형 있게 제공하며 사용 중에 일시적인 스파이크를 경험하는 중간 정도의 CPU 사용량을 가진 애플리케이션에 적합하게 설계되었습니다. T3a 인스턴스는 동급의 인스턴스 유형에 비해 최대 10%의 비용 절감 효과가 있습니다.
T3a 인스턴스는 워크로드가 기본 임계값 이하로 작동하는 동안 CPU 크레딧을 축적합니다. 필요한 경우 획득한 각 CPU 크레딧은 T3a 인스턴스가 1분 동안 CPU 코어의 전체 성능을 사용해 순간 확장할 수 있는 기회를 제공합니다. T3a 인스턴스는 무제한 모드에서 필요할 때는 언제든지 확장할 수 있습니다.
기능:
- 2.5GHz의 올코어 터보 클록 속도를 지원하는 AMD EPYC 7000 시리즈 프로세서
- CPU 크레딧에 의해 성능 순간 확장이 가능한 CPU 및 일관적인 기본 수준의 성능 제공
- 기본적으로 피크 기간 중에 성능을 보장하는 무제한 모드와 예측 가능한 월별 비용을 지원하는 표준 모드
- AWS Nitro System 기반의 전용 하드웨어 및 경량 하이퍼바이저 조합
t3a.small은 AMD EPYC 7000 시리즈 프로세서 2단위(1C 2T, 1코어 2스레드), 2GB RAM, (up to) 5Gbps 네트워크를 갖춘 인스턴스다. 여기서부터는 프리티어가 적용되지 않는다. 그러니깐 t2.micro와 달리 유료다! 그래도 small 인스턴스라 사양이 낮아 가격이 저렴한 편이다. 가장 평범한 온디맨드 요금제 기준으로 0.026 USD/시간 (약 29원)이니 하루 가동시간을 조정해보면 (새벽, 아침 시간대엔 아예 끈다던지...) 꽤 괜찮을 것이다.
t2.micro에서 코어 하나가 늘고 램이 2GB가 된 t3a.small의 성능은 어떨까. VNC 연결과 스타듀밸리 구동까지 확인이 된 Amazon Linux 2를 다시 설치해봤다.
용량이 부족하다. EBS 스토리지를 8GB로 할당했는데. 나중에 안 쓰는 패키지를 지워야겠다.
$ sar -r 2 Linux 4.14.232-176.381.amzn2.x86_64 06/04/2021 _x86_64_ (2 CPU) 02:31:34 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 02:31:36 AM 1429000 579108 28.84 2088 326088 1272040 63.35 280032 210656 40 02:31:38 AM 1429000 579108 28.84 2088 326088 1272040 63.35 279948 210656 40 02:31:40 AM 1429000 579108 28.84 2088 326088 1272040 63.35 280040 210656 40 02:31:42 AM 1429000 579108 28.84 2088 326088 1272040 63.35 280092 210656 36 ^C 02:31:43 AM 1429000 579108 28.84 2088 326088 1272040 63.35 280092 210656 36 Average: 1429000 579108 28.84 2088 326088 1272040 63.35 280041 210656 38
아이들 생태에서 램 사용량은 무척 안정적이다. 참고로 스타듀밸리 요구 사양이 램 2GB이다. 이 정도면 괜찮지 않을까?
실행해보자.
딜레이가 좀 있지만 그럭저럭 할 만하다. 이 정도라면 멀티플레이 서버로 돌려도 딱히 문제가 없을 것 같다.
$ sar -r 2 Linux 4.14.232-176.381.amzn2.x86_64 06/04/2021 _x86_64_ (2 CPU) 02:36:06 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 02:36:08 AM 73264 1934844 96.35 1060 1034096 4056084 201.99 1183260 614752 2104 02:36:10 AM 99428 1908680 95.05 1060 1034096 4044552 201.41 1157172 614756 2104 02:36:12 AM 99756 1908352 95.03 1060 1034104 4044552 201.41 1156448 614760 488 02:36:14 AM 100032 1908076 95.02 1060 1034180 4044552 201.41 1156444 614784 488 02:36:16 AM 97676 1910432 95.14 1060 1034420 4044552 201.41 1158716 614836 396 02:36:18 AM 97240 1910868 95.16 1060 1034424 4044552 201.41 1158684 614844 364
메모리 사용량은 여전히 90%대를 찍고 있다. 흥미로운 점은 t2.micro에서 %commit
이 354%였던 것이 201%로 감소했다는 것이다. 메모리 할당에 약간의 여유가 더 생겼다.
%commit
이 무엇인가?여기를 참고하자.
What Does
%commit
Mean?
%commit
is the pct of RAM the kernel has committed to processes. Processes can request memory by using malloc().In the default kernel configuration (
vm.overcommit_memory=0
, verified withsysctl vm.overcommit_memory
), the kernel can commit more memory to processes than the system actually has.This is because it won’t actually allocate the memory to the process until the process writes to that region of memory.
So, it’s not uncommon to see
%commit
in sar over 100%.In the case below, there were values of 300-400 %commit. This means that if all processes requesting memory all touch the memory the kernel says they can, you’d run out of memory. But it doesn’t say much about how much actual memory is being used.
t3a.small은 t2.micro보다 훨씬 나은 성능을 보여줬다. 이유는 아래와 같다.
왜 VNC는 GPU가 없는 컴퓨터에서도 가동되는가?
스타듀밸리가 EC2 인스턴스 위에서 잘 돌아가는 것을 확인했다. 이제 EC2 인스턴스 위의 유령 유저와 클라이언트 유저가 어떻게 소통할지를 고민해볼 차례다.
상태 관리용 웹페이지도 만들어야 하고, 이건 가볍게 Node.js로 웹서버까지 한 번에 처리해버리는 게 알맞겠다. 용량 다이어트도 좀 해야한다. 난 8GB, 아니 6GB 안에서 모든 걸 처리하고 싶다. 서버비 아껴야지.