카라멜
한마포 개발 담당자
LemonCaramel 7dbb669b758d4e03a10ddbbf6a9a2258
플랫폼 | 자바 에디션 (JE) |
---|---|
출처 | https://discord.com/channels/28958790905...1222614037 |
( 본문과 관련없는 청크 경계 이미지 )
지난 9월 26일, 페이퍼 코어 개발을 이끌고 있는 PaperMC에서 마인크래프트의 청크 시스템을 재작성한 패치를 병합하였습니다.
이번 패치는 페이퍼 포크인 튜이니티 제작자이면서 현재는 PaperMC 소속으로 활동하고 있는 Spottedleaf 님의 작품으로,
Spottedleaf 님은 이전에 DataConverter(DFU 시스템 재작성)와 Starlight(조명 엔진 재작성) 같이 마인크래프트에서
비효율적인 영역을 완전히 다시 작성해 높은 성능을 낼 수 있는 모드 및 패치도 제작했던 적이 있습니다.
이번에는 더 나아가 청크 시스템을 다시 작성하였습니다.
우선, 기존 청크 시스템과 성능 차이가 얼마나 나는지 확인하기 위해 영상으로 준비해보았습니다.
( 좌: 기존 청크 시스템 | 우: 새 청크 시스템 / 테스트는 양쪽 모두 동일한 설정으로 청크를 새로 생성합니다 )
다음은 청크 시스템 재작성으로 해결된 "이전 시스템"의 문제 목록입니다.
- 월드 생성이 CPU 코어에 따라 효과적으로 확장되지 않는 점
- 청크 상태(state)를 스케줄링하고 유지하기 위해 메인 스레드에 의존하여, 낮은 TPS에서 청크 로드/생성 속도를 떨어뜨리는 점
- 메인 스레드를 차단하는 청크 생성/로드 콜의 신뢰할 수 없는 우선순위 지정
- 종료 로직은 모든 청크가 언로드될 때까지 기다려야 하므로 완전히 신뢰할 수 없는 점
- 엔티티 데이터를 저장하지 않고 청크 데이터만 저장할 수 있어 데이터 저장이 일관되지 않았던 점
(서버가 비정상적으로 종료된 경우, 청크와 엔티티의 비동기화 문제가 발생) - 엔티티가 청크와 함께 로드되지 않았던 문제
이번에 "플레이어 청크 스케줄러"를 비동기로 전환하는 패치 또한 추가될 예정이었으나, 다음 개발 분기로 지연되었습니다.
이번 패치는 몇 달간 여러 서버 운영자분들이 테스트해주었지만, 사용 중에 문제가 발생할 수도 있습니다.
잠재적으로 발견되지 않은 버그를 가지고 있기에 업데이트하기 전에 서버를 꼭 백업해두시기 바랍니다.
페이퍼 1.19.2 #174 빌드부터 패치가 적용되며, 자세한 설정은 여기에서 확인할 수 있습니다.
데드풀리오
2022.09.30잘 정리된 정보 감삼다~
이치즈
2022.09.30오... paper에서 포크된 버전인 purpur 버킷도 적용되는건가요? 청크 로딩으로 인해 발생하는 서버렉이 줄어들겠네요!
프리루트
2022.09.30넵, 퍼퍼도 공식 디스코드에 #1791 빌드부터 적용시킨다고 공지를 띄웠었네요!