Linux çekirdeğinin iomap katmanı nasıl çalışır
LWN'in incelemesine göre iomap, dosya sistemleriyle depolama aygıtları arasındaki eşlemeyi yönetir; buffer head'lerin yerini alarak kodu sadeleştirir.
LWN.net'te yayınlanan bir teknik inceleme, Linux çekirdeğinde dosya sistemlerinin sıkça andığı ama az kişinin ayrıntısıyla açıklayabildiği iomap katmanını mercek altına alıyor. Christoph Hellwig tarafından 4.8 çekirdeğinde tanıtılan iomap, aslında Dave Chinner'ın XFS'teki önceki çalışmasına dayanıyor ve zamanla fs/iomap dizininde bir düzine dosyaya yayılan, iki katmanlı bir mimariye dönüşmüş. Alt katman dosya ile fiziksel depolama arasındaki eşlemeyi tutuyor, üst katman ise bu eşlemeyi kullanarak dosya sistemlerinin ihtiyaç duyduğu ortak işlevleri sağlıyor ve her dosya sisteminde tekrarlanan kodu ortadan kaldırıyor.
Makale, eski buffer head yaklaşımının büyük dosyalar ve extent tabanlı dosya sistemleri için yetersiz kaldığını; tek bir sürekli extent'in yüzlerce buffer head'e bölünüp yeniden birleştirilmesi gerektiğini anlatıyor. Bunun yerine iomap, tek bir struct iomap ile geniş bir eşlemeyi ifade edebiliyor; bu yapı IOMAP_MAPPED, IOMAP_HOLE, IOMAP_DELALLOC, IOMAP_UNWRITTEN gibi tiplerle normal eşlemeler, boş alanlar, gecikmeli tahsisler ve yazılmamış bloklar gibi durumları ayırt ediyor. Dosya sistemleri, iomap_begin() ve iomap_end() geri çağrılarıyla bu yapıyı doldurup işlemleri tamamlıyor.
Yazar, iomap'in sağladığı I/O fonksiyonlarının işlevsel olsa da belgelemesinin oldukça zayıf olduğunu, geliştiricilerin çoğu zaman kaynak koda bakmak zorunda kaldığını belirtiyor; bu durumun dosya sistemlerinin iomap'e geçiş sürecini yavaşlatmış olabileceğini vurguluyor. Konu, çekirdek geliştiricileri ve dosya sistemi mühendisleri için önemli çünkü modern depolama I/O performansını ve kod bakımını doğrudan etkileyen temel bir soyutlama katmanını netleştiriyor.