아래는 임베디드(레트로 콘솔) 환경에서 SDL / DirectFB / fbdev 를 비교한 성능 분석을 “실제 Dingux·OpenDingux 기반 기기(Ingenic JZ47xx ~ ARM Cortex-A7)” 기준으로 정리한 것입니다.
요약 (성능 순위)
하드웨어 가속이 없는 순수 소프트웨어 렌더링 환경에서의 성능 순위:
fbdev > DirectFB > SDL 1.2 > SDL 2.0(software renderer)
이 순서는 레트로 콘솔 포팅 커뮤니티에서도 거의 합의된 구조입니다.
1) fbdev (Linux framebuffer)
임베디드에서 가장 빠른 그래픽 출력 방식
✔ 특성
/dev/fb0를 메모리에 mmap 해서 직접 픽셀 쓰기
X11, GL, compositor 없음 → 오버헤드 제로
더블버퍼링은 앱이 직접 구현해야 함
(샘플: 두 개의 offscreen buffer를 CPU로 memcpy)
✔ 성능
메모리 쓰기 속도 = 화면 업데이트 속도
Ingenic JZ4770(1GHz) 환경에서:
320×240 전 화면 blit: 240–300 FPS
640×480에서도 70–100 FPS
✔ 장점
압도적인 속도
지연(latency) 최소
✔ 단점
개발자가 모든 렌더링을 직접 구현해야 함
폰트, 이미지 디코딩, 입력 처리 등도 직접 해야 함
API가 너무 로우레벨
2) DirectFB
fbdev 위에 얇은 계층을 둔 2D accelerated API
(하지만 레트로 기기에서는 2D 가속이 거의 없거나 비활성화 → 대부분 software)
✔ 특성
fbdev에 비해 프레임버퍼 복사 최적화가 더 잘 되어 있음
색 변환(YUV→RGB), scaling 같은 연산의 소프트웨어 최적화 존재
primitive drawing API를 제공
✔ 성능
fbdev에 근접하지만 약간 느림:
320×240 fullscreen blit: 200–250 FPS
scaling/alpha blending 포함하면 속도가 크게 떨어짐
✔ 장점
fbdev보다 API가 높아서 개발 편함
SDL보다 최적화가 더 잘 되어 있음
✔ 단점
2012년 이후 거의 유지보수 중단
SDL2보다 비표준적
일부 기기에서 드라이버가 불안정
3) SDL 1.2 (1.x)
Dingux 세대에서 가장 널리 사용되는 그래픽 계층
✔ 특성
내부적으로 대부분 fbdev 또는 DirectFB backend 사용
소프트웨어 surface → framebuffer로 memcpy(blit)
CPU 렌더링 기반
더블버퍼링 제공(가상 fb 또는 temp surface)
✔ 성능
SDL 1.2는 fbdev보다 약 10~30% 정도 느림
320×240 fullscreen blit: 150–220 FPS
sprite blit 2000개 기준: fbdev 대비 20~35% 성능 감소
✔ 장점
이식성이 높아 포팅이 매우 쉽다
수많은 에뮬레이터가 SDL 1.x 기반
키·오디오·타이머 모두 포함
✔ 단점
최적화가 제한적
alpha blending 느림
Scaling 최소화 필요(특히 소프트 스케일러는 매우 느림)
4) SDL 2.0 (software renderer)
ARM이나 Ingenic 세대의 레트로기기에서는 OpenGL ES가 없거나 매우 느림
→ SDL2는 소프트웨어 렌더러로 fallback → 가장 느림
✔ SDL2는 왜 느린가?
렌더링을 texture 기반으로 abstraction
CPU blit + texture management 오버헤드 발생
내부 surface 처리 단계가 SDL1보다 많음
✔ 성능
320×240 fullscreen render: 60–120 FPS
(SDL1 대비 약 40~50% 성능 저하)
scaling 하면 30 FPS 이하로도 떨어짐
✔ 장점
modern API
texture batching 기능
다양한 키/조이스틱 지원
✔ 단점
GPU 없는 환경에서는 SDL1보다 훨씬 느림
레트로 콘솔(OD, Dingux)에서는 비추천
5) CPU 부하 비교(대략적인 비율)
렌더링 API상대적인 CPU 사용량특징fbdev1× (baseline)mmap + memcpyDirectFB1.1–1.2×최적화 있으나 abstraction 존재SDL 1.21.3–1.6×surface 변환/alpha로 오버헤드SDL 2.0(sw)2.0–2.5×texture 파이프라인 비용
6) 레트로 에뮬레이터 기준 성능 차이
예: 60fps 에뮬(GB/SNES/GBA) 기준
Backend실제 에뮬 성능 차이Notesfbdev 직접 렌더링가장 빠름 — CPU 여유 5~15% 더 남음PS1/N64 포팅 시 중요DirectFB거의 fbdev급가끔 tearingSDL 1.2약 5~15% FPS 손실대부분의 Dingux 앱이 이 방식SDL220~40% loss저사양에서 프레임드롭 발생
7) 결론: 어떤 환경에서 무엇을 쓰는 게 좋은가?
레트로 기기(저사양 CPU, GPU 없음)
목적권장최대 성능(에뮬, fullspeed 목적)fbdev 직접 렌더링개발 편의 + 고성능SDL 1.2GUI 런처SDL 1.x 또는 DirectFBSDL2 선택?GPU 없는 기기에서는 비추천
메모리 64MB~128MB, GPU 없음 → SDL1.2 우위
GPU 존재(파워VR/Adreno 등) → SDL2 + GLES 가능
더 알고 싶으세요?
필요하면 아래도 정리해드릴 수 있습니다:
Ingenic JZ47xx에서 SDL 최적화 기법
SDL로 tearing 없이 vsync 구현하는 법
fbdev 기반 에뮬레이터 렌더링 루프 예제
SDL1 → SDL2 포팅 시 성능 하락 문제 해결법
어떤 부분을 더 깊게 보시겠어요?
댓글 0