크롬, 이제 램(RAM) 안 먹어요! 러스트 기반 똑똑한 탭 관리

by DD
1개월 전
조회수 40

크롬 브라우저의 과도한 RAM 사용 문제를 해결하기 위해 시스템 압력(System Pressure) 감지 기반의 탭 관리 시스템을 설계

크롬 확장 프로그램(Chrome Extension)러스트(Rust) 네이티브 호스트(Native Host)로 분리하여, 시스템 자원 사용량 및 사용자 컨텍스트(Context)를 고려

압력 점수(Pressure Score) 모델을 통해 RAM, CPU 사용량, 배터리 상태 등을 종합적으로 분석하여 탭의 생명주기(Lifecycle) 관리

포커스 클러스터링(Focus Clustering)을 도입하여 활성 탭과 관련된 탭은 더 오래 유지하고, 비활성 탭은 빠르게 정리

결과: RAM 사용량 감소, 활성 워크플로우(Workflow) 유지, 브라우저 동작 예측 가능성 향상

압력 감지 아키텍처(Pressure-Aware Architecture) 설계

본 아키텍처는 크롬 확장 프로그램(Chrome Extension)러스트(Rust) 네이티브 호스트(Native Host)로 분리되어, 각기 다른 역할을 수행한다.

확장 프로그램: 탭 활동 추적, 포커스 클러스터링, TTL(Time-To-Live) 관리

네이티브 호스트: 시스템 메트릭 수집(RAM, CPU, 배터리), 압력 점수 계산, 탭 분류

데이터 격리 아키텍처(Data Isolation Architecture)를 통해 브라우저 로직과 시스템 로직을 분리하여, 시스템 자원 접근의 안정성을 확보했다. 네이티브 메시징 API(Native Messaging API)**를 사용하여 두 컴포넌트 간 통신을 구현했다.

압력 점수 모델(Pressure Scoring Model)의 동작 원리

시스템 압력(System Pressure)을 감지하기 위해, 가중치 기반 압력 점수 모델(Weighted Pressure Scoring Model)을 사용한다. 총 RAM 사용량, 사용 가능한 RAM, CPU 사용률, 배터리 상태를 수집하여, 0~100 사이의 압력 점수를 계산한다.

RAM: 가장 큰 영향을 미치는 요소

CPU: 압력 점수 조절

배터리: 공격성(Aggressiveness) 조절

RAM_HIGH, CPU_ELEVATED, ON_BATTERY**와 같은 이유 태깅(Reason Tagging)을 통해, 시스템 상태에 대한 투명성을 확보했다.

포커스 클러스터링(Focus Clustering)을 통한 컨텍스트(Context) 인식

모든 비활성 탭을 동일하게 취급하는 대신, 포커스 클러스터링(Focus Clustering)을 통해 사용자 컨텍스트(Context)를 고려한다.

활성 탭과 동일한 호스트 이름, 최근 활동, 동일한 윈도우(Window)에 속하는 탭들을 클러스터로 묶음

클러스터 내 탭: 긴 TTL 적용

클러스터 외부 탭: 압력 발생 시 빠르게 정리

결과적으로 탭 정리 시 사용자 워크플로우(Workflow)에 미치는 영향을 최소화하고, 사용자 경험(User Experience)**을 개선한다.

안정성을 위한 가드레일(Guardrails) 및 안전 장치

과도한 자원 관리는 시스템에 문제를 야기할 수 있으므로, 엄격한 가드레일(Guardrails)을 구축하여 안정성을 확보했다.

활성 탭, 고정 탭, 소리 재생 탭은 절대 삭제 금지

보호된 도메인(Protected Domains) 존중

최소 TTL(Time-To-Live) 설정 및 정리 주기 간 쿨다운(Cooldown) 적용

결과적으로 시스템의 예측 가능성을 높이고, 예상치 못한 동작을 방지한다. 안정성(Stability)**을 최우선 목표로 설계되었다.

러스트(Rust)를 선택한 이유와 모듈 구조

네이티브 호스트(Native Host) 구현 언어로 러스트(Rust)를 선택한 이유는 다음과 같다.

메모리 안전성(Memory Safety), 명시적인 모델링, 강력한 타입 시스템, 깔끔한 모듈 구조, 가벼운 바이너리

러스트(Rust) 코드는 metrics, system state collection, battery, pressure, protocol, state 모듈로 구성되어, 각 모듈은 독립적인 역할을 수행한다. 결과적으로** 네이티브 호스트를 스크립트가 아닌, 실제 서브시스템처럼 관리할 수 있다.

When Chrome Ate My RAM: Designing a Pressure-Aware Tab Orchestrator with Rust