반응형

스팀덱 구매 후 설정 관련해서 찾아보면 #CryoByte33 의 #Steam-Deck-Utility 설정 부분이 빠지지 않고 나온다. 설정은 하라는데로 했고, 복잡한 원리는 사실, 게임이 잘 되기 때문에, 알고 싶은 생각은 없었다.  이 설정을 왜 하는지, 향상되는 이유가 무엇인지 궁금하지 않았다.

하지만.. 이 유틸리티의 기본적인 원리? 에 대해 질문을 받았으며, 이를 답변해 주기 위해, 우선 내가 먼저 이해를 해야 했고, 지루한? 유튜브(youtube) 비디오 내용을 시청 하였다. CryoByte33 의 깃허브(Github) 에 공유된 내용도 정리하여 확인 해 보았다.

*참고로 번역은 #ChatGpt (https://chat.openai.com/) 의 도움을 받았다.

 

GitHub - CryoByte33/steam-deck-utilities: A utility to improve performance and help manage storage on Steam Deck.

A utility to improve performance and help manage storage on Steam Deck. - GitHub - CryoByte33/steam-deck-utilities: A utility to improve performance and help manage storage on Steam Deck.

github.com

#cyobyte33 #steam-deck-utilities

- 요약

스팀덱은 알려진 바와 같이 CPU + GPU (그래픽카드) 가 합쳐진 APU 를 사용 하며, 16기가 램을 탑재하였다. 하지만 GPU 용 VRAM 이 별도로 없어서, 탑제된 16GB 의 시스템 램 (RAM) 을 공유 한다. 일 (Task)들을 처리 하면서, 필요하면 서로 램 공간을 사용하는 식으로 작동 되며, 특별히 Valve 에서 1GB 램을 GPU 전용으로 사전 설정하였다. 그래서 15기가의 램 공간이 CPU 와 GPU 간 공유하도록 설정이 되었는 상태이다.

CryoByte33 의 steam deck utilities 는 swap 과 swapiness 의 허용 사이즈 변경 하여, 1GB 의 GPU 용 램 사이즈를 4GB로 높이더라도, CPU 가 필요한 RAM 공간의 대체 공간을 ssd 에 16GB 정도로  설정하여, 보다 안정적으로 메모리 사용의 효율을 높여준다. 

CryoByte33 의 steam deck utilities 는 swap 과 swapiness 의 허용 사이즈 는 "recommended" 로 설정하면 되며, VRAM 사이즈 변경은 스팀덱 부팅 시 BIOS 집입하여 UMA Frame Buffer Size 를 1 - > 4로 변경을 해주면 된다.

다음은, CryoByte33 의 steam deck utilities 를 통해 어떤 부분이 변경이 되었고, 왜 되었으며, 어떻게 되었는지 CryoByte33 의 Github 내용을 ChatGPT 의 번역 기능의 도움을 받아 정리해 보았다.

- Swap Size

더보기

Swap Size 란?

Arch Wiki에 따르면 다음과 같습니다:

리눅스(Linux) 는 물리적인 RAM(랜덤 액세스 메모리 Random Access Memory)을 페이지(page) 라는 메모리(Memory) 덩어리(chunk) 로 나눕니다. 스와핑(swapping) 은 메모리의 한 페이지 가 물리적인 (physical) 메모리에서 사전 설정된 공간인 스왑 공간이라고 불리는 하드 디스크(hard Disk)로 복사되는 프로세스(Process)입니다. 이를 통해 해당 페이지의 메모리를 해제(free up)할 수 있습니다. 물리적인 메모리와 스왑 공간의 결합된 크기가 가용한 가상 메모리의 양입니다.

왜 변경하였나요?

스왑 크기를 늘리면 몇 가지 작업을 수행할 수 있습니다:

  • 메모리 압력을 크게 감소시킬 수 있습니다. 이렇게 하면 더 많은 캐시가 가능하며, 동시에 VRAM이 조금 더 확장될 수 있습니다.
  • 물리적인 메모리가 부족해지면 "긴급 메모리"의 저장 공간을 확보할 수 있습니다. 이렇게 하면 대량의 메모리 이전을 방지하고, 메모리 관리를 더 긴 시간 동안 분산시켜 지연 시점을 방지할 수 있습니다.

어떻게 변경하였나요?

sudo swapoff -a
sudo dd if=/dev/zero of=/home/swapfile bs=1G count=SIZE_IN_GB status=none
sudo chmod 0600 /home/swapfile
sudo mkswap /home/swapfile  
sudo swapon /home/swapfile

