AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

Gamelift에서 인스턴스의 EBS 볼륨 웜업

0

안녕하세요.

Gamelift에 서버를 올려 서비스를 준비중인데요. 플릿을 생성한 후 활성화된 인스턴스에서 실행되는 서버가 컨텐츠를 로딩하는데 너무 오랜 시간이 걸리는 것을 발견하였습니다. (정상적이라면 1초 남짓에 끝날 로딩이, 1분 가까이 걸립니다.) 특이하게도 해당 서버 프로세스가 종료된 후, 두번째부터 실행되는 프로세스는 로딩 속도가 정상화되었는데요.

aws 문서들을 뒤져보니 EBS 볼륨에 대한 웜업이 필요하다는 가이드를 찾을 수 있었습니다. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-initialize.html

실제로 생성된 인스턴스의 콘솔로 들어가서 dd 명령이나 fio 명령을 수행한 후, 서버를 실행하면 정상적인 로딩 속도를 보여주었습니다. 하지만 인스턴스가 생성될 때마다 수동으로 웜업을 할 수는 없으니 install.sh에 해당 명령을 추가해보았는데요. 플릿이 생성될 때의 스크립트 실행 로그를 보면, 이미 웜업이 된 것처럼 dd 명령이나 fio이 빠르게 수행되고요. 이후 생성된 인스턴스는 웜업이 안 된 것처럼 느린 속도를 동작하였습니다.

이를 해결할 방법이 있을까요? 아니면 제가 뭔가 잘못 알고 있는 부분이 있을까요?

질문됨 2년 전204회 조회
2개 답변
0
수락된 답변

install.sh 파일의 경우 초기 Activation 단계에서 관련된 스크립트를 실행하여 필요한 작업을 완료하게 됩니다. 따라서 새로운 인스턴스가 생성될 때마다 호출되는 형태의 스크립트는 아닙니다.

첫 프로세스가 웜업을 겸한다고 생각하고, ProcessReady 전에 관련 로딩을 모두 처리한다면, 사용자 입장에서는 특별히 문제가 될 부분이 없지 않을까 생각됩니다. 인스턴스가 실행되어 올라오는 속도가 3분이라고 하면 첫 프로세스가 뜨는 시간이 1분 걸리면 총 4분의 시간이 걸리는 것으로 이해가 되는데, 실제 프로덕션에서는 설정으로 충분히 회피할 수 있을 것으로 생각됩니다.

다만 ProcessReady 이후에 실제 Game Session 을 할당 받아 로딩을 할 때 시간이 걸리는 문제라면, 궁여지책으로 최초 프로세스 실행 시 ProcessReady 전에 더미로라도 로딩을 해봐야하는 상황이 되지 않을까 생각됩니다.

혹시 테스트를 진행하신다면 결과를 알려주실 수 있을까요?

AWS
답변함 2년 전
  • 안녕하세요, 답변 주셔서 감사합니다. 저희 서버 프로세스는 사용자가 접속하면서 요청한 맵에 따른 컨텐츠를 로드하게 됩니다. 그래서 ProcessReady 전에 요청 받을 수 있는 모든 맵을 로딩했다가 언로드하는 식으로, 해당 리소스가 있는 볼륨의 블럭을 웜업해봐야 할 것 같네요. 확인해보고 코멘트 또 남기도록 하겠습니다.

  • fio 명령으로 컨텐츠 파일들을 읽는 웜업용 쉘 스크립트를 만들어서, ProcessReady() 호출 전에 실행하도록 처리하였더니 원하는대로 동작하였습니다. 도움주셔서 감사합니다.

0

Gamelift에서 가능할지는 모르겠으나 빠른 스냅샷 복원 (FSR)을 사용할 수 있으면 가능할 것 같긴 합니다.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-fast-snapshot-restore.html https://aws.amazon.com/ko/blogs/korea/new-amazon-ebs-fast-snapshot-restore-fsr/

profile picture
답변함 2년 전
  • 답변 감사드립니다. 하지만 Gamelift에서는 FSR 기능을 사용할 수 없는 것 같습니다. ㅠㅠ

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인