강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Frontal Achivment님의 프로필 이미지
Frontal Achivment

작성한 질문수

[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)

스킬과 이펙트

Job Scheduler - Cache locality

해결된 질문

작성

·

29

0

Hello, games are known from deep performance optimizations that going to thinking about getting data alligned in cache lines. Does Job Scheduler isnt killing it? Isnt this days more like One room = one thread and everything is flaten to array of structs / structs of arrays without lambdas, linq and events? Isnt context switching adding pauses even if there is no allocs because of locks?

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1) This is a different situation. Job scheduling is about managing tasks across cpu cores. When it comes to multi-threading, what you know as 'cache' is not that effective. Often you will have to abandon what little data is cached in the cpu, because that data cannot be read across different cores. The current problem is more about [managing and executing 1000000 tasks across different cores], rather than [how to manage 10000 tasks ASAP]

2) We only use locks to push/pop events from the queue. Mostly executing jobs will take 10000 more time than pushing/popping them into the queue. So it doesn't make that much difference and context switching is not a big issue. But you can still consider using lock-free queues if locking really bothers you.

0

안녕하세요, 인프런 AI 인턴입니다.

게임 개발에서 성능 최적화를 위해 데이터 캐싱과 관련된 개념인 ‘캐시 지역성’에 대한 질문을 주셨네요. Job Scheduler의 경우, 여러 개의 작업을 관리하고 실행할 수 있지만, 이로 인해 캐시 지역성을 살리기 어려운 부분이 있다는 점이 지적되었습니다.

  1. Job Scheduler와 캐시 지역성: Job Scheduler는 일반적으로 병렬 작업을 처리하여 성능을 높이려는 도구이지만, 그로 인해 데이터가 메모리에서 분산되어 캐시 지역성이 저하될 수 있습니다. 이는 성능에 영향을 미칠 수 있는 요소입니다. 최적화를 위해 데이터를 구조적으로 정리하여 캐시 효율성을 높일 수 있는 방안을 고려해볼 수 있습니다.

  2. Room = Thread 모델: 최근에는 한 방(Room)의 처리를 단일 쓰레드에서 담당하게 하고, 데이터 구조를 ‘구조체 배열(Array of Structs)‘이나 ‘배열의 구조체(Struct of Arrays)‘로 정리하여 효율성을 높이고 있습니다. 이는 데이터 접근 패턴을 최적화하여 캐시 사용을 극대화하기 위한 접근 방식입니다.

  3. 컨텍스트 스위칭과 잠금: 여러 쓰레드에서 lock을 사용할 경우, 컨텍스트 스위칭이 빈번해져 성능에 영향을 줄 수 있습니다. 이를 최소화하기 위해서는 lock을 적시에 사용하고, 가능한 한 최소화하는 방향으로 설계할 필요가 있습니다.

관련 질문 예시:
- Job System 돌아가는 방식에 대해 궁금합니다: Job System과 관련된 성능 최적화 및 데이터 구조에 대한 설명이 있는 질문입니다.
- JobQueue 관련해서 질문있습니다!: JobQueue와 관련된 병목 현상 해결에 대한 토의입니다.

이 정보를 통해 Job Scheduler 사용 시의 성능 최적화 접근 방식을 이해하는 데 도움이 되시길 바랍니다. 다른 궁금한 점이 있으시면 언제든지 질문해 주세요. 곧 지식공유자께서도 추가적인 답변을 제공해주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Frontal Achivment님의 프로필 이미지
Frontal Achivment

작성한 질문수

질문하기