- Swappiness

더보기

Swappiness 란?

또한 Arch Wiki에 따르면 다음과 같습니다:

swappiness는 스왑 공간에 대한 커널(Kernel)의 선호 (혹은 회피) 정도 나타내는 sysctl 매개변수입니다. swappiness 값은 0부터 200까지 가질 수 있습니다 (Linux 5.8 미만의 경우 최대 100). 기본값은 60입니다. 낮은 값은 커널이 스왑을 피하도록하고, 높은 값은 커널이 스왑 공간을 사용하려고 시도하며, 100의 값은 IO 비용이 동등하다고 가정합니다. 대부분의 시스템에서 메모리가 충분한 경우 낮은 값이 IO 의 반응을 향상시키는 것으로 알려져 있습니다.

왜 변경하였나요?

기본적으로 스팀덱(SteamDeck)은 스왑니스(swappiness) 값이 매우 높은 100으로 설정되어 있어 많은 물리적 메모리가 남아 있을 때에도 데이터가 스왑으로 이동할 수 있습니다.

이는 두 가지 이유로 인해 문제가 될 수 있습니다:

  • 과도한 쓰기 작업은 드라이브 수명을 단축시킬 수 있습니다.
  • 스왑은 메모리보다 훨씬 느리며, 스왑을 사용하면 성능이 저하됩니다.

따라서, 스왑을 낮은 값으로 또는 제안된 값 1로 줄여서 다음과 같은 이점을 얻을 수 있습니다:

  • 스왑은 실제로 필요한 경우에만 마지막 순간에 사용되도록 보장합니다.
  • 드라이브의 건강 상태를 유지합니다.

어떻게 변경하였나요?

echo VALUE | sudo tee /proc/sys/vm/swappiness

- sysctl 매개 변수라는 스왑니스. sysctl 은 뭘까 궁금해서 찾아보았다.

더보기

sysctl은 리눅스 커널 매개변수를 동적으로 구성하고 관리하기 위한 유틸리티입니다. 이 도구를 사용하면 운영 체제의 커널 매개변수를 읽고 수정할 수 있습니다.

커널 매개변수는 운영 체제의 동작을 제어하는데 사용되는 변수입니다. 이러한 변수는 시스템의 다양한 측면을 조정하고 최적화하는 데 사용됩니다. 예를 들어, 스케줄링 동작, 메모리 관리, 네트워크 설정 등에 대한 커널 매개변수를 조정할 수 있습니다.

sysctl을 사용하면 커널 매개변수를 실시간으로 조정할 수 있으므로 시스템 동작을 변경하거나 성능을 향상시킬 수 있습니다. 이는 커널 매개변수를 재부팅 없이 조정하고 테스트할 수 있는 편리한 방법을 제공합니다.

sysctl은 주로 터미널 또는 명령줄 인터페이스를 통해 사용되며, 많은 리눅스 배포판에서 기본적으로 설치되어 있습니다.

- Transparent Hugepages

더보기

Transparent Hugepages 란?

트랜스페어런트(Transparent  hugepages)는 Emin이 작성한 훌륭한 설명에 따르면 다음과 같습니다:

CPU가 필요한 프로세스에 메모리를 할당할 때, 일반적으로 4KB 페이지 청크로 할당합니다. CPU의 MMU(메모리 관리 유닛)는 들어오는 I/O 요청에 따라 가상 메모리를 물리 메모리로 변환하기 위해 활동적으로 작동해야 합니다. 모든 4KB 페이지를 거치는 것은 자연스럽게 비용이 많이 드는 작업입니다. 다행히 CPU는 자체적인 TLB 캐시(번역 룩어사이드 버퍼)를 가지고 있어 가장 최근에 사용된 메모리를 캐싱하여 특정 메모리 주소에 액세스하는 데 필요한 시간을 줄일 수 있습니다.

왜 변경하였나요?

설명에서 언급한 대로, 페이지를 할당하는 것은 비용이 많이 듭니다. 트랜스페어런트(hugepages)는 할당과 조회가 훨씬 쉽고, 대량의 메모리를 처리할 때 발생하는 지연을 많이 줄여줍니다.

어떻게 변경하였나요?

echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

- Shared Memory in Transparent HugePages

더보기

Shared Memory in Transparent HugePages 란?

커널 문서에 따르면 다음과 같습니다:

