Scheduling del Picco di Memoria
HotPDF ammette le operazioni concorrenti ad alto ingombro attraverso un unico budget di byte a livello di processo prima che allochino i loro working set principali
Operazioni coperte
- Caricamento dei documenti
- Rendering di pagine sincrono, in cache e progressivo
- Rendering parallelo di pagine, tile e bande
- Ottimizzazione selettiva degli stream
- Ottimizzazione parallela limitata delle immagini
Ogni operazione riserva una stima conservativa derivata dalla dimensione della sorgente, dalle dimensioni di rendering, dal DPI, dalla soglia degli stream e dal numero di worker, poi rilascia la riserva al confine esistente di telemetria dell'operazione
Politica di ammissione
- Il budget predefinito a livello di processo è
536870912byte - Il valore
0disattiva la limitazione del budget - I waiter vengono ammessi in ordine FIFO, così richieste piccole successive non possono affamare una richiesta grande precedente
- Una richiesta più grande del budget configurato può girare solo quando nessun'altra riserva è attiva
- Aumentare il budget può ammettere immediatamente il lavoro in coda, mentre ridurlo non interrompe mai il lavoro attivo
- Le attese in coda interrogano il cancellation token dell'operazione a intervalli limitati di 50 ms
Il percorso senza contesa non alloca alcun evento di attesa, mentre le operazioni in contesa usano un evento privato e non fanno spin
Configurazione
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 è per componente e può bypassare l'ammissione per lavoro isolato e fidato, mentre PeakMemorySchedulerBudgetBytes configura lo scheduler condiviso a livello di processo
Statistiche
THPDFPeakMemorySchedulerStatistics riporta byte riservati correnti e di picco, riserve attive correnti e di picco, waiter correnti e di picco, ammissioni totali e ritardate, ammissioni oversize, cancellazioni e tempo di attesa aggregato
THPDFOperationTelemetry.ScheduledMemoryBytes, MemorySchedulerWaitMilliseconds e MemorySchedulerDelayed attribuiscono il costo dello scheduling all'operazione più recente