Skip to content

Fix: 다른 프로세스의 페이지 읽기를 캐시 다시 만지기가 디스크 읽기로 오판함 - #198

Merged
DO0OG merged 1 commit into
mainfrom
197-fix-touch-disk-read-false-positive
Nov 14, 2026
Merged

DO0OG merged 1 commit into
mainfrom
197-fix-touch-disk-read-false-positive

Conversation

@DO0OG

@DO0OG DO0OG commented Nov 14, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • 캐시 다시 만지기가 한 뷰에서 디스크로 본 양을, 그 뷰를 만지는 데 걸린 시간 동안 디스크가 읽을 수 있는 양(초당 256 MiB)으로 한 번 더 제한합니다 (csharp/src/AsterCache.Windows/StandbyTouch.cs 의 DiskBytesOf).
  • 실제로 디스크에서 읽힌 느린 뷰의 감지, 멈춤 기준(32 MiB), 잡음 허용치, 페이지 읽기 누계를 읽을 수 없을 때의 시간 기준은 그대로입니다.
  • 시험이 실제 경과 시간에 기대지 않도록, 뷰 시간을 재는 시계를 시험용 오버로드에서 주입할 수 있게 했습니다. 운영 경로의 동작은 같습니다.
  • docs/SOLAR.md, docs/SOLAR.ko.md 의 감지 설명과 한계에 반영했습니다.

알아 둘 점

  • 근거는 같은 PC 에서 잰 값입니다. 다른 프로세스가 0.25초에 3만8만 쪽을 읽는 몰림이 약 90초에 한 번 있었고, 4.3초 창의 약 5% 가 잡음 허용치를 넘었습니다. 64 MiB 를 메모리에서 만지면 약 20 ms, HDD 에서 읽으면 0.41초가 걸렸습니다.
  • 같은 조건을 시험 파일로 재현한 실험에서는 4 GiB 스트림 4회 모두 읽은 것이 캐시에 남았고(표본 96/96), 예열 읽기는 요청한 만큼 읽었습니다(3,970 / 3,968 MiB). 설치본에서 본 requeue stopped by disk reads·ladder found data missing 한 건을 이 오판으로 판단했지만, 그 건 자체를 재현하지는 못했습니다.
  • 20 ms 걸린 뷰는 많아야 약 5 MiB 만 세어집니다. 실제로 오래 걸린 뷰와 다른 프로세스의 몰림이 겹치면 그 시간이 허용하는 양까지는 여전히 더해질 수 있습니다.
  • HDD 보다 빠른 장치의 게임에서는 실제 읽기가 덜 세어져 멈춤이 늦어질 수 있습니다. 그 경우 읽기 자체가 빨라 영향이 작습니다.
  • 가짜 멈춤이 설치본에서 사라졌는지는 아직 확인하지 않았습니다.
  • 상한을 뺀 코드로 되돌리면 새 시험 3건이 실패하는 것을 확인했습니다.

Test plan

  • dotnet build csharp -c Release -m:1 경고 0, 오류 0
  • dotnet test csharp/tests/AsterCache.Tests -c Release --no-build --filter "Category!=Live" 4,531건 통과
  • dotnet format csharp --verify-no-changes 종료 코드 0
  • git diff --check 종료 코드 0
  • CI build-test 통과: https://github.com/DO0OG/AsterCache/actions/runs/43569870412

Closes #197

디스크 읽기 감지는 시스템 전체의 페이지 읽기 누계를 쓰는데, 다른 프로세스가
짧은 시간에 많이 읽는 순간과 뷰를 만지는 때가 겹치면 디스크를 읽지 않은 뷰가
통째로 디스크 읽기로 세어졌습니다. 그러면 만지기가 멈추고 목록 일부가 메모리에
없다고 판정돼, 캐시에 있는 목록을 디스크에서 다시 읽었습니다.

- 한 뷰에서 디스크로 본 양을 그 뷰를 만지는 데 걸린 시간 동안 디스크가 읽을 수 있는 양(초당 256 MiB)으로 제한함
- 실제로 디스크에서 읽힌 느린 뷰의 감지와 멈춤 기준은 그대로 둠
- 시험이 실제 경과 시간에 기대지 않게 뷰 시간을 재는 시계를 주입할 수 있게 함
- `docs/SOLAR.md`, `docs/SOLAR.ko.md` 의 감지 설명과 한계에 반영함

Issues #197
@DO0OG
DO0OG merged commit 16fcea0 into main Nov 14, 2026
1 check passed
@DO0OG
DO0OG deleted the 197-fix-touch-disk-read-false-positive branch November 14, 2026 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix: 다른 프로세스의 페이지 읽기를 캐시 다시 만지기가 디스크 읽기로 오판함

1 participant