Tarihi zamanlayıcısı - Deadline scheduler

Son tarih zamanlayıcısı bir olan G / Ç zamanlayıcısı için Linux çekirdeği tarafından 2002 yılında yazılmış Jens Axboe .

genel bakış

Tarihi zamanlayıcı ana hedefi bir istek için bir başlangıç servis süresini garanti etmektir. Bu taleplerin açlık önlemek için tüm G / Ç işlemlerini bir süre empoze ederek yapar. Ayrıca iki tarih korur sıraları (hem okuma ve yazma) sıralı kuyruklar ilave olarak,. Sıralanmış kuyruklar sektör sayısına göre sıralanır ise son tarih kuyruklar temelde, onların tarihine (son kullanma süresi) göre sıralanır.

Bir sonraki isteği Servisten önce, son zamanlayıcı kullanmak sıraya karar verir. Çünkü Oku kuyruklar, daha yüksek bir öncelik verilir süreçler genellikle okuma işlemlerini engeller. Daha sonra, son tarih zamanlayıcı kontrolleri son kuyruğunda ilk isteğinin süresi doldu eğer. Aksi takdirde, zamanlayıcı sıralanmış kuyruktan isteği toplu iş görür. Her iki durumda da zamanlayıcı de sıralanır kuyrukta seçilen talebi üzerine isteği toplu iş görür.

Varsayılan olarak, istekler, 500 ms bir son kullanma vakit istekleri 5 saniye sonra sona yazma okuma.

Zamanlayıcı erken bir versiyonu Ocak 2002'de Jens Axboe tarafından yayınlanmıştır.

Ölçümler son G / Ç zamanlayıcı belli parçacıklı iş yükleri için CFQ I / O scheduler geride ve ayrıca belirli veritabanı iş yükleri için göstermiştir.

sysfs tunables

fifo_batch (tam sayı)

Tarihi I / artan sektör sayısı bakımından sıralı operasyonlar kümeleridir "toplu" kavramı üzerinden Ey İşlemleri (GİB) çalıştırır. Bu ayarlanabilir bir toplu istekleri (bir anda hissetme inşa yığının süre sonu engelleme) diske sıraya önce olmak zorunda ne kadar büyük belirler. Daha küçük seriler azaltabilir gecikme (gelip istek beklemekte ziyade muhtemelen) er yürütülür yeni istekleri sağlanarak, fakat (sıralama aralarında bir parti içinde gerçekleşir değil çünkü) sürücü kafalarının genel hareketini arttırarak genel verimliliği düşürebilir . GİB sayısı yüksek ise ek olarak, yeterli toplu zaten zamanında çalıştırılacaktır.

read_expire (tam sayı)

'Read_expire' zaman 'doldu' okuma olarak kabul edilir ve bundan sonra milisaniye cinsinden maksimum süredir. Bir süt kutusuna üzerinde son kullanma tarihi gibi bu daha düşünün. Süt sona erme tarihinden önce iyi kullanılan olduğunu. son zamanlayıcı ile aynı. Emin tüm IO sona erme tarihinden önce verilir yapmaya teşebbüs DEĞİL olacaktır. IO geçerlilik tarihi geçmiş Ancak, o zaman öncelikli bir yumru alır .... uyarılar ile.

son zamanlayıcı yeniden değerlendirir kuyruğu okuyunca okuma sona erme kuyruk kontrol SADECE edilir. İçin bu sıralı okuma io akışı durumu için HARİÇ gönderilir her zaman demektir okur. Zamanlayıcı okuma kuyruğundan io akışı ederken, süresi dolmuş okuma değildir evaluated.When yeniden değerlendirilmesi okuma sırası, mantıktır

