미니 고딩이 분석한 삼성의 Exynos 최적화
- 난반대일새
- 조회 수 1640
- 2024.04.07. 13:36
GKI 2.0 기준으로 설명합니다
GKI 커널은 커널 자체 부팅 절차 후, vendor_boot를 로드합니다.
vendor_boot의 ramdisk는 제조사 커널 모듈을 로드합니다, 인풋부스터와 GPU 커널과 같은 모듈을 '커널 모듈'이라고 합니다.
이러한 커널모듈은 하드웨어를 커널과 시스템에 인지시키는 역할과 소프트웨어와 하드웨어를 연결시키는 역할을 하죠.
이 과정에서 퀄컴은 소스를 제공하고, 엑시노스는 LSI 직원분들이 부족한 인력으로 채우고 있습니다.
(참고로 이러한 단계에서는 일반 커널보다 손실이 크기는 하지만, 라이브러리단 손실보다는 적습니다.)
벤더와 시스템을 부팅하면 끝나는겁니다.
그런데 커널은 자체적으로 안드로이드를 돌릴 수 없죠, 그래서 벤더단 라이브러리를 사용합니다.
벤더의 하드웨어 라이브러리는 크게 3가지로 분류됩니다.
1. VNDK (벤더 규격화 개발 키트)
특징 : HAL을 도움, 프레임워크에 직접 통신 X
2. SP-NDK (동일 프로세스 NDK)
특징 : 제조사 HAL로 취급, 불안정, 프레임워크에 의해 로드됨
3. LL-NDK (안정화 NDK)
특징 : 오픈소스 프로그램, 안정, 직접 통신
그 중 SP-NDK는 삼성이 엑시노스 하드웨어를 작동시키기 위해 커스텀합니다.
이 HAL의 예로는 이런 것들이 있습니다.
libGLESv1_CM_${driver}.so
libGLESv2_${driver}.so
libGLESv3_${driver}.so
libEGL_${driver}.so
vulkan.${driver}.so
android.hardware.renderscript@1.0-impl.so
android.hardware.graphics.mapper@2.0-impl.so
엑시노스에서 이 라이브러리를 작동시키려면 하드웨어와 연결하는 동일 프로세스를 만들어줘야 하고, 위에서도 말했듯 S.LSI와 MX는 퀄컴에 비해 인력이 부족합니다.
당연히 인력이 부족하기에 커스텀 과정에서, 성능 손실이 일어났던겁니다.
반면, 퀄컴에서는 스냅드래곤을 위한 하드웨어 라이브러리를 제공하죠.
하드웨어를 위해 렌더링하고 사용자가 입력하는 모든 과정에서 HAL과 SP-NDK를 거칩니다.
그렇기에 최적화가 덜 된 HAL은 사용자경험에 악영향을 끼치고, 기피하게됩니다.
그럼 게임사 몫이지 누구 몫이죠??
게임을 삼성이 만듭니까? 그건 아니잖아요.
SoC 벤치마크에서 비정상이면 당연 삼성쪽에 문제가 있는건데 벤치마크는 스펙 규모 성능만큼 나오잖아요.
로우레벨에서 그정도 나오고 게임이 이상하면
당연히 게임 문제이고 게임사가 해결해야지 어찌합니까.
삼성이 git으로 해당 게임회사 소스 코드를 죄다 받아와서 본인들이 최적화해서 새로 빌드하는게 맞을까요?
(우왕 소스 코드 유출 공유~)
이게 삼성탓이 되면
콘솔 게임 구리게 나오면 게임 제조사가 아니라
소니랑 마소 탓을 해야겠군요...
게임 최적화 뭣같이 했네가 아니라
소니랑 마소가 기계를 결함으로 만들어서 그런게 되겠군요.
커스텀 VulkanAPI가, 심지어 커뮤니티 드라이버가 점수랑 그래픽이 더 뛰어난건 말이 되고요?
심지어 그건 타겟 보드가 Odroid N2였습니다.
동일 GPU인 코어수만 다른 P6P의 드라이버도 Exynos 2100의 기본 GameDriver보다 더 좋았어요, 오히려 P6P 기본드라이버는 E2100 dev드라이버랑 비슷했죠.
Dev드라이버가 기본 드라이버인 GameDriver을 씹어 먹는건 말이됩니까?
SP-NDK인 VulkanAPI랑 gralloc만 포팅했는데 점수가 올라가네요? 정말 잘 만든 라이브러리가 맞기는 한걸까요? 아님 노하우가 없었던걸까요?
(공격적으로 말해서 죄송합니다)
VulkanAPI는 Mali 기기에서 kernel GPU 드라이버 버전이 일치하면 스왑 할 수 있어요.
Gralloc은 그래픽 allocator 서비스고요.
그러니까, 순정 드라이버가 다른 기기의 드라이버를 뜯어온 것 보다 느린것이 정상적인 일은 아니잖아요?
이 말을 비판하고 싶은거에요.
S21 순정 Build.prop을 보면 devdriver가 1번 드라이버, GameDriver가 0번 드라이버로 설정되어있어요.
0번 드라이버를 기본 드라이버로 사용하거든요?
그런데 1번 드라이버가 모든 상황에서 우위인것이 그냥 웃기다고요 ㅋㅋㅋ.