iotop Aracı ile Giriş/Çıkış (I/O) Başarımını İzlemek

iotop(io monitor) aracı top ve htop araçlarına benzer olarak disk giriş/çıkış işlemlerinin istatistiklerini canlı olarak görüntüleyen kullanıcı etkileşimli bir araçtır. Özellikle Raspberry Pi gibi disk erişim hızları sınırlı bilgisayarlarda bu G/Ç başarımı daha önem kazanmaktadır. Raspberry Pi bilgisayarının SD karttan dolayı sahip olduğu görece düşük disk erişim kapasitesi, sistem genelinde bir dar boğaz oluşturarak genel başarımı kolayca etkileyebilecek düzeydedir. Bu nedenle olası başarım sorunlarını tespit etmek için disk erişimi istatistiklerinin görüntülenmesi ve yorumlanması önem arz etmektedir. Bu başlıkta iotop aracını kullanarak disk erişim istatistiklerinin nasıl izleneceğine ve yorumlanacağına bakacağız.

Her depolama ortamı (HDD/SSD/NvME veya SD Kart) yapısı gereği belli bir erişim süresine sahiptir. Yani, diskten verinin okunması ve yazılması belli bir zaman alır. Bu zaman CPU çalışma hızı ile karşılaştırıldığında çok yüksek bir değere karşılık gelir. Bu nedenle disk G/Ç işlemleri sırasında CPU giriş/çıkış işleminin bitmesini beklemek zorundadır. Bu da başarımın doğal olarak düşmesine neden olur. Diğer taraftan Linux çekirdeği bu beklemeleri asgariye indirmek için dosya ön bellekleri ve tamponlarının yer aldığı özel mekanizmaları devreye sokar. Tekrar hatırlatmak gerekirse bu mekanizmaların gerekliliği HDD, SSD ve SD kart gibi depolama birimlerinin görece düşük erişim hızlarından kaynaklanır. Bu nedenle başarımın izlenmesi ve sorunların çözülmesi için disk G/Ç işlemlerinin takip edilmesi önem kazanmaktadır. iotop programını aşağıdaki gibi yükledikten sonra çalıştıralım:

iotop aracı çalışabilmesi için güvenlik amacıyla sudo yetkisine ihtiyaç duyar. Çünkü sistemde çalışan farklı kullanıcılara ait tüm işlemlerin G/Ç istatistiklerinin sorgulaması gerekir. iotop çalıştırıldığında bizi aşağıdaki gibi bir kullanıcı arabirimi karşılar:

Arabirimin üstünde yer alan TOTAL DISK READ ve WRITE değerleri çekirdeğin blok aygıt yordamları ile işlemler (process) arasındaki disk okuma yazma istatistiklerini ifade ederken, Actual DISK READ ve WRITE değerleri Linux çekirdeğinin blok aygıt yordamları ile işlem yapılan disk donanımı arasındaki okuma/yazma (G/Ç) başarımını ifade eder. Diğer bir deyişle TOTAL değerler Linux çekirdeği ile ilgili işlem arasındaki veri aktarımını, ACTUAL değerler ise Linux çekirdeği ile donanım arasındaki G/Ç değerlerini ifade eder. Aşağıdaki şekil ACTUAL ve TOTAL G/Ç değerleri arasındaki ilişkiyi göstermektedir.

Yukarıdaki şekli iotop’ın arabiriminde sunulan değerler açısından açıklamak etmek gerekirse; P (işlemler) ile D (disk:SD kart) arasında tampon kullanmadan gerçekleşen doğrudan veri trafiği ACTUAL, P ile K arasındaki trafik ise TOTAL açıklaması ile belirtilir. P, D üzerindeki ihtiyacını K üzerindeki tamponlar aracılığı ile de karşılayabilir. Bu durumda TOTAL veri trafiği; P ile K arasındaki trafik ile K ile D arasındaki trafiğin toplamı olarak hesaplanır.

Örneğin, bir okuma işlemi sırasında; TOTAL değerler genellikle daha büyüktür; çünkü Linux çekirdeği donanımdan doğrudan okumayı azaltmak dolayısıyla sistem başarımını artırmak için verileri sanal RAM disklerde ön bellekler ve tamponlar. Bu durumda doğrudan donanımdan okuma yapılmadığı için TOTAL değerler yüksek gözükür. TOTAL değerlere, çekirdek ön bellek ve tamponlarını dolu tutmak için okunan/yazılan veriler de dâhildir. ACTUAL değerlerdeki bir fark ise; işlemler, fiziksel disk depolama aygıtını kullanmadan da kendi aralarında pipe ve soketler üzerinden veri aktarımı yaparlar. Bu da doğrudan disk okuma işlemi yapılmadığından TOTAL değere yansır.

