การจัดตารางหน่วยความจำช่วงพีค
HotPDF รับ operation ที่กินพื้นที่สูงที่แย่งกันเข้ามาผ่านงบประมาณไบต์ระดับ process ชุดเดียว ก่อนที่พวกมันจะจอง working set หลัก
การดำเนินการที่ครอบคลุม
- การโหลดเอกสาร
- การเรนเดอร์หน้าแบบ synchronous, แบบใช้แคช และแบบค่อยเป็นค่อยไป
- เรนเดอร์หน้า tile และแถบแบบขนาน
- การปรับปรุง stream แบบเลือกเฉพาะ
- การปรับปรุงรูปภาพแบบขนานที่จำกัดขอบเขต
operation แต่ละตัวจองค่าประมาณแบบอนุรักษ์นิยม ที่ derive จากขนาด source, มิติการเรนเดอร์, DPI, threshold ของ stream กับจำนวน worker แล้วปล่อย reservation ที่ขอบเขต telemetry ของ operation เดิม
นโยบายการรับเข้า
- งบประมาณ default ทั้ง process คือ
536870912ไบต์ - ค่า
0จะปิดการจำกัดงบประมาณ - waiter ถูกรับเข้าตามลำดับ FIFO คำขอเล็กที่มาทีหลังจึงอดอาหารคำขอใหญ่ที่มาก่อนไม่ได้
- คำขอที่ใหญ่กว่างบประมาณที่ตั้งไว้จะทำงานได้เฉพาะเมื่อไม่มีการจองอื่นที่ยังใช้งานอยู่
- เพิ่มงบประมาณจะรับงานที่รอคิวเข้าทันทีได้ แต่การลดลงจะไม่ตัดงานที่ทำอยู่เด็ดขาด
- คิวรอจะ poll cancellation token ของงานเป็นรอบ 50 ms แบบจำกัด
เส้นทางที่ไม่มีใครแย่งไม่จอง wait event ขณะที่ operation ที่มีการแย่งใช้ event ส่วนตัวหนึ่งตัวและไม่หมุนรอแบบ spin
การตั้งค่า
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 ตั้งต่อ component และยืมการรับเข้าสำหรับงานที่แยกและเชื่อถือได้ได้ ขณะที่ PeakMemorySchedulerBudgetBytes ตั้งงบประมาณ scheduler ระดับ process ที่แชร์กัน
สถิติ
THPDFPeakMemorySchedulerStatistics รายงานไบต์ที่จองไว้ปัจจุบันกับสูงสุด, reservation ที่ active ปัจจุบันกับสูงสุด, waiter ปัจจุบันกับสูงสุด, การรับเข้าทั้งหมดกับที่ถูกเลื่อน, การรับเข้าที่เกินขนาด, การยกเลิก และเวลารอรวม
THPDFOperationTelemetry.ScheduledMemoryBytes, MemorySchedulerWaitMilliseconds กับ MemorySchedulerDelayed ผูกต้นทุนการจัดคิวกับ operation ล่าสุด