
CPU / 메모리 / 저장장치 / GPU 등 컴퓨터 내부 부품 간 데이터를 주고받는 통로(경로)
데이터를 옮기는 일종의 도로
버스를 통해 명령 / 데이터 / 주소 등이 부품 사이를 오감
실체가 있음 : 메인보드 회로 안에 존재하는 신호선(하나의 선이 아니라 전송 목적에 따라 분리된 여러 선들로 구성)
속도 단위로는 MHz, GT/s (Giga Transfers per second)등이 이씀
1) 데이터 버스(Data Bus)
- 데이터를 실어 나르는 선(정수값, 문자, 메모리값)
-> 실시간 물리 연산(캐릭터 RagDoll / Niagara 이펙트 계산)이 많으면 실시간으로 많은 데이터를 주고받게 되므로 데이터 버스 사용량이 증가
->AI가 Tick마다 상태 갱신하고 접근할때도 내부적으로 연산 결과 데이터를 주고받음2) 주소 버스(Address Bus)
- 데이터를 어디로 보낼지 지정하는 선(RAM 주소)
-> 애니매이션에선 여러 바디 파츠에 대한 데이터 주소 접근 시에 활용3) 제어 버스(Control Bus)
- 읽쓰 여부 / 인터럽트 등 제어 신호 전달(읽쓰 신호 / IRQ(Interrupt Request, 인터럽트 요청))
-> InputAction등을 CPU가 제어 버스를 통해 수신
-> 오디오 재생 같은 명령도 제어 신호로 들어감데이터 흐름
CPU가 메모리에서 데이터를 읽어오라고 지시 -> 주소 버스로 대상 메모리 주소를 전송(내비) -> 제어 버스로 읽기 명령 전송(운전) -> 데이터 버스로 RAM에서 CPU로 값 전달(택배)
-> 게임 시작 시 Level을 로딩할때 이 3종의 버스가 동시에 사용됨
-> 특히 LevelStreaming등에서 해당 흐름이 발생하며, Asset 대량 로딩 중 Hitch(멈칫)가 생기면 이 흐름이 병목된 것이때 CPU는 명령만 내리고, 실제 데이터는 디스크 -> RAM -> VRAM -> GPU로 이동하면서 버스가 계속 사용됨
이 경로가 막히면 로딩이 느려지거나 화면이 멈칫하는 현상이 발생함
한번에 보낼 수 있는 데이터 양을 의미
-> VRAM이 많은 텍스처 데이터를 GPU로 옮길때 (4K 텍스쳐, LOD / HLOD 레벨 스트리밍등) 폭이 좁을 때 끊김발생
-> 렌더링 중 Lumen, Nanite 같은 기술은 초당 전송해야하는 데이터가 많아 버스 성능 중요
Nanite, ShadowDepths, Lumen : 각각 별도의 GPU 작업은 VRAM 대역폭 소모, PCIe 버스 폭 영향
TOTAL GPU : 시간이 높고 각 작업이 1~2ms씩 분산되면 버스가 한계에 도달했을 가능성 있음
- 버스가 너무 좁으면 RAM이 아무리 빨라고 전송 속도가 느려짐
- CPU는 처리 가능하지만 버스에서 대기하게 되면서 성능 저하 발생
-> 텍스처 스트리밍 메모리 사용량이나 GPU 작업량이 과도할 경우 버스를 통해 RAM -> VRAM 또는 CPU -> GPU로 ㅗ이동하는 데이터가 급격히 몰리면서 FPS는 낮아지고 STreaming Pool이 초과되는 현상이 나타날 수 있음
Streaming Pool = 800MB(100%) : VRAM에 실시간 스트리밍 데이터가 다 차서 병목이 생길 수있음
Wanted Mips와 Inflight Requests(GPU로 이동 중인 요청)도 높아져 있음 : 아직 GPU가 텍스처 다 못 받았다는 뜻
IO Bandwidth(입출력 대역폭) = 0MB/s : 현재 디스크 -> RAM 이동이 중단되었거나 막혀 있음
- 캐시는 CPU안에 있어서 버스를 타지 않기 때문에 훨씬 빠름