Unity 검색

Unity 2021 LTS, 메모리 사용 방식 커스터마이즈 지원

2022년 4월 20일 엔진 & 플랫폼 | 6 분 소요
In-editor game footage with a giant frog
In-editor game footage with a giant frog
공유

Is this article helpful for you?

Thank you for your feedback!

유니티는 대규모 프로젝트를 진행하는 게임 스튜디오를 위해 Unity를 개선하는 것을 최우선으로 생각합니다. 이를 위한 노력의 일환으로, 이제 Unity 2021 LTS를 사용하여 메모리 할당 방식을 커스터마이즈할 수 있습니다.

이 블로그를 읽고 Unity에서 메모리 관리가 어떻게 이루어지는지, 메모리 할당과 관련된 성능 문제를 어떻게 진단하는지, 그리고 이러한 문제를 해결하기 위해 어떤 설정을 어떻게 사용할 수 있는지 알아보세요.

메모리 할당자 커스터마이징의 의미

Unity는 애플리케이션에서 메모리를 처리하기 위해 3개의 메모리 관리 레이어를 사용합니다.

  • 관리되는 메모리
  • C# 관리되지 않는 메모리
  • 네이티브 메모리

내부적으로 Unity에서는 다양한 방식으로 네이티브 메모리를 할당하며, 이를 할당자라고 합니다. 이 블로그에서는 다음 두 가지 방법을 중점적으로 다룹니다.

  • 버킷 할당자는 크기가 유사한 작은 할당 여러 개를 공유 메모리 블록으로 그룹화합니다. 일반적으로 매우 빠른 방식이며 널리 사용되지만, 하드 코딩된 제한으로 인해 일정 규모 이상으로 크기를 키울 수 없습니다.
  • 동적 힙 할당자는 범용 할당자로서 대부분의 Unity 네이티브 메모리 할당에 사용됩니다. 동적 힙 할당자는 다양한 케이스를 처리해야 하기 때문에 버킷 할당자보다 느립니다.

메모리 관리 시스템에서 새 메모리를 요청할 때는 먼저 크기를 확인해야 합니다. 크기가 특정 임계값보다 작으면 버킷 할당자에 메모리를 요청합니다. 버킷 할당자가 가득 차면 그 후에도 여전히 어딘가에서 메모리를 할당해야 하므로 이 소규모 할당은 동적 힙 할당자에서 가져옵니다. 동적 힙 할당자로 폴백할 경우 속도가 더 느려지며, 동적 힙에 소규모 할당을 많이 추가하면 동적 힙의 단편화가 심해질 수 있습니다.

메모리 커스터마이징이 Ori의 Nintendo Switch 포팅을 지원한 방법

2020년 여름, Unity는 Moon Studios가 Ori and the Will of the Wisp를 Nintendo Switch로 포팅하는 작업을 지원했습니다. 타겟 플랫폼으로 프로젝트를 확장하기 위해 어떻게 협력했는지 자세히 알아보려면 이 활용 사례를 읽어 보세요.

Moon Studios와 Unity Accelerate Solutions(이전 유니티 프로페셔널 서비스)는 함께 코드 섹션을 분석하여 파티클 시스템을 미세 조정하고 메모리 사용량을 줄일 수 있는 방법을 모색했습니다. 스튜디오 창립자인 Gennadiy Korol은 “Nintendo Switch에서 60fps를 목표로 한다면 시뮬레이션, 스트리밍, 렌더링, 그래픽스를 비롯해 모든 요소가 최적화되도록 해야 합니다”라고 말합니다.

Ori and the Will of the Wisps는 메모리 사용 측면에서 Nintendo Switch를 거의 한계까지 활용합니다. Accelerate Solutions 팀은 네이티브 메모리 할당에 초점을 맞추고 Moon Studios가 메모리 관리 레이어에서 최상의 결과를 얻을 수 있도록 지원했습니다. 

유니티 팀은 Moon Studios의 팀과 협력하여 여러 할당자의 할당 수를 측정했습니다. 또한 각 할당자로부터 할당된 메모리의 양을 확인했으며, 이를 통해 게임플레이를 시작하기도 전에 게임이 버킷 할당자 일부를 사용하고 있다는 사실을 알아냈습니다.  

버킷 할당자의 크기를 늘림으로써 게임을 플레이할 때 발생하는 소규모 할당을 위한 추가 공간을 확보했고, 버킷 할당자에서 이러한 소규모 블록을 할당한 덕분에 게임의 성능을 개선하고 60fps라는 목표를 달성할 수 있었습니다. 더 이상 동적 힙 할당자에서 소규모 할당을 가져오지 않기 때문에 동적 힙 할당자는 큰 메모리 블록만 할당했으며, 그 결과 할당자의 단편화가 줄어들고 게임을 더 오랫동안 원활하게 실행할 수 있게 되었습니다.  

Moon Studios와의 협업 이후 Accelerate Solutions 팀은 메모리 할당자 커스터마이징 기능을 개발한 최적화 팀과 협력했습니다. 이제 2021 LTS에서 이 기능을 사용할 수 있습니다.

메모리 설정 밸런싱 시작하기

2021 LTS 이전에는 Unity 사용자가 메모리 설정 밸런싱 기능을 사용할 수 없었지만, 이제 이 기능을 활용하여 각 게임에 맞는 최적의 메모리 활용도를 구현할 수 있습니다. 다양한 할당자가 사용하는 메모리의 양을 측정한 다음 게임에 맞게 메모리 크기를 커스터마이즈해 보세요. 기술 자료에서 자세한 내용을 확인하고, 메모리를 어떻게 커스터마이즈하고 있는지에 대한 경험을 공유해 주시기 바랍니다. Unity 포럼에 참여하여 프로젝트 성능 분석, 개선 사항, 사용 중 발견한 문제를 알려 주세요.

2022년 4월 20일 엔진 & 플랫폼 | 6 분 소요

Is this article helpful for you?

Thank you for your feedback!

관련 게시물