Cache Manager Yonghyun Kim Microsoft MVP Dev 5 team leader, ESTsoft Debuglab Windows Internals study member
Cache, Do you think about it?
Maybe.. Is it Buffers?
Benefits – Virtual Block Basis OS Side Application Side Virtual Block Basis Raw data each file system Logical Block Basis Photo Data Manager Sound Data Manager Binary Data Manager
Benefits – Virtual Block Basis Cache Block in Memory Manager 256k Random Access Sequential Access Intelligent Read-Ahead File1 256k
H E L L O \n Benefits - Fast I/O void GoodFile::readFile() { char c; FILE* stream = fopen(“data.bin”, “r”); while(1) c = fread(&c, sizeof(char), 1, stream) if(‘\0’ == c) break; }
Benefits – Intelligent Read-Ahead 나는 니가 다음에 읽을 데이터를 알고 있다
Cache Coherency Both cache manager and map files use the same memory management file mapping service. Process1 Cached File view Cache Manager Memory Management File Mapping Services File block File block File block Process2 Mapped File view File block
Windows Cache Manager 모든 파일 시스템 타입들을 지원 메모리 관리자를 이용 가상 블록 기반의 Fast I/O Stream Based Caching
Cache Mechanism Overview System Cache Virtual Address After 0x80000000 Shared Cache map File1 User Mode CcCopyRead HANDLE 0x15 FILE OBJECT NTFS
Cache Mechanism Overview Virtual Address Control Block Kernel Virtual Address Space FOVA File1 256k File1 256k
Cache Size – LargeSystemCache 사용자가 선택한 UI 에 따라 LargeSystemCache 값이 바뀜
Viewing the Cache Virtual Size
Big File Processing with Cache 처리 해야 될 파일이 클 경우 허용되는 물리 메모리가 모두 파일 데이터를 캐시 하는데 쓰임
Looking at the Cache’s Working Set
Systemwide Cache Data Structures CcVacbs System VACB Array View System VACB Array System VACB Array View System VACB Array View Virtual Address of Data in system cache Pointer to shared cache map File offset Active count View
Per-file cache data structures
VACB Index Arrays
Multilevel VACB arrays
Looking at Shared and Private Cache Maps
File system interaction with cache Virtual Memory Manager Virtual Memory Page Fault 새로운 view mapping 파일 읽기 요청 File System Drvier Cache Manager IRP 요청 Cache Manager 에게 데이터 요청
File system interaction with cache Virtual Memory Manager Virtual Memory 데이터가 들어옴 데이터를 캐시로 가져옴 파일 읽음 File System Drvier Cache Manager 데이터 리턴
File Function interaction with cache Virtual Memory Manager Virtual Memory PageFault MmCreateSection MmFlushSection IoPageRead File System Drvier Cache Manager NtReadFile NtWriteFile CcCopyRead / CcFastCopyRead CcCopyWrite / CcFastCopyWrite
Fast I/O Decision tree
Intelligent Read-Ahead Asynchronous Read-Ahead with History CcReadAheadIos 를 통하여 확인 두번 읽기 요청한 파일 핸들을 보관 (private cache map) Sequential Read-Ahead CreateFile에 FILE_FLAG_SEQUENTIAL_SCAN 인자 해당 파일의 비활성 뷰를 해제 두배의 데이터를 미리 읽음(64k -> 128k)
Write-Back Caching and Lazy Writing 시스템 작업쓰레드 초당1회 실행 시스템 캐시 내 변경 페이지의 1/8을 씀 Lazy Writing CreateFile에 FILE_ATTRIBUTE_TEMPORARY 인자 물리메모리 부족이나 파일 갱신이 이루어 지지 않으면 디스크에 쓰지 않음 (시스템 성능 향상)
Write Through CreateFile에 FILE_FLAG_WRITE_THROUGH FlushFileBuffers 파일 쓰기와 변경작업의 즉시 적용 FlushFileBuffers CcDataFlushes CcDataPages
References Windows Internals Windows 구조와 원리 Channel 9 - Cache Manager
Thank you