สิ่งที่มันเกิดขึ้นในฮาร์ดแวร์คอมพิวเตอร์ที่ทันสมัย booted ใน 16 บิตมรดกโหมด BIOS MBR เมื่อคุณเก็บไบต์เช่น'1'
(0x31) ลงในข้อความ VGA (โหมด 03) framebuffer ที่อยู่ทางกายภาพเชิงเส้นB8000
? วิธีช้าเป็นmov [es:di], eax
ร้านด้วยMTRRสำหรับภูมิภาคชุด UC? (การทดสอบทดลองบนแล็ปท็อป Kaby Lake iGPU หนึ่งตัวบ่งชี้ว่า clflushopt บน WC นั้นมีความเร็วเท่ากับ UC สำหรับหน่วยความจำ VGA โดยประมาณ แต่หากไม่มี clflushopt การจัดmov
เก็บไปยังหน่วยความจำ WC จะไม่ออกจาก CPU และไม่อัปเดตหน้าจอเลย .)
หากไม่ใช่ SMI สำหรับทุกร้านมีวิธีใดที่จะประมาณค่าใช้จ่ายนี้สำหรับหน่วยความจำ WB ในพื้นที่ผู้ใช้สำหรับการทดลองประสิทธิภาพโดยไม่ต้องบูตเครื่องใหม่ในโหมดจริงหรือไม่ (เช่นการใช้หน้า BSS เป็น framebuffer แบบหลอกที่ไม่ได้แสดงที่ใดก็ได้)
ตัวอักษรที่สอดคล้องกันปรากฏขึ้นบนหน้าจอในการรีเฟรชครั้งต่อไป แต่ฮาร์ดแวร์สแกนเอาท์จริงๆแล้วอ่านว่า ASCII ถ่านจาก VRAM (หรือ DRAM สำหรับ iGPU) และการแมปไปยังสัญลักษณ์ตัวอักษรบิตแมปในทันที? หรือมีการสกัดกั้นซอฟต์แวร์ในแต่ละร้านค้าหรือหนึ่งครั้งต่อ vblank ดังนั้นฮาร์ดแวร์ที่แท้จริงเท่านั้นที่ต้องจัดการกับ framebuffer บิตแมป?
การบู๊ต BIOS ดั้งเดิมเป็นที่รู้จักกันดีในการใช้ System Management Mode (SMM)เพื่อจำลอง USB kbd / mouse เป็นอุปกรณ์ PS / 2 ฉันสงสัยว่ามันยังใช้สำหรับเฟรมข้อความโหมด VGA ฉันคิดว่ามันจะใช้สำหรับ VGA I / O พอร์ตสำหรับโหมดการตั้งค่า แต่มันก็เป็นไปได้ว่า framebuffer ข้อความได้รับการสนับสนุนโดยฮาร์ดแวร์ อย่างไรก็ตามคอมพิวเตอร์ส่วนใหญ่ใช้เวลาตลอดเวลาในโหมดกราฟิกดังนั้นการละทิ้งการสนับสนุน HW สำหรับโหมดข้อความดูเหมือนว่าผู้ขายอาจต้องการทำ (OTOH บล็อกนี้แสดงให้เห็นว่าตัวควบคุม verilog VGA แบบ homebrew สามารถใช้โหมดข้อความได้อย่างง่ายดาย)
ฉันสนใจระบบที่ใช้ iGPU ใน Intel Skylakeแต่จะสนใจ iGPUs ก่อนหน้า / ต่อมาจาก Intel และ AMD และ GPU แยกหรือเก่า
(รวมถึงผู้จำหน่ายอื่น ๆ นอกเหนือจาก AMD และ NVidia มีเมนบอร์ด Skylake บางรุ่นที่มีสล็อต PCI ไม่ใช่ PCIe หากไดรเวอร์เฟิร์มแวร์ GPU สมัยใหม่จำลองโหมดข้อความอาจสันนิษฐานว่ามีการ์ดวิดีโอ PCI เก่าที่มีโหมดข้อความ VGA ฮาร์ดแวร์และอาจเป็นการ์ดดังกล่าว สามารถทำให้ร้านค้าเป็นเพียงธุรกรรม PCI แทน SMI)
เดสก์ท็อปของฉันคือ i7-6700k ในโทรศัพท์มือถือ Asus Z170 Pro Gaming ไม่มีการ์ดเสริมเพียงแค่ iGPU พร้อมจอมอนิเตอร์ 1920x1200 บนเอาต์พุต DVI-D ฉันไม่ทราบรายละเอียดของ Kaby Lake i5-7300HQ ระบบ @Eldan กำลังทำการทดสอบเฉพาะรุ่น CPU
ผมพบว่าPhoenix BIOS ของUS20120159520 สิทธิบัตรจาก 2011 ,
เผื่อวิดีโอแบบเดิมโดยใช้ UEFI แทนที่จะต้องการให้ผู้จำหน่ายฮาร์ดแวร์วิดีโอจัดหาทั้ง UEFI และตัวเลือกรอมโหมดจริง 16 บิตเนทิฟพวกเขาเสนอไดรเวอร์ VGA โหมดจริง ( int 10h
ฟังก์ชั่นและอื่น ๆ ) ที่เรียกใช้ไดรเวอร์วิดีโอ UEFI ที่ผู้จำหน่ายจัดจำหน่ายผ่าน SMM hooks
บทคัดย่อ
[... ] ROM ตัวเลือกวิดีโอทั่วไปแจ้งให้ทราบถึงไดรเวอร์ SMM วิดีโอทั่วไปของคำขอบริการวิดีโอ การแจ้งเตือนดังกล่าวอาจดำเนินการโดยใช้ซอฟต์แวร์การจัดการระบบขัดจังหวะ (SMI) เมื่อได้รับการแจ้งเตือนไดรเวอร์วิดีโอ SMM ทั่วไปจะแจ้งให้ทราบถึงไดรเวอร์วิดีโอ UEFI บุคคลที่สามของคำขอวิดีโอ โปรแกรมควบคุมวิดีโอของ บริษัท อื่นให้บริการวิดีโอที่ร้องขอไปยังระบบปฏิบัติการ ด้วยวิธีนี้ไดรเวอร์กราฟิก UEFI ของบุคคลที่สามอาจรองรับระบบปฏิบัติการที่หลากหลายแม้กระทั่งระบบที่ไม่สนับสนุนโปรโตคอลการแสดงผลแบบ UEFI
คำอธิบายส่วนใหญ่ครอบคลุมการจัดการการint 10h
โทรและสิ่งต่าง ๆ เช่นที่เห็นได้ชัดว่าดักจับผ่าน IVT ดังนั้นจึงสามารถเรียกใช้รหัสที่กำหนดเองได้อย่างง่ายดายซึ่งก่อให้เกิด SMI ตามวัตถุประสงค์ ส่วนที่เกี่ยวข้องคือสิ่งที่พวกเขาอธิบายสำหรับร้านค้าโดยตรงใน framebuffer โหมดข้อความซึ่งจำเป็นต้องทำงานแม้สำหรับรหัสที่ไม่เรียกใช้ซอฟต์แวร์หรือฮาร์ดแวร์ขัดจังหวะ (นอกเหนือจาก HW ที่เรียกใช้ SMI ในร้านค้าดังกล่าวซึ่งพวกเขากล่าวว่าสามารถใช้งานได้หากได้รับการสนับสนุน)
การสนับสนุนบัฟเฟอร์ข้อความ
[0066] ใน embodiments บางการใช้งานอาจจัดการกับข้อความ VGA ของบัฟเฟอร์โดยตรง ในศูนย์รวมดังกล่าวไดรเวอร์วิดีโอ SMM ทั่วไป 130 สนับสนุนสิ่งนี้ในหนึ่งในสองวิธีขึ้นอยู่กับว่าฮาร์ดแวร์จัดเตรียมการดักจับ SMI บนการเข้าถึงการอ่าน / เขียนไปยังพื้นที่หน่วยความจำ 740 KB-768 KB (ซึ่งบัฟเฟอร์ข้อความอยู่)
[0067] เมื่อการวางกับ SMI พร้อมใช้งานฮาร์ดแวร์จะสร้าง SMI บนการเข้าถึงเพื่ออ่านหรือเขียนแต่ละครั้ง การใช้ที่อยู่กับดักของกับดัก SMI คอลัมน์ข้อความและแถวที่แน่นอนอาจถูกคำนวณและแถวและคอลัมน์ที่เกี่ยวข้องในการเข้าถึงหน้าจอข้อความเสมือน
อีกทางหนึ่งหน่วยความจำปกติเปิดใช้งานสำหรับภูมิภาคนี้และโดยใช้ SMI เป็นระยะ ๆ ไดรเวอร์วิดีโอ SMM ทั่วไป 130 จะสแกนหาการเปลี่ยนแปลงในบัฟเฟอร์ข้อความฮาร์ดแวร์ที่จำลองและปรับปรุงหน้าจอข้อความเสมือนที่สอดคล้องกันซึ่งดูแลโดยไดรเวอร์วิดีโอ ในทั้งสองกรณีเมื่อตรวจพบการเปลี่ยนแปลงอักขระจะถูกวาดใหม่บนหน้าจอข้อความเสมือน
นี่เป็นเพียงสิทธิบัตรของผู้ขายไบออสรายหนึ่งและไม่ได้บอกเราว่าฮาร์ดแวร์ส่วนใหญ่ใช้งานได้จริงหรือไม่ เป็นหลักยืนยันว่ามีฮาร์ดแวร์บางอย่างที่สามารถดักจับในร้านค้าในช่วงนั้นได้ (เว้นแต่เป็นเพียงความเป็นไปได้สมมุติที่พวกเขาตัดสินใจที่จะครอบคลุมในสิทธิบัตรของพวกเขา)
สำหรับกรณีการใช้งานที่ฉันมีอยู่ในใจการวางกับการรีเฟรชหน้าจอจะเร็วกว่าการวางกับทุกร้านอย่างมากฉันจึงอยากรู้ว่าฮาร์ดแวร์ / เฟิร์มแวร์ตัวใดทำงานได้ดี
แรงจูงใจสำหรับคำถามนี้
การเพิ่มประสิทธิภาพตัวนับทศนิยม ASCII ที่เพิ่มขึ้นใน Video RAM ในรุ่นที่ 7 Intel Core - จัดเก็บตัวเลขใหม่สำหรับตัวนับข้อความ ASCII ไปยังหน่วยความจำวิดีโอไบต์เดียวกันไม่กี่ไบต์
ฉันทดสอบรุ่นของรหัสในพื้นที่ผู้ใช้แบบ 32 บิตภายใต้ Linux ในหน่วยความจำ WB โดยหวังว่าจะประมาณสถานการณ์ด้วยmovnti
วิธีที่แตกต่างกันในการทำให้ซีพียูซิงค์บัฟเฟอร์ WC กับ RAM วิดีโอหลังจากแต่ละร้าน (หรืออาจเป็นครั้งคราวใน ตัวจับเวลาขัดจังหวะ) แต่นี่ไม่ใช่ความจริงหากสถานการณ์ bootloader แบบเรียลไทม์ไม่ได้จัดเก็บไว้ที่ DRAM แต่เป็นการกระตุ้น SMI แทน
ในหน่วยความจำ WB ล้างmovnti
ร้านค้าที่มีค่อนข้างเร็วกว่าการล้างด้วยlock xor byte [esp], 0
clflushopt
แต่ @Eldan รายงานว่าไม่มีการปรับปรุงความเร็วสำหรับผู้ที่อยู่ในหน่วยความจำ VGA หลังจากเขียนโปรแกรม MTRR เพื่อให้เป็น WC (และความเร็วเดียวกันกับต้นฉบับที่ทำตามร้านค้าปกติโดยระบุว่าค่าเริ่มต้นคือ framebuffer VGA คือ UC BIOSes รุ่นเก่าบางตัวมีตัวเลือกในการสร้างหน่วยความจำ VGA WCซึ่งพวกเขาเรียกว่า USWC = Uncached Speculative Write Combining)
มันไม่ได้เป็นปัญหาที่แท้จริงของโลกดังนั้นฉันไม่ได้มองหาวิธีการแก้ปัญหาที่เกิดขึ้นจริง ; แม้ว่ามันจะน่าสนใจที่จะทราบว่าการจัดเก็บพิกเซลพิกเซลด้วยตนเองในโหมดกราฟิก VGA อาจเร็วกว่ามาก
สรุป
- ระบบที่ทันสมัยจริง ๆ / ใด ๆ เรียก SMI ในทุก ๆ ร้านไปที่ framebuffer โหมดข้อความหรือไม่?
- ถ้าไม่เราสามารถประมาณค่า WC store + clflush กับ framebuffer โดยใช้ movnti + บางอย่างในพื้นที่ผู้ใช้ในหน่วยความจำ WB ได้หรือไม่? ดังนั้นเราจึงสามารถโปรไฟล์กับ
perf
เคาน์เตอร์วัดประสิทธิภาพได้อย่างง่ายดาย - หาก BIOSes และ / หรือฮาร์ดแวร์ที่แตกต่างกันใช้กลยุทธ์ที่ต่างกันกลยุทธ์เหล่านั้นคืออะไร (ฉันไม่ต้องการรายละเอียดเพียงระดับสูงเช่น "SMI ทุก vblank เพื่อซิงค์ VGA framebuffer กับฮาร์ดแวร์ framebuffer จริง")
- การ์ดวิดีโอ PCIe หรือ PCI ที่มี textmode เป็นฮาร์ดแวร์ VGA จะเร็วกว่า GPU ที่รวมอยู่ในตัวหรือไม่ ฉันเดาว่าธุรกรรมการเขียน PCIe จริงจะช้ากว่าการรอให้ร้านค้าเข้าสู่ DRAM แต่การเขียน PCIe นั้นจะถูกกว่า SMI ในทุกร้าน ballpark / ลำดับการเปรียบเทียบขนาดน่าสนใจ
คำถามเหล่านี้เกี่ยวข้องกันมาก แต่ฉันสามารถแยกคำถามนี้ออกได้หากไม่มีการเหลื่อมซ้อนกันอย่างที่คาดไว้
perf
เนื่องจาก Linux ยังไม่ได้บูต การประเมินเวลาแฝง SMI (การจัดการระบบขัดจังหวะ) บนเครื่อง Linux-CentOS / Intelมีรายละเอียดบางอย่างเกี่ยวกับวิธีการนับ SMIs
MSR_SMI_COUNT=0x34
โดยไม่ต้องเขียนโปรแกรมตัวนับก่อน