Disk G/Ç ortalamalarının yorumlanmasını kısaca belirttikten sonra iotop arabiriminin nasıl daha etkin kullanılabileceğine ve işlemlerin G/Ç değerlerinin nasıl listelendiğine bakalım. iotop işlemlerinin listelendiği tablo TID, PRIO, USER, DISKREAD, DISKWRITE, SWAPIN, IO ve COMMAND olmak üzere 8 sütundan oluşur. Her bir işleme ait bu sütunların sunduğu bilgiler şunlardır:

  • TID (Thread ID): Çalışan işlemin Linux çekirdeği tarafından atanmış tanıtıcı kimlik numarasıdır (ID)
  • PRIO (IO Priority): Giriş çıkış önceliğidir. Bu değer ionice komutu ile değiştirilebilir. Real-time (rt), Best-effort (be) ve idle olmak üzere üç tür zamanlayıcıya ve her zamanlayıcı da 0 ile 7 arasında 8 farklı öncelik değerlerine sahiptir. 0 en yüksek G/Ç önceliğini, 7 ise en düşük G/Ç önceliğini ifade eder. Zamanlayıcılar ilgili işlemin G/Ç esnasında öncelik sırasına alınmasını sağlayan bir mekanizma sunar. Varsayılan olarak 4 öncelik seviyesinde çalışmayı sağlayan be zamanlayıcı değerini işlemin (process) nice değerini kullanarak şu eşitliğe göre dinamik olarak hesaplar: PRIO(be) = (CPU_nice + 20) / 5. Dolayısıyla işlemin nice değeri G/Ç önceliğini belirlemek için de kullanılır. Nice değerinin htop aracı kullanılarak nasıl değiştirilebileceği “htop Aracı ile İşlem Başarımını İzlemek” başlıklı konuda anlatılmıştı. Real-time zamanlayıcısı ise işlemin diğer G/Ç işlemlerine göre ilk önceliğe sahip olmasını sağlar. Bu öncelik kullanılırken dikkatli olunmalıdır. Çünkü bu öncelik diğer G/Ç’ların önüne geçmeyi sağladığından sistemin kararlılığını olumsuz etkileyebilir.
  • DISK READ: Saniyede okunan veri miktarı.
  • DISK WRITE: Saniyede yazılan veri miktarı.
  • SWAPIN: Bellek verisinin takas alanına taşınması ile ilgilidir. İlgili işlemin G/Ç için kullandığı veri çekirdek tarafından belirlenen şartlarda ve sürelerde kullanılmadığında taşıma işlemi gerçekleştirilir. Örneğin, 4 çekirdekli bir işlemcisi olan Raspberry Pi 3 için bu alanda gösterilen %4.00 değeri, her bir çekirdeğin zamanının %1’ini verinin takas alanına taşınması harcadığı anlamını taşır.
  • IO: İşlemin G/Ç için beklediği zamanı diğer işlemlerle karşılaştırmalı olarak yüzde cinsinden ifade eder. Yüksek değerler darboğaz oluştuğunun göstergesidir. Örneğin,4 çekirdekli bir işlemcisi olan Raspberry Pi 3 için bu alanda gösterilen %4.00 değeri, her bir çekirdeğin zamanının %1’ini G/Ç işleminin bitmesini beklemek için harcadığı anlamına gelir.
  • COMMAND: Çalışan işlemin adını ya da komutun seçeneklerini gösterir.

iotop aracı kullanıcı etkileşimli bir programdır ve aşağıdaki klavye kısa yolları kullanılabilir:

  • Sağ ok / Sol ok tuşları: Sıralamanın yapılacağı işlem sütunu seçmek için kullanılır. Aktif sıralamanın yapıldığı sütunun sağ tarafında < ve > işaretleri ile sıralamanın yönü gösterilir. Sıralamanın yönü Yukarı ok / Aşağı ok tuşları ile belirlenebileceği gibi iki sıralama yönü arasında geçiş yapmak için r tuşu da kullanılabilir.
  • o: iotop ekranında sadece o anda G/Ç yapan işlemlerin listelenmesini sağlar.
  • p: Sadece işlemlerin (process) listelenmesini sağlar. Normalde iotop alt işlemleri yani kanalları (threads) da görüntüler.
  • a: Anlık başarım durumlarının (1 saniye içinde gerçekleşen G/Ç etkinliği) gösterilmesini yerine o ana kadarki toplamsal değeri gösterir.
  • i: İşlemin G/Ç önceliğini değiştirmek için kullanılır. Bu tuşa basıldığında ilk olarak önceliği değiştirilecek işlemin PID numarası girilmesi istenir. Ardından Best-effort, Real-time ve idle zamanlayıcılarından biri ve 0-7 arasında bir öncelik değeri sorulur.
  • q: iotop programından çıkışı sağlar.

iotop kullanıcı etkileşimli olarak kullanılabilmesinin yanında komut satırı seçenekleri ile arka planda da çalıştırılabilir. Aşağıdaki örnek yüksek G/Ç etkinliği olan işlemleri ve sistem başarımını sürekli takip etmek için cron zamanlayıcısı ile birlikte kullanılabilir.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.