기여 목록 / 8505916
[schedqos] Remove the expired Scheduling.DBusSchedQoS histograms
ChromeOS에서 프로세스·스레드 스케줄링 설정을 resourced 데몬에 D-Bus로 요청하는 DBusSchedQOSStateHandler가 기록하던 만료 히스토그램 5개를, 그 지표를 위해 들어간 PID 재사용 조사 코드와 함께 지웠습니다. 5파일 +4/−370. 첫 리뷰어 oshima@는 «살릴 필요가 없는지 확인하자»며 hidehiko@를 더했고, hidehiko@는 조사 코드를 넣은 kawasin@이 휴가 중이라 그의 매니저 hugobenichi@를 더했습니다. hugobenichi@가 원래 패치와 버그를 확인해 «이 데이터는 더 필요 없고 resourced는 이미 그에 맞게 조정됐다»고 승인했고, oshima@도 승인했습니다. histograms.xml OWNER로 넣은 spvm@은 10-01 이후 Gerrit 활동이 없어, metadata/scheduler/OWNERS가 backup으로 적어 둔 chromium-metrics-reviews@를 리뷰어로 넣자 gwsq 봇이 lucnguyen@을 배정했고 한 시간 만에 승인했습니다. 제출을 부탁한 뒤 oshima@의 첫 CQ는 트리 전체에 퍼진 linux-chromeos-rel 빌더의 no-op 확인 오류로 실패했고, oshima@가 직접 리베이스해 다시 CQ를 돌려 2026-10-08(UTC)에 머지됐습니다(c9087149701df).
문제 설명
- issue url: 공개 crbug 없음 (실험 버그 내부 b/328715424, OSSCA #652)
Scheduling.DBusSchedQoS.{PidReusedOnSetProcessState,PidReusedOnSetThreadState,SetProcessStateLatency,SetThreadStateLatency}는 2025-10-26,ServiceConnectionSuccess는 2025-11-02에 만료됐습니다.- PID 재사용 감지는 2024-04 CL(crrev.com/c/5366860)이 «현장에서 이 경합이 얼마나 자주 일어나는지 알기 위해» 넣은 조사 코드였습니다. 요청을 보낼 때마다
/proc/<pid>/stat을 열어 두고, 응답 뒤 그 프로세스가 아직 같은지 다시 확인해 히스토그램과 에러 로그에만 썼습니다.
해결 내용
- 히스토그램 5개와 지표 변환 함수
GetPidReuseResult(), enumPidReuseResult를 지웠습니다. - PID 재사용 감지
IsPidReused()와, 그걸 위해 콜백 두 개에 넘기던ProcStatFile, 지연 시간만 재던ElapsedTimer인자를 지웠습니다. - 성공/실패 분기는 실패 로그만 남는 형태로 정리했습니다.
- 지표만 검사하던 테스트 6개와, 그 테스트들만 쓰던
LaunchFakeProcess()를 지웠습니다. - histograms.xml 5항목과 enums.xml의
PidReuseResult를 지웠습니다. system::ProcStatFile(procfs_util) 클래스 자체는 이제 쓰이지 않지만, 지우려면base/threading/thread_restrictions.h의 friend 선언까지 건드려야 해서 후속 CL로 남겼습니다.
- base::ElapsedTimer elapsed_timer;
ash::ResourcedClient::Get()->SetProcessState(
process_id, state,
base::BindOnce(&DBusSchedQOSStateHandler::OnSetProcessPriorityFinish,
- weak_ptr_factory_.GetWeakPtr(), process_id, priority,
- std::move(elapsed_timer),
- system::ProcStatFile(process_id)));
+ weak_ptr_factory_.GetWeakPtr(), process_id, priority));발굴 과정
Mac에서 ChromeOS 경로의 «파일 전체 만료» 후보를 뽑았고(LD), 리눅스에서 다시 읽었습니다. 처음엔 PID 재사용 감지가 LOG(ERROR)에도 쓰여서 감지는 남길 생각이었습니다. 그런데 테스트 4개가 히스토그램으로만 감지를 검증하고 있어, 그대로 두면 검증 없는 코드가 남았습니다. git log -S로 이 코드를 추가한 CL을 디렉터리 이동 전까지 따라가 보니 지표용 조사였음이 설명에 분명해서, 실험 전체를 지우는 쪽으로 범위를 정했습니다.
테스트 방법
- 리눅스 박스의
target_os="chromeos"빌드(out/cros)에서unit_tests증분 빌드: 29 스텝 2분 51초. gn check '//chrome/browser/ash/schedqos/*',validate_format.py,pretty_print.py --presubmit통과.unit_tests --gtest_filter='DBusSchedQOSStateHandlerTest.*': 수정 전 21/21 → 수정 후 15/15. 빠진 6개가 지운 지표 테스트와 정확히 같은지 이름으로 대조했습니다.- presubmit 0 경고
배운 점
- 지표와 함께 들어온 로직은 «로그에도 쓰이니 남긴다»로 끝내지 말고, 처음 넣은 CL의 목적을 확인합니다. 조사용이었다면 실험째 걷어내는 쪽이 검증 없는 코드를 남기지 않습니다.
- 테스트를 지우면 그 테스트만 쓰던 익명 namespace 도우미가 남아
-Werror로 빌드가 깨질 수 있어, 지운 뒤 정의만 남은 이름을 찾아 함께 정리합니다. base/헤더를 건드리는 정리는 전 트리 재빌드와 별도 OWNER 리뷰가 필요해 따로 떼어 냅니다.- histograms.xml OWNER가 조용하면 그
metadata/<영역>/OWNERS파일이 backup으로 적어 둔 그룹 주소(chromium-metrics-reviews@)를 리뷰어로 넣습니다. gwsq 봇이 담당자를 바로 배정해 주므로 개별 OWNER를 기다리는 것보다 빠릅니다.