Windows에서 메모리 부족은 Firefox의 가장 큰 충돌 원인이었지만, 영향을 받은 사용자 중 많은 이가 수 기가바이트의 물리 RAM을 비워두고 있었습니다. Windows는 애플리케이션이 커밋할 수 있는 메모리 양을 RAM과 스왑 파일 크기의 합으로 제한하는데, Firefox는 그 '커밋 공간'을 소비하는 모든 것을 통제할 수 없었습니다. 그래픽 드라이버는 거의 사용되지 않지만 여전히 한도에 산입되는 텍스처용 메모리를 커밋합니다. Firefox는 수년간 자체 메모리 사용량을 줄이고 회귀를 모니터링해 왔지만, 그 어떤 노력도 결국 등장한 이 방법만큼 충돌률을 바꾸지 못했습니다.

충족될 수 없는 할당에 대한 통상적인 대응은 포기하는 것입니다. 대부분의 실패 경로에는 계속 진행할 합리적인 방법이 없어 브라우저는 통제된 방식으로 충돌했습니다. 이는 커밋 공간 상한을 고정된 것으로 취급한 것이었지만, Windows에서는 그렇지 않습니다. 운영 체제는 스왑 파일이 거의 가득 차면 자동으로 이를 확장하여 애플리케이션이 커밋할 수 있는 메모리 양을 늘립니다.

Mozilla의 조치는 할당이 실패하면 메인 프로세스가 잠시 기다린 뒤 재시도하도록 하여 Windows가 페이지 파일을 키울 시간을 주는 것이었습니다. 이 지연은 다른 이점도 줍니다. Firefox는 여러 프로세스로 실행되며 메인 프로세스만 제외하면 어느 것이든 잃어도 살아남을 수 있으므로, 지연 동안 메모리를 폭주시키는 콘텐츠 또는 GPU 프로세스가 먼저 죽어 브라우저가 재개할 공간을 확보하는 경향이 있습니다. 웹 페이지를 잃거나 잠깐 깜빡이는 것이 브라우저 전체 충돌보다 낫습니다.

이 방법은 Firefox 105에 탑재되어 활성 사용 시간당 메모리 부족 브라우저 충돌을 70% 이상 줄였으며, 이는 Mozilla의 가장 낙관적인 예측을 훨씬 뛰어넘었습니다. 팀은 Android용 Firefox와 Firefox OS에서 같은 접근법을 이미 성공적으로 사용했으며, 메모리 압박 상황에서 탭 충돌이 소폭 증가한 것을 다음으로 줄일 목표로 삼았습니다.

Windows에서는 실패한 할당이 치명적일 필요가 없습니다. OS가 필요에 따라 페이지 파일을 키우므로, 기다렸다가 재시도하면 메모리 부족 충돌이 잠깐의 지연으로 바뀝니다.

Windows는 할당이 실패한 애플리케이션을 죽이지 않습니다. 호출이 오류를 반환하므로 프로세스는 죽는 대신 기다렸다가 다시 시도하도록 선택할 수 있습니다.

커밋 공간 상한은 확장 가능합니다. Windows는 스왑 파일이 거의 가득 차면 자동으로 키우며, 짧은 일시 정지가 그 시간을 줍니다.

Firefox의 다중 프로세스 설계 덕분에 메인 프로세스를 지연시키면 다시 로드할 수 있는 콘텐츠 또는 GPU 프로세스가 먼저 죽어 메모리를 확보하므로 브라우저 전체를 보호합니다.

이 변경은 메모리 사용량이 아니라 실패 처리를 바꾼 것이며, 그래서 작은 수정 하나가 수년간의 메모리 사용량 축소를 능가했습니다.

플랫폼이 필요에 따라 자원을 확장할 수 있다면, 실패 시 충돌하는 대신 잠시 멈추고, 다중 프로세스 앱에서는 다시 로드할 수 있는 하위 프로세스가 먼저 피해를 흡수하게 하십시오.

Firefox 105는 2022년 9월에 대기 후 재시도 동작을 탑재했고, 텔레메트리는 활성 사용 시간당 메모리 부족 브라우저 충돌이 70% 이상 줄었다고 보여주었습니다. 이는 '우리의 가장 낙관적인 예측보다 훨씬 더' 큰 감소였습니다. 이 지연은 탭 충돌의 소폭 증가를 일으켰고, 팀은 이를 줄이기 위해 작업했으며, Mozilla는 커밋 공간 부족과 물리 메모리 부족을 구분하기 시작하여 Firefox가 다르게 대응하고 스와핑을 줄일 수 있게 했습니다. 엔지니어 Raymond Kraesig가 이 방법을 구현하고 그 영향을 모니터링했습니다. 같은 기법은 이미 Android용 Firefox와 Firefox OS에서 효과가 있었습니다.

근거 확인하기

출처

  1. Improving Firefox stability with this one weird trick Mozilla Hacks · hacks.mozilla.org ·
  2. Hacker News discussion: Improving Firefox stability with this one weird trick Hacker News · news.ycombinator.com ·