마운트는 SysV SHM, memfd, 공유 익명 mmap (/dev/zero 또는 MAP_ANONYMOUS), GPU 드라이버의 DRM 객체, Ashmem에 사용됩니다.

이렇게 함으로써 이러한 요소들이 hugepages에 저장될 수 있게 됩니다.

왜 변경하였나요?

거대 페이지(hugepages)를 활성화하는 것과 같은 이유로 인해, 이는 메모리 관리에서 일부 지연 시간을 줄일 수 있습니다.

어떻게 변경하였나요?

echo advise | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled

- Compaction Proactiveness

더보기

Compaction Proactiveness 란?

이 기능은 Linux에서 "다운타임"을 감지할 때, 메모리 조각화를 예방차원에서 수행합니다.

왜 변경하였나요?

심지어 커널 문서에서도 이 기능이 전체 시스템 성능에 영향을 미친다고 인정하고 있습니다:

참고로, 컴팩션은 서로 다른 프로세스에 속한 페이지들이 이동함으로써 전체 시스템에 중대한 영향을 미칠 수 있으며, 예상치 못한 응용 프로그램에서 지연 증가를 초래할 수도 있습니다.

기본적으로 Linux는 컴팩션을 수행할 적절한 시기를 감지하려고 노력하지만, 게임 중에는 좋은 시기가 없으므로 비활성화하는 것이 가장 좋습니다.

어떻게 변경하였나요?

echo 0 | sudo tee /proc/sys/vm/compaction_proactiveness

- Hugepage Defragmentation

더보기

Hugepage Defragmentation란?

기능은 proactive compaction과 같은 기능이지만 hugepages에 대한 것입니다.

왜 변경하였나요?

proactive compaction을 비활성화하는 이유를 참조하세요.

어떻게 변경하였나요?

echo 0 | sudo tee /sys/kernel/mm/transparent_hugepage/khugepaged/defrag

- Page Lock Unfairness

더보기

Page Lock Unfairness란?

PLU (Page Lock Unfairness) 설정은 "허용 가능할 정도의 정상적인" 상태가 될 때까지, 프로세스가 페이지에 대한 잠금을 시도할 수 있는 횟수를 설정하며, 해당 프로세스에 페이지 액세스를 보장합니다. 자세한 내용은 커밋을 참조하십시오.

왜 변경하였나요?

불행히도, 이는 특히 게임에서 부정적인 부작용을 일으킬 수 있습니다. 반복적으로 대기하는 프로세스는 게임의 지연 문제를 뱔생 시키고, 일부 프로세스는 올바르지 않은 상태에서 휴면 상태로 진입 할 수 있습니다.

어떻게 변경하였나요?

echo 1 | sudo tee /proc/sys/vm/page_lock_unfairness

 

- 마치며

대부분의 내용이 리눅스 (Linux) 관련된 내용으로, 번역한 내용은 크게 와닿는 부분은 없지만, 이를 통해 스팀 OS 및 리눅스 에 대해 궁금한 점도 많아졌고, 그외에도 시스템 적인 부분이 명령어, 혹은 스크립트를 통해 변경이 가능하다는 것도 알게 되었다. 신기한 점은 이렇게 수정이 가능한 것을 알아냈다는 점이다. 내용에 나오는 Emin 이란 분이 이 리눅스 깊숙한 최적화에 큰 도움을 주신 분이라고 한다. 

Emin 의 Github

 

GitHub - CachyOS/linux-cachyos: Archlinux Kernel based on different schedulers and some other performance improvements.

Archlinux Kernel based on different schedulers and some other performance improvements. - GitHub - CachyOS/linux-cachyos: Archlinux Kernel based on different schedulers and some other performance i...

github.com

여하튼, 이 유틸리티를 설치하고, retrodeck 에서 스위치 에뮬레이션이 아주 안정적으로 구동이 되고 있으며, 테스트 해본 게임 중엔 The Division, Death Stranding, Tekken 7, Call of Duty 시리즈 등, 모두 안정적인 프레임 을 유지 했으며, 낮음 설정의 그래픽도, 상향 조정이 가능해질 만큼 게임 내 그래픽 퀄리티 와 성능이 좋아졌다.

이 유틸리티는 개인 적으로도, 그리고 많은 사람들이 강력 추천하는 프로그램이니, 스팀덱으로 게임 진행할 때 버벅거림을 경험한다면 설치해 보도록 한다.

반응형

+ Recent posts