FastGame
이 프로젝트는 제가 재미와 학습 목적으로 시작한 것입니다. 이 프로그램은 사용자에게 게임 성능을 높일 수도 있고 아닐 수도 있는 작은 시스템 설정 조정(tweaks)을 적용할 수 있게 해줍니다. 커널 Process Events Connector를 사용하여 프로세스의 생성 및 소멸을 모니터링합니다. 커널이 최근에 생성된 프로세스의 PID 값을 우리에게 보내주면, 우리는 /proc/PID/comm 파일을 읽고 만약 프로세스 이름이 사용자 인터페이스에서 제공된 게임 실행 파일 이름과 일치하면 몇 가지 설정을 해당 게임 프로세스에 적용합니다.
애플리케이션 사용법
창을 열면 시스템 매개변수(system parameters)의 값이 표시됩니다. 이 시점은 프리셋 메뉴를 열고 현재 설정을 default 또는 원하는 이름의 프로필에 저장하기 좋은 때입니다. 이렇게 하면 테스트를 하는 동안 시스템 기본 설정으로 돌아가기 더 쉬워집니다.
매개변수 구성을 마친 후, 창 왼쪽 상단에 있는 Apply 버튼을 클릭합니다. 몇 초 후에 시스템에서 인증(authentication) 창이 표시되어야 합니다. 사용 가능한 설정 중 일부는 root 접근 권한으로만 변경할 수 있습니다. 인증 후 즉시 적용 가능한 설정들이 적용됩니다. 그리고 커널 Process Events Connector를 듣는 서버가 실행됩니다. 이 서버는 CPU 친화도(cpu affinity), 우선순위 스케줄러(priority scheduler) 등 게임 프로세스 설정을 적용합니다. 메인 창을 닫으면 자동으로 종료됩니다. 그러니 FastGame 창은 플레이하는 동안 열어두세요!
환경 변수(environment variables)를 적용하고 싶다면 fastgame_launcher로 게임을 실행해야 합니다. Steam에서는 시작 옵션에 fastgame_launcher %command%를 넣기만 하면 됩니다.
기능
우선, FastGame이 노출하는 설정들이 실제 게임 성능 향상을 보장하지는 않는다는 점을 염두에 두세요. FastGame은 이것들이 도움이 될 수 있는지 테스트해 볼 수 있는 쉬운 방법이라고 생각하세요. 그렇긴 하지만 현재 FastGame을 통해 구성할 수 있는 설정들은 다음과 같습니다:
- 환경 변수 설정
- 게임 실행 파일에 명령줄 인수 전달
- 게임 CPU 친화도 구성
- CPU 주파수 거버너 변경
- 프로세스 나이스니스 변경 (autogroup 지원)
- 깊은 C-States를 피하기 위해 /dev/cpu_dma_latency 사용
- 게임 프로세스에 SCHED_BATCH 우선순위 스케줄러 적용
- wineserver 프로세스에 SCHED_RR 우선순위 스케줄러 적용
- wineserver CPU 친화도 설정 변경
- 디스크 스케줄러 변경
- readahead 및 nr_requests 값 변경
- 디스크
add_random 비활성화
- 게임 프로세스에 실시간(Realtime) I/O 우선순위 적용
- amdgpu 성능 레벨, 전력 제한(power cap), IRQ 친화도 설정
- Nvidia powermize 및 클럭 오프셋 상태 설정
- 가상 메모리 캐시 압력 구성
- 가상 메모리 압축 적극성 구성
- 투명 거대 페이지(transparent hugepages) 구성
- 위의 모든 설정을 쉽게 로드할 수 있는 프리셋 파일로 저장
컴파일
cd fastgame
cmake -B build
cmake --build build