Pdflush, kjournald, swapd vb. Birlikte nasıl çalışır?


17

Son zamanlarda bu düşünceyi tetikleyen bir soru gördüm. Burada veya Google makinesi aracılığıyla gerçekten bir cevap bulunamadı. Temel olarak, çekirdek I / O mimarisinin nasıl katmanlandığını bilmekle ilgileniyorum. Örneğin, kjournaldsevkıyat pdflushveya başka bir yolla gönderilir mi? Benim varsayımım pdflush(yığın depolama G / Ç için daha genel olmak) daha düşük bir seviyede oturup SCSI / ATA / yazma işlemlerini gerçekleştirmek için gereken komutları tetikler ve kjournaldyazmadan önce daha üst düzey dosya sistemi veri yapılarını işler. Bununla kjournaldbirlikte, dosya sistemi veri yapılarıyla doğrudan arayüz oluşturarak ve pdflushher seferinde uyanarak ve ardından cihaza kirli sayfa sayfaları yazmak için bunu başka bir şekilde de görebiliyordum.kjournald. İkisinin başka bir nedenden dolayı hiç etkileşime girmemesi de mümkündür.

Temel olarak: I / O'yu Linux çekirdeğindeki yığın depolamaya göndermek için kullanılan temel mimariyi görselleştirmenin (grafik veya sadece bir açıklama) bir yoluna ihtiyacım var.



1
Ayrıca bu sunum var: 7. slayt: slideshare.net/LukCzerner/local-file-systems-update
slm

1
slm

1
Çekirdeğin çeşitli bileşenlerinin nasıl bir araya geldiğini göstermeye yardımcı olan bu etkileşimli çekirdek haritasını buldum: makelinux.net/kernel_map
slm

1
Bir kaynak daha, sayfa 19-24: Linux Performans ve Ayarlama Yönergeleri . Bu tam olarak aradığınıza benziyor.
slm

Yanıtlar:


21

