Pertanyaan sederhana
Bagaimana SQL Server Quantum (4 ms) disinkronkan dengan Server OS Quantum (biasanya: 187,5 ms)?
Pertanyaan Sederhana Dijelaskan
Setelah 184 ms kuantum OS digunakan (yang sesuai dengan 46 kuantum SQL penuh), kuantum OS memiliki 3,5 ms waktu sebelum harus menyerahkan jadwal ke proses yang berbeda. SQL OS memulai kuantum (4 ms) dan setelah 3,5 ms, kuantum OS telah memutuskan untuk menghentikan utas SQL OS saat ini yang masih memiliki 0,5 ms sebelum akan menghasilkan jadwal. Apa yang terjadi sekarang?
Menyelam dalam pada OS Quantum
Dalam beberapa bagian berikutnya saya akan menulis apa yang telah saya temukan sejauh ini mengenai kuantum OS dan bagaimana durasi kuantum dapat dihitung. Durasi "kuantum" OS didasarkan pada "kutu" dan durasi "kutu" itu sendiri didasarkan pada "interval jam" yang biasanya 15,625000 ms. Tapi izinkan saya menguraikan sedikit ...
Kutu
Dalam artikel Blog Know Thy Tick Anda , Jim menjelaskan dasar-dasar interval jam (alias "ticks") dan untuk apa mereka.
Ketika saya membaca sesuatu seperti "interval jam ... untuk sebagian besar multiprosesor x86 adalah sekitar 15 milidetik", saya terdorong untuk menentukan nilai jam saya, atau "centang", interval. Untungnya, buku yang saya baca kutipan ini, Windows Internals Fourth Edition memberikan referensi untuk membantu saya dengan kesengsaraan saya. ... Penulis, Mark Russinovich, dari buku yang disebutkan di atas telah dengan ramah membuat utilitas ClockRes tersedia di situs web-nya. Menjalankan utilitas ini, saya dapat menentukan bahwa interval jam pada PC multiprosesor x86 saya adalah 15,625000 ms. Menarik, tetapi pikiran penasaran saya ingin tahu lebih banyak.
Kuantum
Penulis artikel selanjutnya menjelaskan dalam artikel keduanya bahwa...
Tentu saja alasan sebenarnya mengapa interval tick penting adalah karena ia mempengaruhi penjadwalan thread . Penjadwal Windows memberi setiap untaian "kuantum" waktu untuk dieksekusi sebelum mengizinkan tugas lain, pada tingkat prioritas yang sama, dijalankan. Kuantum yang ditetapkan penjadwal ke utas adalah kelipatan dari interval centang . Nilai kuantum spesifik yang dipilih untuk utas tertentu sedikit melampaui tempat saya ingin pergi dengan artikel ini.
Oke, jadi saya tahu apa itu kuantum, tapi tidak berapa lama kuantum akan berjalan.
Untuk saat ini, mari kita periksa nilai kuantum default untuk foreground thread di XPe. Dalam hal ini penjadwal Windows memberikan kuantum interval 18 atau 6 tick. (Ya, untuk mengonversi interval kuantum ke tick, seseorang harus membaginya dengan 3. ..., tetapi alasan multipel adalah untuk memungkinkan penjadwal kemampuan untuk "mengisi" utas untuk melakukan operasi yang menyebabkannya ditangguhkan.)
Kita sekarang tahu bahwa interval jam (centang) harus sekitar 15.625000 ms dan pada OS Desktop Windows di mana kuantum default adalah 18 bahwa ini akan menghasilkan 6 ticks atau 93.750000 ms (18/3 * 15.625000 ms).
Pada OS Windows Server, kuantum default berbeda. Pengaturan "Penjadwalan prosesor" diatur ke "Layanan Latar Belakang"
Pengaturan ini dapat ditemukan melalui "Pengaturan Sistem | Tingkat Lanjut (tab) | Kinerja (bagian) | Pengaturan ..." yang akan membuka "Opsi Pengaturan Tingkat Lanjut | Tingkat Lanjut (tab) | Penjadwalan Prosesor"
Pengaturan kuantum default adalah 36 (Latar Belakang) hingga 36 (Latar Depan). Kuantum lebih besar dan karenanya lebih lama. Ini dua kali lipat jumlah 93.750000 ms dari pengaturan forumround kuantum 18 (6 tick) pada OS Windows Desktop, yang pada OS server yang diatur untuk Layanan Latar Belakang adalah sekitar 187.500000 ms.
Observasi / Penjelasan
Ketika Anda mengubah pengaturan dari "Layanan latar belakang" ke "Aplikasi" pada server atau desktop, maka HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation kunci dalam registri diubah dari 0x18 ke 0x02. Berapa nilai kuantum default untuk 0x02? Ini dapat ditemukan di komentar:
Nilai 0x02 menyiratkan bahwa bidang "Pendek vs. Panjang" dan "Variabel vs. Tetap" adalah default untuk OS.
Default untuk bidang-bidang ini untuk XPe & XP Pro adalah: Pendek & Variabel yang sama dengan memiliki bit-bit tambahan berikut yang ditetapkan: 0x24.
ATAU nilai ini dengan 0x02 memberi Anda 0x26, yang akan Anda temukan di tabel di artikel.
Referensi: Komentar untuk "Kuasai Kuantum Anda" (Blog MSDN)
Tabel yang menjelaskan pengaturan kuantum dari artikel yang sama:
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
Ringkasan Singkat OS Quantum
Berdasarkan informasi dan kutipan artikel di atas, kita tahu bahwa kuantum bukan ukuran tetap, melainkan berasal dari pengaturan OS di System Properties. Kuantum bervariasi tergantung pada Win32PrioritySeparation
pengaturan di registri yang biasanya sesuai dengan salah satu pengaturan di "Properti Sistem" (baik "Layanan latar belakang" atau "Aplikasi").
Sebuah kuantum di level OS adalah
- untuk pengaturan "Aplikasi"
- 18 (yaitu 6 ticks) untuk aplikasi latar depan (93,75 ms)
- 6 (yaitu 2 ticks) untuk aplikasi latar belakang (31,25 ms)
- untuk pengaturan "Layanan Latar Belakang"
- 36 (18 kutu) untuk aplikasi latar depan (187,5 ms)
- 36 (18 kutu) untuk aplikasi latar belakang (187,5 ms)
Jadi sekarang kita tahu bahwa kuantum OS pada pengaturan Windows Server yang akan dioptimalkan untuk Layanan Latar Belakang ...
36 / 3 * 15.625000 ms = 187.5 ms
SQL OS Quantum
Bagian ini mencantumkan apa yang saya temukan pada SQL OS ...
SOS_SCHEDULER_YIELD Jenis Tunggu
Dari uraian Paul Randall tentang jenis tunggu SOS_SCHEDULER_YIELD:
Jenis menunggu ini adalah ketika utas dapat mengeksekusi untuk utas utas penuh (4 milidetik di semua versi SQL Server, tidak dapat diubah ), dan dengan sukarela menghasilkan penjadwal, bergerak ke bagian bawah Antrian Runnable di penjadwalnya.
Referensi: SOS_SCHEDULER_YIELD (Jenis Tunggu SQLSkills.com)
Penjadwal dalam DMV SQL Server
Dalam penjelasan tentang DMV SQL Server untuk sys.dm_os_schedulers DMV.
[...] Windows menggunakan mekanisme penjadwalan preemptive dan menetapkan jumlah waktu CPU untuk setiap utas, ketika utas mengkonsumsi kuantumnya, ia dikirim ke antrian dan utas lainnya diberikan eksekusi.
Sebaliknya, SQL Server menggunakan mekanisme penjadwalan kooperatif ketika utas dapat secara sukarela menghasilkan jumlah waktunya (Anda dapat melihat perilaku ini saat Anda memiliki jenis tunggu SOS_SCHEDULER_YIELD). Hal ini memungkinkan SQL Server untuk mengoptimalkan pemanfaatan CPU, karena ketika sebuah thread diisyaratkan untuk dieksekusi tetapi tidak siap untuk dijalankan, ia dapat menghasilkan kuantum waktu yang mendukung thread lain .
Referensi: Memahami Penjadwal, Pekerja, dan Tugas SQL Server (MSSQLTips.com)
Mendeteksi Tekanan CPU SQL Server
Ini adalah bagian yang sangat kecil dari artikel tentang tekanan CPU di SQL Server.
Terjadi ketika tugas secara sukarela menghasilkan penjadwal untuk tugas-tugas lain untuk dieksekusi. Selama menunggu ini, tugas sedang menunggu kuantumnya diperbarui .
Referensi: Mendeteksi Tekanan CPU SQL Server (MSSQLTips.com)
sys.dm_os_schedulers (Microsoft Documents)
Saya kira kutipan berikut adalah potongan informasi terpenting tentang SQL OS quantum yang bisa saya temukan:
quantum_length_us bigint Identified for informational purposes only. Not supported. Future compatibility is not guaranteed. Exposes the scheduler quantum used by SQLOS.
Referensi: sys.dm_os_schedulers (Transact-SQL) (Microsoft | Documents)
Teka-teki saya
Server OS Quantum mengatur berapa lama Layanan SQL Server diberikan untuk menjalankan "tugas". SQL Server OS Quantum didefinisikan sebagai 4 ms. Jika saya membagi 187,5 ms dengan 4 ms maka saya dibiarkan dengan 3,5 ms.
Dan kami bahkan belum memulai diskusi tentang kapan Interval Jam diatur ke sesuatu selain dari standar 15,625000 ms ....
Pertanyaan sederhana
Bagaimana SQL Server Quantum (4 ms) disinkronkan dengan Server OS Quantum (biasanya: 187,5 ms)?
Pertanyaan Sederhana Dijelaskan
Setelah 184 ms kuantum OS digunakan (yang sesuai dengan 46 kuantum SQL penuh), kuantum OS memiliki 3,5 ms waktu sebelum harus menyerahkan jadwal ke proses yang berbeda. SQL OS memulai kuantum (4 ms) dan setelah 3,5 ms, kuantum OS telah memutuskan untuk menghentikan utas SQL OS saat ini yang masih memiliki 0,5 ms sebelum akan menghasilkan jadwal. Apa yang terjadi sekarang?