görmek için kontrol (FIFO [saat sipariş] kuyruk başında bakmak) okur süresi dolmuş kontrol önbelleğe halinde geçerli işaretçi (sıralı kuyruk bir süpürme kuyruğuna ucu geçileceğini öylesine akışı değil bile, önbelleğe işaretçi hala önceliklidir) okumak ardından ilki FIFO çekilir okur orada süresi geçerse sıralanmış kuyruktan ilk okuma pick up (başka süpürme tekrar ucunda başlar). Bu okuma sıralama sipariş için yeni nexus daha sonra okumak doldu unutmayın. bu bir kapanması sonrasında önbelleğe sonraki işaretçi sıralama sırasındaki ilk io işaret edecek kurulacaktır .... Unutulmaması gereken şey, onların son kullanma tarihi geçmiş bir kez sadece TÜMÜNÜ çalışmaması algoritma io dolmuş olmasıdır. Bu, bazı makul performans kriteri 'write_starved' yukarı harmanlanmasından tarafından tutulan tekrar süresi dolmuş okuma sırası denetleyerek önce birlikte okur izin verir.

Yani, okuma süresi io arasında yapılabilir io sayısı * 'writes_starved' 2 * 'fifo_batch' dir. 'Fifo_batch' akışının Bir set birinci io okumak süresi doldu ve bu akışı yazma hasret duruma sebep oldu, sonra muhtemelen başka bir 'fifo_batch' akış yazıyor sonra okur. Bu okuma süresi dolmuş kuyruğu yeniden değerlendirilmesi edileceği sonra daha kötü durumda olduğunu. En iyi ihtimalle, süresi dolan okuma sırası yazma sırası kullanılacak çünkü atlanır önce bir satırındaki 'write_starved' kez değerlendirilecektir.

write_expire (tam sayı)

read_expire Özdeş ama yazma işlemleri için (okur ayrı gruplar halinde gruplandırılmış).

writes_starved (tam sayı)

Daha önce belirtildiği gibi, son tarih yazım işlemine okur tercih eder. Sonuç olarak, bu işlemler yürütülür durumlara yol açabilir vardır neredeyse tamamen okur. write_expire uzun ya da tüm bant genişliği doygunluk yaklaşımlar için bu önemli bir tunable daha fazla olur. Bu okuma işlemleri pahasına yazıyor (görece) daha fazla bant genişliği verir azaltılması. Uygulama iş yükü, ancak, ağır okunur (örneğin çoğu HTTP veya dizin sunucuları) sadece arada bir yazma ile, ortalama GİB gecikme bir yazma toplu sıraya önce daha yapılmalıdır okur (böylece bu artırarak elde edilebilir azalmış diske).

front_merges (BOOL tamsayıdır)

Bir "ön birleştirme" G / Ç Zamanlayıcı, arayan yoğunlaşmak (veya "birleştirmek") daha sonra aktif toplu incelemek yeni bir operasyon alacak, daha az (daha büyük) işlemleri içine daha küçük istekleri ve operasyonları bulmak için denemek için bir işlemdir sektörü başlayan aynı veya hemen başka operasyonun başlangıç ​​sektörü sonradır. Bir "arka birleştirme" aktif toplu biten sektörler aynı veya hemen şimdiki operasyonun başlayan sektörler da sonra olan sektörler için aranır tersi vardır. verimini arttırmak için "adil" azalan, aktif bir akım partiden aktarmaları işlemleri birleştirme.

dosyaları genellikle ortaya koydu yolu nedeniyle, geri birleştirmeleri çok daha yaygın ön birleştirme daha vardır. Bazı iş yükleri için, hatta ön birleştirme isteklerine çalışırken herhangi vakit geçirmek için zaman kaybı olduğunu bilebilir. 0'a front_merges ayarlamak bu işlevselliği etkisiz. Ön birleştirmeleri hala önbelleğe last_merge ipucu nedeniyle oluşabilir ama bu temelde sıfır maliyetle geliyor çünkü, hala gerçekleştirilir. Bu boolean basitçe fonksiyonu birleştirme I / O zamanlayıcı denir ön sektör aramasını devre dışı bırakır. Disk birleştirme toplamları / Proc / diskstats per-blok cihazı kaydedilir.

Diğer I / O zamanlayıcıları

Referanslar