Biz ilişkin ayrıntılarını ele Önce pdflush, kjournald, andkswapd`, ilk tam olarak Linux Çekirdeğinin açısından bahsettiğinizi bağlamında biraz arka plan alalım.

GNU / Linux mimarisi

GNU / Linux mimarisi 2 alan olarak düşünülebilir:

  • kullanıcı
  • Çekirdek

Arasında Kullanıcı Uzay ve Çekirdek Uzay GNU C kütüphanesi oturur ( glibc). Bu, çekirdeği kullanıcı alanı uygulamalarına bağlayan sistem çağrısı arabirimini sağlar.

Çekirdek Alanı ayrıca 3 seviyeye ayrılabilir:

  • Sistem Çağrı Arayüzü
  • Mimari Bağımsız Çekirdek Kodu
  • Mimari Bağımlı Kod

Sistem Çağrı Arayüzü adından da anlaşılacağı gibi, glibcçekirdek ile çekirdek arasında bir arayüz sağlayın . Mimari Bağımsız Çekirdek Kod böyle VFS'nin (Sanal Dosya Sistemi) ve VMM (Sanal Bellek Yönetimi) olarak mantıksal birimlerinden oluşur. Mimari Bağımlı kod verilen bir donanım mimarisine işlemci ve platforma özel kodu olan bileşenleri.

GNU / Linux Mimarisi Diyagramı

                                 gnu / linux arch ss.

Bu makalenin geri kalanında dikkatimizi Çekirdek Alanı içindeki VFS ve VMM mantıksal birimlerine odaklayacağız.

GNU / Linux Çekirdeğinin Alt Sistemleri

                                    çekirdek com ss

VFS Alt Sistemi

GNU / Linux çekirdeğinin nasıl yapılandırıldığına dair üst düzey bir kavramla, VFS alt sistemine biraz daha derinlemesine bakabiliriz. Bu bileşen, fiziksel bir aygıtta (HDD / vb.) Bir dosya sistemine (ext3 / ext4 / vb.) Eşlenen çeşitli blok depolama aygıtlarına erişim sağlamaktan sorumludur.

VFS diyagramı

vs ss

Bu şema, write()bir kullanıcının işleminden gelen bir VFS'nin VFS'yi nasıl geçtiğini ve nihayetinde fiziksel depolama ortamına yazıldığı aygıt sürücüsüne nasıl gittiğini gösterir. İlk karşılaştığımız yer burası pdflush. Bu, kirli verilerin ve meta veri tampon bloklarının arka plandaki depolama ortamına yıkanmasından sorumlu bir daemon'dur. Şema bunu göstermiyor, ancak kjournaldyan tarafta oturan pdflush, kirli günlük bloklarını diske yazarken benzer bir görevi yerine getiren başka bir arka plan programı var . NOT: Günlük blokları, ext4 ve JFS gibi dosya sistemlerinin bu değişikliklerden önce bir dosyadaki diskteki değişiklikleri nasıl izlediğidir.

Yukarıdaki ayrıntılar bu makalede daha ayrıntılı olarak ele alınmaktadır .

Genel Bakış write()adımlar

G / Ç sybsystem işlemlerine basit bir genel bakış sağlamak için, işlevin write()Kullanıcı Alanı uygulaması tarafından çağrıldığı bir örnek kullanacağız .

  1. İşlem, write()sistem çağrısı yoluyla bir dosya yazmak ister .
  2. Çekirdek, dosyayla eşlenen sayfa önbelleğini günceller.
  3. Bir pdflush çekirdek iş parçacığı, sayfa önbelleğinin diske yıkanmasını sağlar.
  4. Dosya sistemi katmanı her blok arabelleğini bir araya getirir bio struct( bkz. 1.4.3, “Blok katmanı” sayfa 23 ) ve blok aygıt katmanına bir yazma isteği gönderir.
  5. Blok aygıt katmanı üst katmanlardan istek alır ve bir G / Ç yükseltme işlemi gerçekleştirir ve istekleri G / Ç istek kuyruğuna koyar.
  6. SCSI veya diğer aygıta özel sürücüler gibi bir aygıt sürücüsü yazma işlemiyle ilgilenir.
  7. Bir disk aygıtı ürün yazılımı, tabağın üzerindeki sektöre arama kafası, döndürme ve veri aktarımı gibi donanım işlemleri gerçekleştirir.

VMM Alt Sistemi

Daha derin dalışlarımıza devam ederek, artık VMM alt sistemine bakabiliriz. Bu bileşen, ana bellek (RAM), takas ve fiziksel depolama ortamı arasındaki tutarlılığı sağlamaktan sorumludur. Tutarlılığı korumak için birincil mekanizmadır bdflush. Bellek sayfaları kirli olduğu için, depolama ortamındaki verilerle senkronize edilmesi gerekir. bu verileri depolama ortamıyla senkronize bdflushetmek için pdflusharka plan programı ile koordinasyon sağlar .

VMM diyagramı

                ss of VMM

takas

Sistem belleği azaldığında veya çekirdek değiştirme zamanlayıcısı sona erdiğinde, kswapdarka plan programı sayfaları boşaltmaya çalışır. Yani uzun serbest sayfaların sayısı yukarıda kaldığı sürece free_pages_high, kswapdhiçbir şey yapacağız. Ancak, boş sayfa sayısı aşağıya düşerse kswapd, sayfa geri kazanma işlemini başlatır. Sonra kswapdtehcir için işaretlenen sayfaları vardır bdflusharacılığıyla, depolama ortamına ödenmemiş değişiklikleri senkronize etmek ilgilenirpdflush cinleri.

Kaynaklar ve Diğer Kaynaklar


1
Bunu bir cevap olarak kabul etmeden önce bir gün bekleyeceğim ve ödülünü "ödül" sayfasında kalacak şekilde ödüllendireceğim. Bu şekilde daha önce gören herkesin bir cevabı olduğunu fark etme şansı var.
Bratchley

1
Tekrar teşekkürler, BTW. Bunu araştırmaya gerçekten gittiniz.
Bratchley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.