คำถามง่าย ๆ
SQL Server Quantum (4 ms) มีการซิงโครไนซ์กับ Quantum Server OS อย่างไร (ปกติ: 187.5 ms)
อธิบายคำถามง่าย ๆ
หลังจากที่ใช้ควอนตัม OS 184 ms (ซึ่งสอดคล้องกับควอนตัม SQL แบบเต็ม 46) ควอนตัม OS นั้นมีเวลา 3.5 มิลลิวินาทีก่อนที่มันจะต้องส่งมอบตารางเวลาให้กับกระบวนการอื่น SQL OS เริ่มต้นควอนตัม (4 ms) และหลังจาก 3.5 ms, ควอนตัม OS ได้ตัดสินใจที่จะหยุดเธรด SQL OS ปัจจุบันซึ่งยังคงมี 0.5 มิลลิวินาทีก่อนที่มันจะให้ผลตามกำหนดเวลา เกิดอะไรขึ้น?
Dive Deep บน OS Quantum
ในสองส่วนถัดไปฉันจะเขียนสิ่งที่ฉันได้พบเกี่ยวกับควอนตัม OS และวิธีคำนวณระยะเวลาของควอนตัม ระยะเวลาของ "ควอนตัม" ของระบบปฏิบัติการขึ้นอยู่กับ "เห็บ" และระยะเวลาของ "เห็บ" นั้นขึ้นอยู่กับ "ช่วงเวลาของนาฬิกา" ซึ่งโดยปกติคือ 15.625000 มิลลิวินาที แต่ขอผมอธิบายหน่อย ...
เห็บ
ในบทความบล็อกรู้จักเจ้าติ๊กผู้เขียนจิมอธิบายพื้นฐานของช่วงเวลาของนาฬิกา (aka "เห็บ") และสิ่งที่พวกเขามีไว้เพื่อ
เมื่อฉันอ่านบางสิ่งเช่น“ ช่วงเวลาของนาฬิกา…สำหรับตัวประมวลผลหลายตัว x86 ส่วนใหญ่คือประมาณ 15 มิลลิวินาที” ฉันถูกบังคับให้กำหนดค่าของนาฬิกาของฉันหรือ“ ขีด” ช่วงเวลา โชคดีที่หนังสือที่ฉันอ่านอ้างถึงนี้ Windows Internals Fourth Edition มีข้อมูลอ้างอิงสำหรับช่วยเหลือฉันด้วยความทุกข์ ... ผู้เขียน Mark Russinovich จากหนังสือดังกล่าวได้ทำClockResยูทิลิตี้ที่มีอยู่บนเว็บไซต์ของเขา ใช้ยูทิลิตี้นี้ฉันสามารถตรวจสอบว่าช่วงเวลาสัญญาณนาฬิกาบนพีซีแบบมัลติโปรเซสเซอร์ x86 ของฉันคือ 15.625000 ms น่าสนใจ แต่ใจที่อยากรู้อยากเห็นอยากรู้มากขึ้น
ควอนตัม
ผู้เขียนบทความอธิบายต่อไปในบทความที่สองของเขา ที่...
แน่นอนเหตุผลที่แท้จริงว่าทำไมช่วงเห็บเป็นสิ่งที่สำคัญก็คือว่ามันมีผลกระทบต่อการจัดตารางเวลาด้าย ตัวกำหนดตารางเวลาของ Windows จะให้ "เวลา" ของเธรดเพื่อดำเนินการก่อนที่จะอนุญาตให้งานอื่นที่มีระดับความสำคัญเท่ากันทำงานได้ ควอนตัมที่ตัวกำหนดตารางเวลากำหนดให้กับเธรดคือช่วงเวลาหลายช่วงเวลาของเห็บ ค่าควอนตัมเฉพาะที่เลือกสำหรับเธรดที่ระบุนั้นค่อนข้างเกินกว่าที่ฉันต้องการจะไปกับบทความนี้
ตกลงดังนั้นฉันรู้ว่าควอนตัมคืออะไร แต่ไม่นานว่าควอนตัมจะทำงาน
ตอนนี้เรามาดูค่าควอนตัมเริ่มต้นสำหรับเธรดเบื้องหน้าใน XPe ในกรณีนี้ตัวกำหนดตารางเวลาของ Windows จะกำหนดช่วงเวลา 18 หรือ 6 ขีด (ใช่ในการแปลงควอนตัมเพื่อทำเครื่องหมายช่วงเวลาหนึ่งจะต้องหารด้วย 3 ... แต่เหตุผลสำหรับการคูณคือการอนุญาตให้ตัวกำหนดตารางเวลาความสามารถในการ "คิดค่าใช้จ่าย" เธรดสำหรับการดำเนินการที่ทำให้หยุดชั่วคราว)
ตอนนี้เรารู้ว่าช่วงเวลาของนาฬิกา (ติ๊ก) ควรอยู่ที่ประมาณ 15.625000 ms และในระบบปฏิบัติการ Windows Desktop ที่ควอนตัมเริ่มต้นคือ 18 ซึ่งจะส่งผลให้มี 6 เห็บหรือ 93.750000 ms (18/3 * 15.625000 ms)
บน Windows Server OS ควอนตัมเริ่มต้นนั้นแตกต่างกัน การตั้งค่า "การตั้งเวลาตัวประมวลผล" ถูกตั้งค่าเป็น "บริการพื้นหลัง"
การตั้งค่านี้สามารถพบได้ผ่าน "การตั้งค่าระบบ | ขั้นสูง (แท็บ) | ประสิทธิภาพ (ส่วน) | การตั้งค่า ... " ซึ่งจะเปิด "ตัวเลือก Perofrmance | ขั้นสูง (แท็บ) | การตั้งเวลาตัวประมวลผล"
การตั้งค่าควอนตัมเริ่มต้นคือ 36 (พื้นหลัง) ถึง 36 (เบื้องหน้า) ควอนตัมมีขนาดใหญ่กว่าและนานกว่านี้ นี่เป็นสองเท่าของ 93.750000 ms ของการตั้งค่าเบื้องหน้าควอนตัม 18 (6 ขีด) บน Windows Desktop OS ซึ่งบนระบบปฏิบัติการเซิร์ฟเวอร์ที่ติดตั้งสำหรับบริการพื้นหลังอยู่ที่ประมาณ 187.500000 มิลลิวินาที
การสังเกต / คำอธิบาย
เมื่อคุณเปลี่ยนการตั้งค่าจาก "บริการพื้นหลัง" เป็น "Applicaitons" บนเซิร์ฟเวอร์หรือเดสก์ท็อปดังนั้นคีย์ HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparationในรีจิสทรีจะเปลี่ยนจาก 0x18 เป็น 0x02 ค่าควอนตัมเริ่มต้นสำหรับ 0x02 คืออะไร สามารถพบได้ในความคิดเห็น:
ค่า 0x02 แสดงว่าเขตข้อมูล "สั้นกับยาว" และ "ตัวแปรเทียบกับคงที่" เป็นค่าเริ่มต้นสำหรับระบบปฏิบัติการ
ค่าเริ่มต้นสำหรับฟิลด์เหล่านี้สำหรับ XPe & XP Pro คือ: Short & Variable ซึ่งเหมือนกับการตั้งค่าบิตเพิ่มเติมบิตต่อไปนี้: 0x24
หรือการใช้ค่านี้ด้วย 0x02 จะให้ 0x26 ซึ่งคุณจะพบในตารางในบทความ
การอ้างอิง: ความคิดเห็นที่ "Master Quantum ของคุณ" (บล็อก MSDN)
ตารางอธิบายการตั้งค่าควอนตัมจากบทความเดียวกัน:
Win32PrioritySeparation Foreground Background
0x28, 0x29, 0x2A 18 18
0x18, 0x19, 0x1A 36 36
0x24 6 6
0x25, 0x14 12 6
0x26 18 6
0x15 24 6
0x16 36 6
สรุปสั้น ๆ ของ Quantum OS
จากข้อมูลข้างต้นและคำพูดของบทความเรารู้ว่าควอนตัมไม่ใช่ขนาดคงที่ แต่ได้มาจากการตั้งค่าระบบปฏิบัติการในคุณสมบัติของระบบ ควอนตัมจะแตกต่างกันไปขึ้นอยู่กับการWin32PrioritySeparationตั้งค่าในรีจิสทรีซึ่งโดยทั่วไปจะสอดคล้องกับการตั้งค่าหนึ่งใน "คุณสมบัติของระบบ" ("บริการพื้นหลัง" หรือ "แอปพลิเคชัน")
ควอนตัมที่ระดับ OS คือ
- สำหรับการตั้งค่า "แอปพลิเคชัน"
- 18 (ซึ่งคือ 6 เห็บ) สำหรับแอปพลิเคชันเบื้องหน้า (93.75 ms)
- 6 (ซึ่งคือ 2 เห็บ) สำหรับแอปพลิเคชันพื้นหลัง (31.25 มิลลิวินาที)
- สำหรับการตั้งค่า "บริการพื้นหลัง"
- 36 (ซึ่งเท่ากับ 18 เห็บ) สำหรับแอปพลิเคชันเบื้องหน้า (187.5 มิลลิวินาที)
- 36 (ซึ่งคือ 18 เห็บ) สำหรับแอปพลิเคชันพื้นหลัง (187.5 มิลลิวินาที)
ดังนั้นตอนนี้เราจึงรู้ว่าระบบควอนตัม OS บนการตั้งค่า Windows Server ที่จะปรับให้เหมาะกับBackground Servicesคือ ...
36 / 3 * 15.625000 ms = 187.5 ms
SQL OS Quantum
ส่วนนี้แสดงรายการสิ่งที่ฉันพบบนควอนตัม SQL OS ...
SOS_SCHEDULER_YIELD รอประเภท
จากคำอธิบายของ Paul Randall เกี่ยวกับประเภทรอ SOS_SCHEDULER_YIELD:
ประเภทการรอนี้คือเมื่อเธรดสามารถดำเนินการสำหรับควอนตัมเธรดแบบเต็ม(4 มิลลิวินาทีในทุกเวอร์ชันของ SQL Server ไม่สามารถเปลี่ยนได้ ) และให้ผลตอบแทนที่กำหนดโดยสมัครใจย้ายไปที่ด้านล่างของ Runnable Queue ในกำหนดการ
การอ้างอิง: SOS_SCHEDULER_YIELD (SQLSkills.com Wait Type)
Schedulers ใน SQL Server DMVs
ในคำอธิบายเกี่ยวกับ SQL Server DMVs สำหรับ sys.dm_os_schedulers DMV
[... ] Windows ใช้กลไกการกำหนดตารางเวลาไว้ล่วงหน้าและกำหนดควอนตัมของเวลา CPU ให้กับทุกเธรดเมื่อเธรดใช้ปริมาณของมันจะถูกส่งไปยังคิวและเธรดอื่น ๆ จะได้รับการดำเนินการ
ในทางตรงกันข้าม SQL Server ใช้กลไกการจัดตารางเวลาแบบมีส่วนร่วมเมื่อเธรดสามารถสร้างปริมาณเวลาได้โดยสมัครใจ (คุณสามารถเห็นพฤติกรรมนี้เมื่อคุณมีประเภทรอ SOS_SCHEDULER_YIELD) สิ่งนี้ช่วยให้ SQL Server ปรับการใช้ CPU ให้เกิดประโยชน์สูงสุดเนื่องจากเมื่อเธรดส่งสัญญาณสำหรับการดำเนินการ แต่ไม่พร้อมที่จะเรียกใช้สามารถส่งผลให้เวลาของควอนตัมแก่เธรดอื่น ๆได้
การอ้างอิง: การทำความเข้าใจเกี่ยวกับตัวกำหนดเวลาของเซิร์ฟเวอร์ SQL คนงานและงาน (MSSQLTips.com)
ตรวจจับแรงกดดันซีพียูเซิร์ฟเวอร์ SQL
นี่เป็นส่วนเล็ก ๆ ของบทความเกี่ยวกับแรงดัน CPU ใน SQL Server
เกิดขึ้นเมื่องานโดยสมัครใจทำให้ตัวจัดตารางเวลาสำหรับงานอื่น ๆ เพื่อดำเนินการ ในช่วงการรอคอยนี้งานที่กำลังรอให้ควอนตัมที่จะได้รับการต่ออายุ
การอ้างอิง: ตรวจจับแรงดัน CPU ของเซิร์ฟเวอร์ SQL (MSSQLTips.com)
sys.dm_os_schedulers (Microsoft เอกสาร)
ฉันเดาว่าข้อความต่อไปนี้เป็นตัวอย่างข้อมูลที่สำคัญที่สุดเกี่ยวกับควอนตัม SQL OS ที่ฉันสามารถหาได้:
quantum_length_us bigint Identified for informational purposes only. Not supported. Future compatibility is not guaranteed. Exposes the scheduler quantum used by SQLOS.
การอ้างอิง: sys.dm_os_schedulers (Transact-SQL) (Microsoft | Docs)
ปริศนาของฉัน
Quantum Server OS ควบคุมปริมาณเวลาของ SQL Server Service ที่อนุญาตให้เรียกใช้งาน "task" Quantum OS ของ SQL Server ถูกกำหนดเป็น 4 ms ถ้าฉันหาร 187.5 ms ด้วย 4 ms ฉันจะเหลือ 3.5 ms
และเรายังไม่ได้เริ่มการสนทนาเมื่อตั้งค่าช่วงเวลาของนาฬิกาเป็นอย่างอื่นที่ไม่ใช่ค่าเริ่มต้นคือ 15.625000 ms ....
คำถามง่าย ๆ
SQL Server Quantum (4 ms) มีการซิงโครไนซ์กับ Quantum Server OS อย่างไร (ปกติ: 187.5 ms)
อธิบายคำถามง่าย ๆ
หลังจากที่ใช้ควอนตัม OS 184 ms (ซึ่งสอดคล้องกับควอนตัม SQL แบบเต็ม 46) ควอนตัม OS นั้นมีเวลา 3.5 มิลลิวินาทีก่อนที่มันจะต้องส่งมอบตารางเวลาให้กับกระบวนการอื่น SQL OS เริ่มต้นควอนตัม (4 ms) และหลังจาก 3.5 ms, ควอนตัม OS ได้ตัดสินใจที่จะหยุดเธรด SQL OS ปัจจุบันซึ่งยังคงมี 0.5 มิลลิวินาทีก่อนที่มันจะให้ผลตามกำหนดเวลา เกิดอะไรขึ้น?