Samsung Galaxy S9과 Galaxy S9+는 Qualcomm Snapdragon 845 시스템 온 칩을 통해 미국, 홍콩, 라틴 아메리카 일부 지역을 포함한 여러 시장에서 출시되었습니다. 영국 회사 GraphicsFuzz는 원격 전화 재부팅/충돌을 유발하는 데 악용될 수 있는 GPU 안정성 버그를 발견했습니다.
새로운 삼성 갤럭시 S9 홍콩, 미국, 캐나다 및 라틴 아메리카 일부 지역을 포함한 여러 시장을 위한 최신 Qualcomm Snapdragon 845 시스템 온 칩이 포함되어 있습니다. 삼성은 일부 시장에서 자체 Exynos SoC 대신 최신 주력 제품인 Qualcomm Snapdragon SoC를 선택하는 경우가 많습니다. 이는 Samsung Galaxy S6를 제외하고 일반적으로 미국의 경우입니다. 일반 소비자에게는 Exynos 9810과 Snapdragon 845 변형 간에 차이가 거의 없습니다. 그러나 내부적으로는 칩셋의 차이로 인해 완전히 다른 경험이 발생할 수 있습니다.
아난드테크스냅드래곤 갤럭시 S9과 엑시노스 갤럭시 S9에 대한 리뷰에서 극명한 성능 차이가 드러났습니다. 두 모델 간의 배터리 수명은 Snapdragon 모델이 Exynos 모델보다 쉽게 뛰어납니다. 영국에 본사를 둔 회사에 따르면, 이 두 개의 크게 다른 칩셋을 사용하면 이번에는 성능 차이만이 유일한 문제는 아닌 것 같습니다. 그래픽퍼즈. 그래픽퍼즈 장치의 GPU 안정성 테스트를 전문으로 하는 신생 기업입니다. 그들은 그래픽 드라이버의 버그를 찾기 위한 테스트를 개발하고 발견한 문제의 근본 원인을 진단하는 데 도움을 제공합니다. 예를 들어 팀은 보안 문제를 발견했습니다. Samsung Galaxy S6용 ARM 드라이버에 영향을 미침, Google로부터 버그 현상금을 받았습니다. Snapdragon Samsung Galaxy S9을 테스트하는 동안 그래픽퍼즈 Adreno 630의 그래픽 드라이버에서 오류를 발견했습니다. 전체 전화 재부팅을 트리거 기본 Samsung 인터넷 브라우저로 탐색할 때 유효한 WebGL 인터넷 페이지를 통해.
특히 Adreno 630의 복잡하지만 유효한 셰이더 렌더링에 오류가 있어 장치를 정지시킨 후 결국 재부팅할 수 있습니다. 셰이더는 단순히 GPU가 이미지를 렌더링할 수 있도록 하는 프로그램입니다. 그래픽퍼즈 이 버그를 유발하려는 악의적인 의도로 WebGL 페이지를 디자인한 것이 아니라 장치의 GPU 안정성에 대한 표준 테스트 중에 우연히 발견되었다고 말했습니다. 이 원격 충돌이 재현 가능하다는 사실을 발견한 후 회사는 다음과 같이 연락했습니다. XDA 개발자 Qualcomm과 Samsung 모두의 공개 프로세스를 촉진합니다.
Snapdragon Samsung Galaxy S9에서 WebGL 충돌 재현
두 회사의 담당자에게 연락하기 전에 우리는 그래픽퍼즈님이 우리 기기에서 찾은 결과입니다. 그래픽퍼즈 테스트할 특별한 웹페이지를 설정했고, 어떤 일이 일어나는지 알아보기 위해 Google Play 스토어에서 가장 인기 있는 인터넷 브라우저 5개를 선택했습니다. 아래 표는 5개의 서로 다른 웹 브라우저에서 복잡한 셰이더를 렌더링할 때의 효과를 보여줍니다.
테스트된 장치: 퀄컴 스냅드래곤 845 삼성 갤럭시 S9+(SM-G965U)
운영 체제: 안드로이드 8.0.0 오레오 SM-G965U
웹 브라우저 |
결과 |
---|---|
구글 크롬 v65.0.3325.109 |
~2초 동안만 정지됩니다. |
삼성인터넷 v7.0.10.46 |
정지된 후 결국 전체 재부팅이 시작됩니다. |
오페라 v45.1.2246.125351 |
전화 정지 |
마이크로소프트 엣지 v1.0.0.1726 |
~3초 동안만 정지됩니다. |
파이어폭스 v59.0.2 |
브라우저 충돌 |
Google Chrome과 Microsoft Edge 모두 몇 초 동안 휴대폰을 정지시키고 WebGL 오류를 생성하지만 궁극적으로 장치는 괜찮을 것입니다. 그래픽퍼즈 Google Chrome 팀과 한동안 논의를 진행한 결과 다음과 같은 사실을 알게 되었다고 우리에게 보고했습니다. Chrome은 전화가 가득 차는 것을 방지하기 위해 일정 시간이 지나면 GPU 프로세스를 종료하는 메커니즘을 구현합니다. 충돌. Opera는 전화기를 정지시키지만 재부팅을 유발하지는 않습니다. Firefox 앱 자체는 충돌하지만 휴대폰은 괜찮습니다. 마지막으로, 삼성 인터넷을 통해 페이지에 액세스하면 전체 전화기 재부팅이 시작되기 전에 전화기 속도가 크롤링 속도로 느려집니다.
다음은 충돌에 대한 비디오 데모입니다.
오류에 대한 자세한 설명
그래픽퍼즈 전화기를 재부팅하게 만드는 문제가 무엇인지 나타내는 보다 심층적인 조사를 수행했습니다. Qualcomm Snapdragon 845의 일부인 Qualcomm Adreno 630용 GPU 드라이버 시스템온칩. 그래픽퍼즈 아래에 포함된 충돌에 대한 로그를 수집했습니다. 무슨 일이 일어나고 있는지 간략하게 요약하자면, 휴대폰이 복잡한 셰이더를 렌더링할 때 GPU는 다음을 설정합니다. "울타리"라고 불리는 것. 펜스는 CPU 간 공유 메모리에 대한 액세스를 조정하는 데 사용됩니다. 그리고 GPU. 데스크톱과 달리 모바일 GPU는 CPU와 동일한 RAM에 액세스할 수 있으므로 게임을 플레이하거나 다른 항목을 렌더링할 때 펜스를 사용하여 해당 공유 메모리에 액세스합니다. 개별 그래픽이 있는 장치에서는 GPU 자체에 자체 메모리가 있습니다. 현재의 모든 휴대폰은 RAM의 플래시 저장 장치와 비디오 메모리 및 랜덤 액세스 메모리를 공유합니다. 여기서 문제는 펜스가 완료되지 않아 커널 패닉이 발생하고 전화기가 재부팅된다는 것입니다.
재부팅하기 전에 커널 패닉을 완료하세요.
[12681.035590] [2:crtc_commit: 117: 433] kgsl kgsl-3d0: |a6xx_snapshot_gmu| set FENCE toALLOWmode:0
[12681.035839] [2:crtc_commit: 117: 433] kgsl kgsl-3d0: |kgsl_device_snapshot| snapshot created at pa 0x000000016e500000 size 927400
[12681.035993] [0: kworker/u16:5:27740] kgsl kgsl-3d0: |kgsl_snapshot_save_frozen_<wbr />objs| kgsl_snapshot_save_frozen_objs start
[12681.036085][2:crtc_commit: 117: 433]Kernelpanic-notsyncing: !!!FENCETIMEOUT
[12681.036156][2:crtc_commit: 117: 433]CPU: 2 PID: 433 Comm: crtc_commit:117Tainted: GW 4.9.65-13087505#1
[12681.036248][2:crtc_commit: 117: 433]Hardwarename: SamsungSTARQLTEPROJECTRev14 (DT)
[12681.036319][2:crtc_commit: 117: 433]Calltrace:
[12681.036368] [2:crtc_commit: 117: 433] [] dump_backtrace+0x0/0x248
[12681.036438] [2:crtc_commit: 117: 433] [] show_stack+0x18/0x28
[12681.036509] [2:crtc_commit: 117: 433] [] dump_stack+0x98/0xc0
[12681.036578] [2:crtc_commit: 117: 433] [] panic+0x1e0/0x44c
[12681.036646] [2:crtc_commit:117: 433] [] sde_plane_wait_input_fence+<wbr />0x174/0x28c
[12681.036727] [2:crtc_commit:117: 433] [] sde_crtc_atomic_flush+0x1c4/<wbr />0x5e8
[12681.036807] [2:crtc_commit: 117: 433] [] drm_atomic_helper_commit_<wbr />planes+0x19c/0x1fc
[12681.036891] [2:crtc_commit: 117: 433] [] complete_commit+0x74/0x6a4
[12681.036960] [2:crtc_commit:117: 433] [] _msm_drm_commit_work_cb+0x48/<wbr />0x1c4
[12681.037038] [2:crtc_commit: 117: 433] [] kthread_worker_fn+0x78/0x194
[12681.037108] [2:crtc_commit: 117: 433] [] kthread+0xd8/0xf0
[12681.037172] [2:crtc_commit: 117: 433] [] ret_from_fork+0x10/0x20
[12681.037239][2:crtc_commit: 117: 433]Kernelloadedat: 0x800a0000, offsetfromcompile-timeaddress 20000
[12681.037331][2:crtc_commit: 117: 433]SMP: stoppingsecondaryCPUs
더 읽어보세요
그래픽퍼즈 이 문제가 삼성 인터넷 브라우저에서만 발생하는 이유는 GPU 감시 장치 때문이라고 생각합니다. 때때로 GPU가 장기 실행 셰이더에서 중단될 수 있습니다. 이 경우 브라우저나 OS에는 일반적으로 응답하지 않는 그래픽 드라이버를 강제로 다시 시작하는 GPU 감시 기능이 있습니다. 그만큼 그래픽퍼즈 테스트 셰이더에는 렌더링하는 데 시간이 더 오래 걸릴 수 있는 여러 for 루프가 있지만 여전히 유효한 셰이더입니다. Mali-G72 GPU를 탑재한 Exynos 9810 Samsung Galaxy S9를 포함한 여러 다른 장치에서는 이 셰이더를 렌더링할 수 있습니다. 따라서 팀은 그래픽퍼즈 이 오류는 Adreno 630의 GPU 드라이버 결함으로 인해 발생한다는 결론에 도달했습니다.
동일한 버전의 Samsung 인터넷 브라우저를 실행하는 Qualcomm Snapdragon 835의 Adreno 540 GPU가 탑재된 Google Pixel 2 XL은 다음과 같이 크롤링 속도가 느려집니다. 글쎄요. 즉, 이 오류는 셰이더를 렌더링하는 Qualcomm GPU 드라이버와 Samsung Browser Watchdog이 셰이더를 종료하지 않는 데 문제가 있을 수 있음을 의미합니다. 서비스.
Qualcomm이 재부팅을 일으키는 GPU 드라이버의 근본적인 문제를 진단하고 곧 삼성에 수정된 드라이버를 제공할 수 있기를 바랍니다. 물론 이 업데이트가 최종 사용자에게 전파되기까지는 다소 시간이 걸릴 수 있습니다. 그 동안 우리는 삼성이 삼성 인터넷 웹 브라우저에 대한 업데이트를 추진하여 완화할 것으로 예상합니다. 문제(적어도 웹페이지를 통해 악용되는 것을 방지), Google의 행동과 일치 크롬. 이 문제는 Qualcomm Snapdragon 845 Samsung Galaxy S9/S9+에 영향을 미치는 것으로 알려져 있지만 Snapdragon 845를 사용하는 더 많은 장치에도 영향을 미칠 수 있습니다.
자신의 모바일 또는 데스크톱 장치의 GPU 안정성을 테스트하는 데 관심이 있다면 다음 팀에 문의하세요. 그래픽퍼즈 귀하의 장치에서 유효한 셰이더 중 일부를 실행할 수 있는 웹앱 데모를 구성했습니다. 다음을 통해 해당 웹페이지에 액세스할 수 있습니다. 이 링크를 따라.
공개 일정
- 2018년 3월 28일: 그래픽퍼즈 에게 손을 내밀었다 XDA 개발자 우리에게 문제를 알립니다. XDA 개발자 삼성 갤럭시 S9+(SM-G965U)에서 이 문제를 재현했습니다.
- 2018년 3월 29일: 그래픽퍼즈 더 자세한 내용을 전달하고 Qualcomm 및 Samsung 직원이 버그를 재현할 수 있도록 특별 웹 페이지를 설정했습니다.
- 2018년 3월 30일: XDA 개발자 보고서에 대한 자세한 내용을 삼성과 Qualcomm에 모두 문의했습니다. Qualcomm 담당자가 우리의 메시지가 수신되었음을 확인하는 연락을 받았습니다.
- 2018년 4월 2일: 삼성 담당자가 우리의 메시지가 수신되었음을 확인하는 연락을 받았습니다.
- 2018년 4월 4일: 삼성 담당자가 삼성전자에 신고할 것을 권유했습니다. 보안 보고 페이지. XDA 개발자 보고서를 제출했고 보고서에 삼성 엔지니어가 배정되었습니다.