Peak Memory Scheduling
HotPDF는 경쟁하는 대형 footprint operation을 하나의 프로세스 전역 바이트 예산으로 주 working set 할당 전에 승인합니다
Covered operations
- Document loading
- 동기, 캐시, progressive 페이지 렌더링
- 병렬 페이지, tile, band 렌더링
- 선택적 stream 최적화
- 상한 병렬 이미지 최적화
각 operation은 소스 크기, 렌더 차원, DPI, stream threshold, 워커 수에서 도출한 보수적 추정치를 예약하고, 기존 operation 텔레메트리 경계에서 예약을 해제합니다
Admission policy
- 기본 프로세스 전역 예산은
536870912바이트입니다 0값은 예산 제한을 끕니다- 대기자는 FIFO 순으로 승인되어 나중의 작은 요청이 먼저 온 큰 요청을 굶게 하지 못합니다
- 설정 예산보다 큰 요청은 다른 예약이 활성이 아닐 때만 실행될 수 있습니다
- 예산을 늘리면 대기 중인 작업을 즉시 승인할 수 있고, 줄이는 건 활성 작업을 끊지 않습니다
- 대기 중인 wait는 상한 50ms 간격으로 operation 취소 token을 폴링합니다
경합 없는 경로는 wait 이벤트를 할당하지 않고, 경합한 operation은 전용 이벤트 하나를 쓰며 스핀하지 않습니다
구성
PDF.PeakMemorySchedulerEnabled := True;
PDF.PeakMemorySchedulerBudgetBytes := 768 * 1024 * 1024;
PDF.ResetPeakMemorySchedulerStatistics;
if PDF.GetPeakMemorySchedulerStatistics(Stats) then
begin
WriteLn(Stats.PeakReservedBytes);
WriteLn(Stats.DelayedAdmissionCount);
WriteLn(Stats.TotalWaitMilliseconds);
end;
PeakMemorySchedulerEnabled는 컴포넌트별이며 신뢰된 격리 작업은 승인을 우회할 수 있고, PeakMemorySchedulerBudgetBytes는 공유 프로세스 전역 스케줄러를 설정합니다
통계
THPDFPeakMemorySchedulerStatistics는 현재/피크 예약 바이트, 현재/피크 활성 예약, 현재/피크 대기자, 총/지연 승인, 초대 승인, 취소, 누적 대기 시간을 보고합니다
THPDFOperationTelemetry.ScheduledMemoryBytes, MemorySchedulerWaitMilliseconds, MemorySchedulerDelayed는 스케줄링 비용을 가장 최근 operation에 귀속합니다