Bellek (RAM) Kullanımını Analiz Etmek

Raspberry Pi gibi donanım kaynakları sınırlı bilgisayarlarda RAM kullanımı önem kazanmaktadır. Raspberry Pi’ın, dolayısıyla Linux’un belleği nasıl organize ettiğini ve kullandığını bilmek sistemin başarım durumunu değerlendirirken yardımcı olabilir. Belleğin kısa sürede dolması ve boş yer kalmaması hatalı bir programın bellek sızıntısından (memory leak) ya da yanlış yapılandırılmış bir işletim sistemi servisinden kaynaklanıyor olabilir. Özellikle kararlılığı yeterince uzun süre sınanmamış program ve paketler belleği hoyratça kullanarak sistemin genel başarımının düşmesine neden olabilir. Bu durum genellikle kaynak koddan yüklenen veya resmi paket deposu dışındaki depolardan kurulum yapıldığında gerçekleşir. Bu kısımda belleğin bir bilgisayar sistemindeki görevi ve organizasyonel yapısı hakkında temel bilgiler verilecek ve Raspberry Pi sisteminde bellek kullanımının nasıl takip edilebileceği hakkında bilgiler verilecektir.

1.1.1           Belleğin (RAM) kullanım amacı

Tüm bilgisayarlar CPU, RAM (ana bellek) ve sabit disk donanımlarına sahiptir. CPU programların içerdiği komutları çalıştırarak programın tasarlandığı amacı getirir. Sabit diskte ise programların veri dosyaları kayıtlıdır. Programları oluşturan komutlar, sırasıyla bu disk dosyasından okunarak CPU’ya gönderilir ve çalıştırılır. Peki bu çalışma sisteminde RAM’in, yani belleğin yeri nerededir?


İlk üretilen bilgisayarlar (1960’lı yıllarda) RAM’e ihtiyaç duymadan programın komut ve verilerini doğrudan depolama ortamından okuyarak çalışmaktaydılar. Lakin yarı iletken ve elektronik teknolojisi bilgisayarların hızını artıracak şekilde gelişirken, sabit disk teknolojisi aynı oranda gelişemedi. Sabit disklerin aynı oranda gelişememesinin nedeni depolama alanı miktarının artması ve üretimin düşük maliyetli teknolojilere yönelmesi olarak açıklanabilir.  CPU ihtiyaç duyduğu çok yüksek veri trafiğini aynı hızda karşılayamayan sabit disklerin yerine RAM’den karşılayabileceği bir tasarım modeline geçildi.

Bu modelde CPU’nun ihtiyaç duyduğu yüksek hız için veriler sabit diskten okunarak RAM’e depolanmakta buradan da CPU’nun kullanımına sunulmaktadır. Böylece önceki modelde sabit diskten kaynaklanan veri erişim darboğazı büyük oranda aşılarak, geçici ve uçucu bir kayıt ortamı olan RAM’in kullanımı zorunlu olmuştur.

Durumu Raspberry Pi açısından değerlendirirsek; Raspberry Pi’ın diski olan SD kartın erişim hızı 10MB’lar civarındayken, RAM’inin erişim hızı ise 300MB’lar civarındandır. Buna karşılık CPU’nun veri işleme hızı ise RAM’den çok daha fazladır.

Temel bilgisayar mimarisi açısından tekrar etmek gerekirse; programları oluşturan komutlar CPU tarafından çalıştırılmaya başlanmadan önce disk ortamından okunarak RAM’e kopyalanır (bu sırada sabit diskin okuma gösterge ışığının yoğun şekilde yanıp söndüğünü fark edebilirsiniz) ve buradan CPU’ya aktarılarak çalıştırılır. Aynı anda çalıştırabileceğiniz program sayısı ve her bir programın büyüklüğü RAM’in kapasitesi ile doğru orantılıdır. RAM aynı zamanda sık kullanılan verilerin hızlı erişim için önbelleklendiği bir ortamdır.

1.1.2           Bellek işletim sistemi tarafından nasıl kullanılır

RAM’in var olma amacını açıkladıktan sonra RAM’in sistem tarafından etkin şekilde kullanılıp kullanılmadığını daha rahat analiz edebiliriz. Linux’da kullanılan RAM miktarı hakkında bilgi almak için kullanılan en temel komut free’dir. Aşağıdaki komutu çalıştırmayı deneyin:

pi@raspberry:~ $ free -m

              total        used        free      shared  buff/cache   available

Mem:            1527        283         68          23         574          565

Swap:            99          0         99

Bazen Linux’un boş bellek miktarını incelerken çok az bellek kaldığını görüp paniğe kapılabilirsiniz. Örneğin 1GB bellekli Raspberry Pi bilgisayarında yukarıdaki  gibi free komutunu çalıştırdığınız da sadece 68MB boş bellek kaldığını görebilirsiniz fakat bu sizi yanıltmasın, aslında düşündüğünüzden daha çok boş bellek vardır. Diğer taraftan gördüğünüz bu düşük değer tahmin ettiğinizin aksine iyi başarım sonuçlarına da yol açabilir.

Linux gibi modern işletim sistemleri başarım için her zaman belleğin tamamını kullanma eğilimindedirler. Verilerin ana kayıt ortamı olan disk (SD kart) ortamı okuma ve yazma hızı bakımında RAM belleğe göre çok daha düşük bir hıza sahip olduğundan işlemci ile CPU arasındaki veri alışverişinde RAM bir ara tampon oluşturarak CPU’nun ihtiyaç duyduğu veriyi yüksek hızda sağlama görevini yerine getirir. Bu açıdan, CPU’nin talep edeceği verinin RAM’de önceden hazır bulundurulması sistem başarımını çok olumlu yönde etkiler. Aksi olsaydı veri dolaşımında en büyük dar boğazı oluşturan disk; CPU’nun yüksek hızına cevap veremeyecek ve sistemin genel performansı aşırı derecede düşecekti. Diskte bulunan bir veriye erişmek RAM’dekine erişmekten çok daha yavaştır (30 kat kadar). Belirttiğim gibi, Linux veri okuma hızını en yüksek düzeyde tutmak için RAM deki tüm boş alanı ihtiyaç duyulan/duyulabilecek verileri önbelleklemek için kullanır.

* Kullanılmayan RAM, RAM değildir.

Başka bir ifadeyle; belleğin önemli bir kısmı çalışan programların ihtiyaç duyması olası birçok veriyi hazırda tutmak için kullanılır. Peki, bir program boş (free) RAM’den daha fazla bir alana ihtiyaç duyduğunda ne olur? Bu durumda Linux çekirdeği özgün bir karar mekanizması işleterek RAM’den boşaltılacak önbelleklenmiş veriyi tespit eder ve ihtiyaç kadar bellek alanını boşa çıkartır (memory release). Böylece ilgili programın ihtiyaç duyduğu bellek için yer açılmış olur.

Genel olarak yukarıdaki free çıktısında yer alan available değeri; free(68MB),shared(23) ve buf/cache(574MB)’in büyük kısmının toplamına karşılık gelen bir değerdir ve ihtiyaç olduğunda boşaltılacak bellek alanı olarak düşünülebilir. Eğer çıktıda free alanında bir değer görüyorsanız Raspberry Pi bilgisayarının bellek yokluğundan kaynaklanan bir sorunu olmadığı yorumu yapılabilir.

Eğer free alanında 0 değerini görüyorsanız bu serfer free çıktısındaki swap satırına odaklanmanız gerekir. swap yani takas alanı değerleri, fiziksel bellekte (RAM) hiç yer kalmadığında diskin (SD kart) RAM gibi kullanıldığını ifade eder. SD kartın RAM gibi kullanılması durumunda aradaki 30 katlık erişim hızı farkından dolayı sistem çok büyük bir başarım sorunu yaşar ve sistemin aşırı yavaşladığını rahatlıkla fark edebilirsiniz. Bu durumda hangi işlemin (process) RAM’i ne kadar kullandığını incelemek gerekir. Bu incelemeyi yapmak için htop ve top araçları oldukça kullanışlıdır.

1.1.3           İşletim sisteminin bellek organizasyonu

Fiziksel bellek veriyi oluşturan bit’lerin her birinin bir bellek hücresinde saklandığı geçici bir depolama ortamıdır. Örneğin 1GB’lık bir bellekte ham olarak 8.589.934.592 (8x1024x1024x1024) adet bellek hücresi yer alır. İşletim sistemi bu belleği etkin şekilde yönetebilmek için birçok mantıksal bölüme ayırarak kullanır.

Linux işletim sisteminde belleğin mantıksal olarak ayrıldığı bölümler ve bu bölümlerin anlık kullanımı, detaylı olarak /proc/meminfo dosyasından takip edilebilir. Bu dosyanın içeriği işletim sisteminin fiziksel belleği nasıl kullandığı hakkında detaylı bilgiler sunar ve bu bilgiler olası sorunların çözümü için yol gösterici olabilir.

pi@pimedia ~ $cat /proc/meminfo

MemTotal:         948128 kB

MemFree:          764540 kB

MemAvailable:     862368 kB

Buffers:           37364 kB

Cached:            79244 kB

SwapCached:            0 kB

Active:            80840 kB

Inactive:          78300 kB

Active(anon):      42800 kB

Inactive(anon):      928 kB

meminfo çıktısı sistemin sahip olduğu toplam bellek miktarı (MemTotal) yanında anlık tampon (Buffers) ve önbellek (Cached) miktarlarını ayrı ayrı görmek açısından da faydalıdır. Anlık değerler, sistemin yazılımsal başarımını değerlendirmek açısından kullanışlıdır. Bu dosyadaki bazı önemli alanlar şunlardır:

·         MemTotal: Toplam fiziksel bellek (KB) miktarı

·         MemFree: Sistem tarafından kullanılmayan fiziksel bellek (KiB) miktarı

·         Buffers: Disk dosyalarının hızlı erişim için depolandığı tampon bellek (KiB) miktarı

·         Cached: Program ve program kütüphanelerinin önbelleklendiği bellek (KiB) miktarı

·         SwapCached: RAM’den swap alanına ve daha sonra RAM’e geri taşınan ve hala swap alanında bulundurulan veri miktarıdır. Bunun amacı G/Ç başarımından kazanmaktır. Bu verinin tekrar swap alanına taşınmasına gerek yoktur.

·         Active: Bellekte aktif olarak kullanımda olan veya çok yakın zamanda kullanılmış olan veri miktarıdır. Bu kategorideki veri henüz kesin olarak boşa çıkartılmasına (cached) karar verilmemiş miktardır.

·         Inactive: Belli bir süredir kullanılmayan ve her an güncel ihtiyaçlar için tahsis edilebilecek bellek miktarıdır (KiB)

·         Active(anon): Aktif kullanımda olan veya son swap takasından beri aktif durumda olan anonim (sahibinin önemi olmayan) tmpfs/shmem belleğinin miktarıdır.

·         Inactive(anon): Aktif kullanımda olmayan tahliye edilmeye aday tmpfs/shmem bellek miktarıdır.

·         Active(file): Aktif kullanımda olan önbelleklenmiş disk dosyası miktarını gösterir.

·         Inactive(file): Diskten yeni yüklenmiş veya kaldırılmaya aday disk dosyası önbelleğinin miktarını gösterir.

·         Unevictable: Kullanıcı programları tarafından RAM’de kilitli tututan veri miktarıdır.

·         Mlocked: Kullanıcı programları tarafından RAM’de kilitli tututan, bellek sayfalarının dışında kalan veri miktarıdır.

·         Swaptotal: Takas için ayrılmış toplam alan miktarıdır.

·         Swapfree: Takas alanının boş kısmıdır.

·         Dirty:Diske geri yazılmayı bekleyen veri miktarıdır.

·         Writeback: Diske henüz yeni (geri yazılmış) yazılmış veri miktarıdır.

·         AnonPages: Herhangi bir disk dosyasına yedeklenmemiş kullanıcılara ait bellek tablolarına yazılmış verinin miktarıdır.

·         Mapped: Bellekte haritalanmış program kütüphanelerinin kapladığı alanın miktarıdır.

·         Shmem: shmem (paylaşılan bellek) ve tmpfs (ram’de oluşturulan sanal disk bölümü) tarafından kullanılan bellek alanının miktarıdır.

·         Slab: Linux çekirdeğinin kendi veri yapılarını saklamak için kullandığı bellek alanının miktarıdır.

·         SReclaimable: Slab içindeki serbest bırakılabilecek verinin miktarıdır.

·         SUnreclaim: Bellekte alan açma sırasında serbest bırakılamayacak Slab verisi miktarıdır.

·         KernelStack: Sistemdeki her bir görev için (thread) çekirdek tarafından tahsis edilmiş bellek yığını boyutudur.

·         PageTables: Endüşük bellek sayfası tablolarına ayrılmış alanın miktarıdır.

·         NFS_Unstable: Sunucuya gönderilmiş fakat henüz kararlı bir depolama ortamına kaydedilememiş NFS (Network File System) sayfalarının kapladığı belleğin miktarıdır.

·         Bounce: RAM’in tüm adres uzayına erişemeyen blok aygıtları tarafından kullanılan tampon boyutudur.

·         WritebackTmp: Geri yazma (Writeback) için ayrılmış geçici bellek alanının miktarıdır.

·         CommitLimit: vm.overcommit_ratio oranına bağlı olarak takas ile birlikte sisteme ayrılabilecek (kullanıma alınabilecek) toplam bellek miktarıdır.

·         Committed_AS: Tahmini iş yükünü tamamlamak için gerekli bellek miktarıdır. Bu değerin içinde takas alanı içi ayrılan kısım da vardır.

·         VmallocTotal: Sanal bellek adres uzayı için ayrılmış bellek miktarıdır.

·         VmallocUsed: Kullanılan sanal adres uzayının miktarıdır.

·         VmallocChunk: Mevcut sanal adres uzayı içindeki en büyük bitişik bellek bloğunun miktarıdır.

Linux gerekli olduğunda programlar için ihtiyaç duyulan RAM’i, Buffers ve Cached için ayrılan bellek miktarınız azaltarak sağlar. Diğer taraftan Cached’ın azalması programlar için performans düşüşüne de yol açabilir. cached olarak kullanılan belleği azaltmak için sync aracı kullanılabilir. sync aracı diske yazılmak üzere önbelleklenmiş (cached) verileri diske yazmak için zorlar. Bu komutun kullanımının ardından cached değerinin bir miktar azaldığını görebilirsiniz.

pi@raspberry:~ $ sudo sync

1.1.4           Swap boyutunu arttırmak

Bazen aşırı yavaşlığı göze alarak swap kullanımını artırmanız gerekebilir. Eğer bir Linux bilgisayarının RAM belleğinin ardından swap’i de dolmaya başlarsa, müthiş Linux çekirdeği işletim sistemi açısından kullanışlı verileri RAM’de tutmak için olağanüstü bir çaba gösterir fakat bu durum yeterince uzun sürerse de Linux kilitlenir. Sistemin kilitlenmesi demek hiçbir işleme cevap vermemesi anlamına gelir ki bu durumdan kurtulmanın tek yolu sistemi yeniden başlatmaktır. Bu başlıkta, yüksek RAM bellek ihtiyacı olan Raspbery Pi uygulamaları için (özellikle Raspberry Pi Zero üzerinde çalışan uygulamalar için) swap alanının boyutunun nasıl arttırılacağına bakacağız. Rasbian birçok Linux dağıtımının aksine swap alanı için bağımsız bir disk bölümü kullanmaz, bunun yerine /var/swap adlı dosyadan faydalanır.

pi@raspberry:~ $ swapon -s

Filename                      Type            Size    Used    Priority

/var/swap                     file            102396  0       -2

pi@raspberry:~ $ ls -la /var/swap

-rw——- 1 root root 209715200 Jan 10 10:37 /var/swap

swapon, -s seçeneği ile çalıştırıldığında swap’in durumu listelenir. Çıktıda swap dosyasının konumu (/var/swap), türü (dosya/disk bölümü), boyutu, kullanım miktarı ve swap kullanım önceliğini görüntülenmektedir. Bir Linux sisteminde farklı konumlarda birden fazla swap alanı yer alabilir ve bu öncelik değeri ilk hangisinin kullanılacağını belirler.

Swap alanının miktarını artırmak için /etc/dphys-swapfile yapılandırma dosyası kullanılır. Dosyayı nano editörü ile açtıktan sonra CONF_SWAPSIZE seçeneğine MB cinsinden swap miktarını tanımlayabilirsiniz.

pi@raspberry:~ $  sudo nano /etc/dphys-swapfile

Tanımlamayı yaptıktan sonra sırasıyla aşağıdaki gibi setup ve swapon seçeneklerini çalıştırarak yeni swap boyutunu geçerli olmasını sağlayabilirsiniz..

pi@raspberry:~ $ sudo dphys-swapfile setup

want /var/swap=200MByte, checking existing: deleting wrong size file (104857600), generating swapfile … of 200MBytes

pi@raspberry:~ $ sudo dphys-swapfile swapon

pi@raspberry:~ $ swapon -s

Filename                 Type            Size    Used    Priority

/var/swap                file            204796  0       -2

1.1.5           İşlemci (CPU) Kullanımını Analiz Etmek

Raspberry Pi sahip olduğu merkezi işlemci (CPU) ve grafik işlemcisi genel amaçlı kullanımlar için son derece uygundur. Sahip olduğu işlemci gücü ile ofis amaçlı kullanım ihtiyaçlarını fazlasıyla yerine getirebilir. Raspberry Pi bilgisayarı ufak boyutları ve düşük enerji sarfiyatı sayesinde gömülü sistemlerde ve hobi projelerinde kontrol amaçlı kullanılabilir. Ofis amaçlı bir masaüstü bilgisayarı olarak da kullanılabilir ancak bir masaüstü bilgisayarı alternatifi olmadığını da unutmamak gerekir. Birçok avantajının yanında Raspberry Pi’ın işlem gücü özellikle birçok masaüstü mikrobilgisayar sistemine göre çok zayıf kalır. Aşağıda her bir çekirdeği 1.2GHz hızında çalışan 4 çekirdekli 64bit’lik veriyoluna sahip bir bilgisayar olan Raspberry Pi 3’ün sabit bir aritmetik algoritmayı hesaplama süresinin bazı mikroişlemciler ile olan karşılaştırmasını görebilirsiniz.

Sistem

İşlemci

Çekirdek  (uname -a)

Üretim Yılı

Süre (sn)

Raspberry Pi3

Broadcom BCM2837
(Arm Cortex A53)

Linux raspberrypi  armv7 GNU/Linux

2016

804

Masaüstü

AMD Athlon 64 3200+

FreeBSD 10.2-RELEASE-p24

2007

117

Mac Mini

Intel Core i5 2.6 GHz

Darwin Kernel Version 16.1.0

2014

8.8

Masaüstü

Intel Core i7 8700K 3.2GHz

FreeBSD 10.2-RELEASE-p24

2017

1.01

Yukarıdaki karşılaştırma tablosu sysbench aracının aşağıdaki seçenekler ile çalıştırılması sonucunda elde edilmiştir. sysbench aracı ile ilgili detaylı bilgiyi kitabın “Sysbench ile Raspberry Pi’ın Performansını Ölçmek” adlı başlığında bulabilirsiniz:

pi@raspberry:~ $ sysbench –num-threads=4 –test=cpu –cpu-max-prime=20000 run

Görüldüğü gibi Raspberry Pi 3 işlemcisi 2007 yılında üretilen AMD Athlon 3200+ işlemcisinden 7 kat yavaş, 2016 yılında üretilen bir işlemci olan Core i7 7400’den ise yaklaşık 800 kat yavaş kalmıştır. Daha da önemlisi; Core i7, 95 watt elektrik tüketirken harici bir soğutucuya ihtiyaç duymuş, Raspberry Pi 3’ün işlemcisi ise harici soğutucu kullanmadan 2 watt elektrik tüketmiştir. Görülebileceği gibi; Linux’un gücü yanında düşük güç tüketimi ve modülarite gerektiren her türlü uygulamada Raspberry Pi kullanılabilir, fakat çalışan işlemlerin (process) bellek ve işlemci kullanımının iyi optimize edilmesi ve sistem kararlı çalıştığını kanıtlayana kadar düzenli olarak takip edilmesi gerekir.

Raspberry Pi bilgisayarı piyasaya çıktığı ilk günden beri gördüğü ilgi ve ulaştığı kullanıcı kitlesi sayesinde hem donanımsal hem de yazılımsal olarak sürekli geliştirilmektedir. Bir kart bilgisayardan beklenebilecek en makul başarımı sunan Raspberry Pi bilgisayarının, A sürümünden 3. sürümüne kadar olan modellerinin işlemci başarımı ve buna karşılık tükettiği elektrik enerjisi aşağıdaki grafiklerde karşılaştırmalı olarak gözükmektedir.


Raspberry Pi bilgisayarlarının işlemci başarım (MIPS) ve güç tüketim grafikleri

Raspberry Pi’ın resmi dağıtımı olan Raspbian işletim sistemi, BCM çipleri için arm komut setini destekleyecek şekilde derlendiğinden, üzerinde çalışacak uygulama ve programlardan azami verimin alınmasını mümkün kılar. Diğer taraftan, Raspbian ile gelen Linux çekirdeğini kullanmayıp kendi çekirdeğinizi derlemeyi seçtiğiniz takdirde; projeniz için gereksiz olabilecek birçok çekirdek özelliğini kapatarak, işlemci gücünü daha etkin kullanma şansı yakalayabilirsiniz. Buna rağmen son derece kalabalık geliştirici kitlesi sayesinde Raspbian çekirdeği sahip olduğu güncel özellikler ile gayet optimize şekilde gelmektedir. Çoğu durumda çekirdek özelleştirmeye/derlemeye gerek duymazsınız.

Bilgisayarlar tüm mükemmel donanımsal özelliklerine rağmen bir programın yanlış bir işlem yapması (bug), bir giriş çıkış (I/O) darboğazı veya baş edebileceğinden fazla miktarda veri işlemesi sırasında başarım kaybı yaşarlar. Raspberry Pi bilgisayarı içinde bu geçerlidir. Bu nedenle sistemde çalışan servis, program ve uygulamaların kurulumlarının ardından, işlemciyi kullanım yüzdeleri bir süre olağan koşullarında ve yoğun kullanım koşullarında sınanmalıdır. Belirttiğim gibi Raspberry Pi depolarından kuracağınız yazılımlar alfa, beta ve release gibi yazılım geliştirme süreçlerinden ve başarım kontrollerinden geçerek depolara alınırlar fakat 3. parti depolardan veya kaynak koddan derleyerek yükleyeceğiniz programları kullanırken dikkatli olmalısınız. Hatalı yazılmış tek bir ufak program dahi Raspberry Pi’ın çalışamaz duruma gelmesine neden olabilir. Bu nedenle öncelikli olarak resmi paket depolarını kullanmalı diğer kaynaklardan kurulacak programlar için temkinli olmalısınız.

1.1.6           top aracı ile işlemci başarımını canlı izleyin

Linux’un CPU işlem yükünü görmek için kullanılan programların en eskisi ve meşhuru top aracıdır. top programı sistemde çalışan programlar (işlemler) hakkında birçok bilgiyi belli zaman aralıkları ile güncelleyerek listeler. Sistemin sağlıklı çalışıp çalışmadığını veya hangi programın ne kadar işlemci gücü tükettiğini (işlemciyi meşgul ettiğini) ve kaynak harcadığını izlemek için kullanılabilecek en faydalı araçlardan birisidir. Araç hemen hemen tüm Linux tabanlı dağıtımlarla birlikte yüklü olarak gelmektedir.

1.1.6.1            top arabiriminin okunması

Komut satırına top yazıp programı çalıştırdığımızda bizi aşağıdaki gibi bir arabirim karşılar.

pi@raspberry:~ $ top

top – 15:41:59 up  6:21,  3 users,  load average: 0.27, 0.31, 0.58
Tasks: 154 total,   1 running, 153 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.7 us,  0.9 sy,  3.7 ni, 94.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :   949580 total,   554428 free,    98616 used,   296536 buff/cache

KiB Swap:   102396 total,   102396 free,        0 used.   773612 avail Mem

 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

30612 pi        30  10   12224   8848   3416 S  15.4  0.9   1:27.46 shadebobs

  605 root      20   0  206900  52500  28844 S   3.3  5.5 124:47.55 Xorg

30807 pi        20   0    8232   3244   2676 R   1.6  0.3   0:04.04 top

  951 pi        20   0  138520  22932  19156 S   0.7  2.4   0:40.86 lxpanel

Yukarıdaki ekran çıktısından görebileceğiniz gibi ilk satırda; güncel sistem saatinin yanında, sistemin 6 saat 21 dakikadır çalıştığı bilgisi ile sistemin yük durumu bilgisi yer alır (0.27, 0.31, 0.58).  Sunulan yük durumu bilgileri belli periyotlar için hesaplanan ortalama yük değerleridir. Bu değerler sırasıyla 1,5 ve 15 dakikalık ortalama CPU yükünü gösterir. Küçük değerler büyük değerlere göre daha iyidir. Yüksek değerler CPU’ya verilen işlerin (programlar) yetiştirilemediğine ve/veya dolayısıyla aşırı ısınmaya işaret edebilir. Bu konudaki detaylı bilgiyi “İşlemci (CPU) ortalama yük değerlerinin yorumlanması” başlıklı konuda bulabilirsiniz.

İkinci satırda; Sistemde o anda çalışan işlemlerin (process) çalışma durumları hakkında bilgiler görüntülenir. Bu bilgiler, top ekranın son güncellenmesi (saniyede bir kez güncellenir) sırasında ölçülen değerlerdir. Buna göre toplamda 154 görevin 1’i çalışır (running) durumdayken 153’ü bekleme (sleeping) halindedir. Bu değerlerin anlamları kısaca şöyledir:

·         Running: İşlem hali hazırda çalışmakta veya icrası için işlemcinin (CPU) komut kuyruğuna alınmıştır.

·         Sleeping: İşlemin bekleme/uyku durumunda olduğunu, hali hazırda CPU tarafından çalıştırılmadığını, bir olayın ya da şartın gerçekleşmesinin beklendiğini ifade eder.

·         Stopped: (stopped) İşlemin durdurulduğu anlamına gelir. Örneğin CTRL+Z tuşlarına basıldığında işlemin komut kabuğu ile dolayısıyla kullanıcı ile olan etkileşimi kesilir ve stopped durumuna geçer.

·         Zombie: Bu durumdaki işlemler hükümsüz durumdadır. Ebeveyn işlem sonlandırılmasına rağmen alt işlem sistemde asılı kalmıştır. Bu durumun kısa sürede sonlanıp işlemin normal şekilde kapanması beklenir. Aksi takdirde işlemin bir programlama hatasına sahip olduğu düşünülebilir.

Üçüncü satırda; Sistemin yük durumu ile ilgili çeşitli kategorilerde yüzdelik değerler sunulur. Bu değerler sistemin sahip olduğu tüm çekirdeklere düşen yükün ortalaması olarak hesaplanır ve tüm değerlerin toplamı 100.00’ı verir. her bir çekirdeğe düşen yükü ayrı ayrı görmek için klavyeden 1 tuşuna basabilirsiniz. Buradaki us, sy, ni vb. kısaltmaların anlamları şunlardır:

·         us (user):  Kullanıcı yetkileri ile çalışan işlemlerin tüm işlemci zamanı içindeki oranını ifade eder.

·         sy (system): Linux çekirdeği tarafından çalıştırılan işlemlerin tüm işlemci zamanı içindeki oranını ifade eder.

·         ni (niced): Kullanıcı yetkileri ile çalışan ve önceliği artırılmış işlemlerin tüm işlemci zamanı içindeki oranını ifade eder.

·         id (idle):CPU’nun ölçülen işlem zamanı (1sn) içinde boşta geçirdiği sürenin oranıdır. Burada uzun süreler 0 değeri gözüküyorsa daha hızlı bir işlemciye ihtiyacınız olabilir.

·         wa (I/O wait): İşlemlerin disk gibi bir giriş çıkış aygıtından gelecek cevabı beklediği durumların toplam işlemci zamanı içindeki payını ifade eder.

·         hi (hardware interrupt): Donanım kesmelerine (donanımdan gelen talep üzerine işletilen yordamlar) tüm işlemci zamanı içinde ayrılan sürenin oranıdır.

·         si (software interrupt): Yazılım kesmelerine tüm işlemci zamanı içinde ayrılan sürenin oranıdır.

·         st (steal time):İşletim sistemi sanal makine içinde çalışıyorsa sanal makineyi yöneten işlemin (process) harcadığı işlem gücünn tüm işlemci zamanı içindeki oranını ifade eder.

Dördüncü satırda; RAM yetmediğinde diskin RAM olarak kullanıldığı swapişlemi hakkında bilgiler yer alır. Burada swap için diskte ayrılmış toplam miktar total ile aktif olarak kullanılan miktar used ile, kullanılmayan miktar ise free ile belirtilir. avail mem ile de halihazırda RAM’de nekadar boş alan olduğu gösterilir. Doğal olarak avail mem alanında bir değer gözükürken swap alanının hiç kullanılmaması beklenir.

Beşinci satırdan itibaren de sistemde çalışan işlemler/süreçler çeşitli sütun başlıkları altında listelenir. Bu liste varsayılan olarak her saniye başında güncellenerek ekrana yansıtılır. Dilerseniz bu süreyi klavyeden s tuşuna basarak ayarlayabilirsiniz. top aracı o anda işlemci tarafından aktif olarak çalıştırılan işlemleri (running) diğer işlemlere göre farklı renkte görüntüler. top aracının çalışan işlemler hakkında listelediği bilgiler şunlardır:

·         PID: İşlemin, Linux çekirdeği tarafından bilinen adı yani işlem numarasıdır. İşlem numarası küçük olanlar, sistemin işleyişi açısından en önemli işlemlerdir ve açılıştan itibaren çalıştırıldıkları anlamını taşır (örneğin 0..100 arası).

·         USER: İşlem sahibinin kullanıcı adıdır. İşlemler sahibi olan kullanıcının yetkilerini devralarak yani kullanıcısının hakları ile çalışırlar.

·         PRIORITY (PRI): Çekirdek açısından çalışan işlemin öncelik değeridir. Daha düşük değerler işlemci tarafından öncelikli olarak çalıştırılacağı anlamına gelir. Çekirdek bu işlemleri diğerlerine göre daha ön sıraya alarak işler.

·         NICE (NI): Kullanıcı programları için öncelik değeridir. Düşük değerlere sahip işlemler diğerlerine göre daha önceliklidir.

·         VIRT:İşlemin kullandığı toplam bellek miktarıdır. Fakat bu miktara diğer işlemler ve çekirdek bileşenleri tarafından paylaşılan yani ortak kullanılan bellek alanları da dahildir. Dolayısıyla burada görülen değerin tamamının işlem tarafından kullanıldığını söyleyemeyiz. Örneğin bir işlem bir paylaşılan bir kütüphane içindeki birkaç fonksiyonu kullandığı halde VIRT değerine kütüphanenin adreslenebilen tüm fonksiyonları katılarak hesap edilir.

·         RES: İşlemin tek başına fiziksel belleğin ne kadarını kullandığını ifade eder. Bu nedenle daima VIRT değerinden daha küçüktür. Bu değer MEM sütununda gözüken oranın karşılığıdır.

·         SHR: Bu değer VIRT sütununda gösterilen değerin ne kadarının paylaşılan bellek alanına karşılık geldiğini gösterir

·         S (state): Bu sütun işlemin durumu bir harf kodu ile görüntüler. R/S/D/T/Z/t harf kodlarından biri görüntülenir.

·         %CPU: Son ölçme periyodunda işlemin harcadığı CPU işlem kapasitesinin oranıdır. Her ölçme/örnekleme periyodunda güncel değer yeniden hesaplanır.

·         %MEM: Son ölçme periyodunda işlemin harcadığı belleğin toplam belleğe oranıdır. Her ölçme/örnekleme periyodunda güncel değer yeniden hesaplanır.

·         TIME+: Kullanıcı ve sistem kaynakları açısından ilgili işlemin çalıştırılması için harcanan toplam süredir.

·         Command: Çalışan işlemin disk patikası ve işleme geçilen parametreler.

S (state) sütununda gösterilen değerlerin anlamları ise şunlardır:

·         R: (running) İşlem hali hazırda çalışmakta veya icrası için işlemcinin (CPU) komut kuyruğuna alınmıştır.

·         S: (sleep) İşlemin bekleme/uyku durumunda olduğunu, hali hazırda CPU tarafından çalıştırılmadığını, bir olayın ya da şartın gerçekleşmesinin beklendiğini ifade eder.

·         D: (uninterruptible sleep) Kesintiye uğratılamaz bekleme anlamındadır. Bu durumdaki işlem diskten veya bir ağ konumundan okuma gibi bir I/O faliyeti içine girmiş beklemektedir. Bu durumdaki işlem sonlandırma sinyallerine (SIGKILL) cevap veremez.

·         T: (stopped) İşlemin durdurulduğu anlamına gelir. Örneğin CTRL+Z tuşlarına basıldığında işlemin komut kabuğu ile olan etkileşimi kesilir ve stoped durumuna geçer.

·         Z: (zombie) Bu durumdaki işlemler hükümsüz durumdadır. Ebeveyn işlem sonlandırılmasına rağmen alt işlem sistemde asılı kalmıştır. Bu durumun kısa sürede sonlanıp işlemin normal şekilde kapanması beklenir. Aksi takdirde işlemin bir programlama hatasından bahsedilebilir.

·         t: (stopped by debugger) Program geliştirme sırasında hata ayıklama (debug) amacıyla ilgili işlem satır satır çalıştırılarak (trace) kaydedicilerin durumları izlenir. Bu sırada (her bir trace adımında) işlem debugger tarafından durdurulur ve t işlem durumuna sahip olur.

1.1.6.2            top arabiriminin kullanılması

top aracı kullanıcı etkileşimli bir programdır ve bir çok izleme özelleştirme seçeneğine sahiptir. Bu seçenekler hakkında hızlıca bilgi almak için klavyeden h tuşunu (help/yardım) kullanabilirsiniz. top aracı çalışmakta  ikenh tuşuna bastığınızda çeşitli görünüm özelleştirmelerini yapabileceğiniz işlevler ve klavye kısayolları hakkında bir yardım ekranı görüntülenir (bu ekrandan çıkmak için q tuşuna basabilirsiniz):

Help for Interactive Commands – procps-ng 3.3.12

Window 1:Def: Cumulative mode Off.  System: Delay 3.0 secs; Secure mode Off.

 

Z,B,E,e   Global: ‘Z‘ colors; ‘B‘ bold; ‘E‘/’e‘ summary/task memory scale

  l,t,m     Toggle Summary: ‘l‘ load avg; ‘t‘ task/cpu stats; ‘m‘ memory info

  0,1,2,3,I Toggle: ‘0’ zeros; ‘1/2/3’ cpus or numa node views; ‘I‘ Irix mode

  f,F,X     Fields: ‘f‘/’F‘ add/remove/order/sort; ‘X‘ increase fixed-width

 

  L,&,<,> . Locate: ‘L‘/’&‘ find/again; Move sort column: ‘<‘/’>’ left/right

  R,H,V,J . Toggle: ‘R‘ Sort; ‘H‘ Threads; ‘V‘ Forest view; ‘J‘ Num justify

  c,i,S,j . Toggle: ‘c’ Cmd name/line; ‘i‘ Idle; ‘S‘ Time; ‘j‘ Str justify

x,y     . Toggle highlights: ‘x‘ sort field; ‘y’ running tasks

z,b     . Toggle: ‘z‘ color/mono; ‘b‘ bold/reverse (only if ‘x’ or ‘y’)

  u,U,o,O . Filter by: ‘u‘/’U‘ effective/any user; ‘o‘/’O‘ other criteria

  n,#,^O  . Set: ‘n‘/’#‘ max tasks displayed; Show: Ctrl+’O‘ other filter(s)

  C,…   . Toggle scroll coordinates msg for: up,down,left,right,home,end

 

  k,r       Manipulate tasks: ‘k‘ kill; ‘r‘ renice

  d or s    Set update interval

  W,Y       Write configuration file ‘W‘; Inspect other output ‘Y’

  q         Quit

          ( commands shown with ‘.’ require a visible task display window )

Press ‘h‘ or ‘?‘ for help with Windows,

Type ‘q’ or <Esc> to continue

Yardım ekranında listelenen kısayollar ile yapılabilecek işlemler şunlardır:

·         z: top arabirimini monokrom (siyah/beyaz) kipten renkli kipe geçirir.

·         Z: Renkli kipin renk seçeneklerinin 2 adımda ayarlanabileceği bir menü görüntüler. Bu menüde ilk olarak S (özet bilgi), M (mesajlar), H (sütun başlıkları) ve T (işlem bilgisi) bölümlerinden hangisinin ayarlanacağı ardından 0..7 aralığındaki bir renk seçilir ve Enter tuşuna basılır.

·         l: 1,5,15dk yük ortalamasının görüntülendiği satırı görünür yapar.

·         t: işlemci yük durumunu çeşitli biçimlerde görüntüler.

·         m: bellek kullanım durumunu çeşitli biçimlerde görüntüler

·         I: Irix kipini aktive eder. Irix kipindeyken, CPU yük durumunu gösteren %CPU sütununda ortalama değer değil toplam değer görüntülenir. Irix kipi normalde pasiftir (solaris kipindedir). 4 çekirdekli bir sistemde; Iris kipi pasifken 12 olarak görüntülenen yük değeri, Iris kipi aktifleştirildiğinde 48 .0 (4*12) olarak görüntülenir.

·         1: Çekirdeklerin yükünün ortalaması yerine, her bir çekirdeğin yük özetini ayrı ayrı görüntüler.

·         f: Listelenecek sütunların seçilebileceği bir menü görüntüler. Top’ın listelemesini istediğinizi sütunları ok tuşları ve boşluk tuşu ya da d tuşu ile seçebilirsiniz. Varsayılan olarak sıralanacak sütunu seçmek için ise; aynı ekrandayken ilgili sütun adının üzerine gelip s tuşuna basın. Top listesine geri dönmek için q tuşunu kullanın.

·         k:  İşlem numarası (PID) girilen işlemin (process) sonlandırılması ya da işleme sinyal gönderilmesi için kullanılır.

·         c: Çalışan işlemlerin tam yolunu ve seçeneklerini görüntüler veya gizler.

·         r: İşlem numarası (PID) girilen işlemin  çalışma önceliğini (nice) ayarlar.

·         x: İşlemlerin istenilen bir sütuna göre sıralanmasını sağlar. Bu tuşa bastıktan sonra < ve > tuşları ile istenilen sütun seçilebilir.

·         j: sütun değerlerinin sağa veya sola hizalanmasın sağlar.

·         i: Boşta olan (idle) yani o anda icra etmeyen işlemlerin top listesinde görüntülenmemesini sağlar.

·         S: Kümülatif kipi aktive eder. Bu kipte etkilenen sütun TIME sütunudur. Bir işleme ait sonlanan alt işlemlerin çalışma sürelerini de katarak TIME sütununda görüntüler.

·         u: Sadece belirtilen kullanıcıya ait işlemleri listeler. Tüm işlemleri listelemek için kullanıcı adı girilmeden Enter tuşuna basılır.

·         n: top ekranında gösterilebilecek en fazla işlem sayısını belirlemek için kullanılır.

·         b: Çalışmakta olan işlemleri çeşitli biçimlerde vurgular.

·         A: top ekranını pencerelere ayırır. Pencereler arasında geçiş yapmak için a tuşuna basılır.

·         Page UP/Down ve Yön tuşları: top listesinin görünen çerçevesini belirlemek için kullanılır.

·         W: top aracının arabiriminde yapılan ayarları disk dosyasına (~/.toprc) kaydeder.

1.1.6.3            top aracının komut satırı seçenekleri

top aracının birçok seçeneği komut satırından seçenek verilerek ayarlanabilir. Bu ayarlar top programı çalışmaya başladığında derhal geçerli olur. Hatta top ekran çıktısının kaydedilebilmesi için etkileşimli kipe girmeden doğrudan çalışması ve ekran çıktısı üretmesi de sağlanabilir. top komutunun kabul ettiği seçenekler aşağıdaki gibidir.

top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

Seçeneklerin görevleri şöyledir:

·         -h: top’ın kullandığı kütüphaneleri ve kullanım seçeneklerini görüntüler ve çıkar.

·         -b: top’ı toplu işlem (batch) kipinde başlatır. Bu kip top’ın çıktısının diğer programlara ya da bir dosyaya gönderilmesi için kullanışlıdır. top bu kipte kullanıcı girdisi kabul etmez. Belli hesaplama sayısından sonra ekran çıktısını standart çıkışa göndererek çıkar. Hesaplamadan (iteration) kasıt, işlemlere ait istatistiklerin ne kadar sayıda örnek alınarak hesaplanacağıdır.

·         -d:top’ın arabiriminin güncellenme sıklığını ayarlamak için kullanılır. Argüman olarak herhangi bir pozitif sayı kullanılabilir.

·         -u: Argüman olarak belirtilen kullanıcının işlemlerinin görüntülenmesini sağlar.

·         -S: top’ı kümülatif kipte başlatır. Bu kipte bir işleme ait sonlanan alt işlemlerin çalışma sürelerini de katarak TIME sütununda görüntüler.

·         -p: sadece işlem numarası (PID) belirtilen işlemlerin listelenmesini sağlar. İşlem numaraları virgül ile ayrılarak yazılabilir (örn: top –p 1,2,10)

·         -i: top aracının her bir ekran güncellemesi sırasında, işlemin önceki çalışma durumunu (bir önceki ekran güncellemesi sırasındaki) dikkate alarak boşta duran işlemleri görüntülemez. 

1.1.7           işlemci (CPU) ortalama yük değerlerinin yorumlanması

top aracı 1, 3 ve 15 dakikalık 3 farklı ortalama CPU yük değeri göstermekteydi. Peki, Raspberry Pi’ın başarımını ölçerken bu ortalamalarla ilgili değerlendirmemiz nasıl olmalı? İsterseniz bu konuyu temel CPU mimarisi açısından basitten karmaşığa doğru biraz irdeleyelim.

CPU’nun işlem yükü ve kapasitesi tanımlanırken otoyol köprüsü örneği konunun kolayca kavranması açısından çokça tercih edilir. Tek çekirdekli (single core) bir CPU’yu tek şeritli bir köprüye, CPU tarafından çalıştırılacak her bir komutu da köprüden geçecek olan araçlara benzetelim. Normal akan bir trafikte araçlar köprü girişinde hiç beklemeden karşıya geçebilirler, yoğun bir trafikte ise köprü operatörü köprüye sığmayan araçları bekletmek zorundadır.

Tek çekirdekli bir sistemde (Raspberry Pi 3’ün 4 çekirdeği vardır);  top çıktısında görülen 0.00 değeri köprüde hiç bir araç olmadığı, yani işlenen hiç bir komutun olmadığı anlamına gelir. 0.00 ile 1.00 (bir tam yüzde sıfır) arasındaki değerler köprü trafiğinin tasarlandığı limitler dahilinde başarılı bir şekilde işlediği anlamına gelir. 1.00’ın diğer bir anlamı da köprünün tam kapasite çalıştığı ve köprü girişinde bekleyen hiçbir aracın olmadığıdır.

Yine tek çekirdekli bir sistemde; 1.00 üzerinde görülen değerler köprüye gelen araç trafiğinin köprü tarafından taşınamadığını ve araçların köprü girişinde bekletildikleri anlamını taşır. Örneğin tek çekirdekli bir sistemde 2.00 (iki tam yüzde sıfır) değeri, köprünün mevcut kapasitesinin iki katı kadar trafiğin köprüye yöneldiğini ve diğer yarısının köprü girişinde bekletildiğini söyler. Eğer bu durumda köprümüz çift şeritli olsaydı araç beklemesi (çalıştırılmayı bekleyen komutlar) olmayacaktı. Örneğin tek çekirdekli bir sistemde top çıktısından göreceğiniz 0.50 değeri köprünün mevcut kapasitesinin yarısında çalıştığı anlamına gelir.

ideal şartlarda, CPU yük ortalamasının 1.00’in altında değerlerde olması beklenir. Burada önemli olan 1.00’ın üzerindeki değerlerin ne kadar süreyle devam ettiğidir. Kısa süreler için 1.00 üzerinde görülecek değerler (örneğin 1dk’lık ortalamada) sistem performansında hissedilebilen bir yavaşlığa yol açmaz. Böyle bir durumda dikkat 15 dakikalık yük ortalamasına verilmeli ve bu ortalamanın 1’in biraz üzerinde veya çok üzerinde olması da ayrı değerlendirilmelidir. Örneğin 15 dakikalık ortalamada 2.00 veya üzerinde göreceğiniz değerler, sistemin gözle görülür derecede yavaşlamasına neden olabilir. Böyle bir durumda hangi işlemin (process) yoğunluk oluşturduğu top listesinden gözlenmelidir. Kapasiteyi aşan hangi değerlerin sorun olarak algılanacağı tamamen kullanılan Raspberry Pi bilgisayarının yerine getirdiği görevlere ve kullanıcısının başarım beklentisine bağlıdır. Kimi kullanıcı sürekli olarak 1.00 değerini referans kabul ederken kimisi de 0.70 değerini kendine baz alabilir. Bu konu tamamen sistemin çalıştırdığı işlemler ve yerine getirdiği görevlerin başarımının tatminkar olup olmamasıyla ilgilidir.

Önceki paragrafta verdiğim örnekler tek çekirdekli bir işlemci yani tek şeritli bir köprü ile ilgiliydi. Peki CPU’muzun birden fazla çekirdeği olsaydı (Raspberry Pi 2/3/4, 4 çekirdeklidir) yani köprümüzden 4 şeritli bir otoyol geçseydi top çıktısı nasıl yorumlanmalıydı? Böyle bir durumda CPU yük ortalama değeri 3.00 olduğu halde her şey yolunda olabilecektir. Böyle bir sistemde göreceğiniz 4.00 ortalaması 4 çekirdeğin yani 4 şeritin de tam kapasite çalıştığı anlamına gelir. Bu hesapla; göreceğiniz 0.50 değeri ise mevcut işlem kapasitesinin 8’de birinin kullanıldığı anlamını taşır.

CPU yük durumunu görebileceğimiz bir diğer standart araç da uptime’dır. Aşağıdaki uptime komutunun çıktısına bakalım;

pi@raspberry:~ $ uptime

 15:34:13 up  6:14,  3 users,  load average: 0.65, 0.42, 0.36

Komut çıktısı tek çekirdekli bir sisteme aittir ve sistemin 14 gündür çalıştığını, son 1 dakikalık CPU yük ortalamasının %65, son 5 dakikalık yük ortalamsının %42, son 15 dakikalık yük ortalamasının ise %36 olduğunu söylemektedir. Yani işlem yoğunluğu yok gibi gözükmektedir. Ancak unutulmamalıdır ki bunlar ortalama değerlerdir. Misal olarak, 1dk’lık ortalama değer içinde; 15sn boyunca 1.5’lık (yani bekletilen komutlar ve bir darboğaz söz konusu), 45 sn boyunca da 0.2’lik bir işlem yükü söz konusu olursa 1dk’lık ortalama 0.52 olarak oluşur. Bu durumu da göz önünde bulundurmayı unutmayın.

1.1.8           htop ile işlemci başarımını canlı izleyin

htop programı, sistemin bellek ve işlem durumunu anlık olarak takip eden ve çalışan işlemler hakkında canlı bilgiler sunan bir araçtır. htop, benzer görevi yerine getiren ve hemen hemen tüm Linux tabanlı işletim sistemlerinde yerleşik bir araç olan top programının interaktif (kullanıcı etkileşimli) ve daha becerikli bir versiyonudur diyebiliriz. htop renklendirilmiş bir ekran çıktısı ile CPU ve Bellek kullanımı hakkında görsel bir arabirim sunarken işlemleri ağaç yapısında görüntülemek, filtrelemek ve işlemler içinde arama yapmak gibi güzel özelliklere sahiptir. htop’ı aşağıdaki gibi yükleyip çalıştırabilirsiniz.

pi@raspberry ~ $ sudo apt-get update

pi@raspberry ~ $ sudo apt-get install htop
pi@raspberry ~ $ htop


htop ekran görüntüsü

1.1.8.1            htop arabiriminin okunması

Programın ekran görüntüsünde yer alan Mem satırındaki göstergelerden yeşil renk (progresin 1. renk şeridi) Used, mavi renk (progresin 2. renk şeridi) Buffers ve sarı renk (progresin 3. renk şeridi)Cached değerlerine karşılık gelir. Bu değerlerin detaylı açıklamasını “Donanım Özelliklerini Görüntülemek” isimli başlıkta bulabilirsiniz.

Ekranın sağ üst tarafında güncellenen “Load average” değerleri sırasıyla son 1dk’lık, 5dk’lık ve 15dk’lık işlemci kullanım yoğunluğunu gösterir. Örneğin buradaki 0.28 değeri (top aracından farklı olarak) son 1dk’lık işlemci kullanım ortalamasının %28 olduğu anlamına gelir. Bu değer tüm çekirdeklerin (Pi3 için 4 çekirdek) ortalamasıdır. Yani 4 çekirdekli bir Raspberry Pi bilgisayarında 2.0 değerini görmek demek toplam CPU gücünün yarısının kullanıldığı anlamını taşır. Aynı bilgisayarda 4’ün üzerinde değerler gözüküyorsa bunun anlamı, CPU gücü işlemleri istenilen hızda çalıştırmak için yetersiz kaldığı ve kuyruk oluştuğudur.

htop ekranında çalışan işlemlere ait aşağıdaki bilgiler listelenir ve her saniye başında güncellenir. İşlemler hakkında varsayılan olarak listelenen değerler şunlardır:

·         STARTTIME: İşlemin başlatıldığı zaman.

·         PPID: İşlemi çalıştıran ana işlemin (sahip) işlem numarası.

·         STIME: (System CPU Time) Linux çekirdeğinin işlemin çekirdek çağrıları için harcadığı zaman.

·         NLWP: işlemi oluşturan kanalların (alt işlem) sayısı.

·         I/O PRIORITY: İşlemin giriş çıkış önceliği

1.1.8.2            htop arabiriminin kullanılması

htop aracı bazı kullanışlı klavye kısayollarına sahiptir. F1 ile F10 arasındaki tuşlarını farklı izleme özelliklerini devreye almak ve htop arabiriminden etkin şekilde yararlanmak için kullanabilirsiniz. Klavyedeki ok tuşları ile işlemler (process) arasında dolaşıp işlemi seçme, işlemi sonlandırma ve öncelik artırma gibi işleri yerine getirebilirsiniz. Önemli kısayolların adları ve görevleri ekranın altında dizilmiştir (F1..F10).

·         Boşluk tuşu (space) ile birden fazla işlemi seçebilirsiniz. Bu durumda seçili işlemler sarı renkte gösterilecektir.

·         F1 tuşu htop programın arabiriminde kullanılan renkler ve klavye kısayolları hakkında pratik bilgiler görüntüler.

·         F2 tuşu htop programının ayar menüsünü açar. Bu menü ile görsel özelliklerin tamamı ayarlanabilir.

·         F3 tuşu ile arama kipine geçip işlem adları içinde arama gerçekleştirebilirsiniz. Arama kipinden çıkmak için ESC tuşunu kullanın.

·         F4 tuşu ile sadece istenilen işlemlerin görüntülenmesi/filitrelenmesi sağlanabilir.

·         F5 tuşuna basarak çalışan işlemlerin hiyerarşik sırada gösterilmesini sağlayabilirsiniz.

·         F6 tuşu ile seçili işlemin ağacını genişletip alt işlemlerini görüntüleyebilirsiniz.

·         F7/F8 seçili işlemin NICE değerini artırıp azaltabilirsiniz. Düşük NICE değeri kullanıcı işlemleri arasında ilgili işleme öncelik atamak için kullanılır. Zaman kritik işlemleri öncelik sırasına göre ayarlayabilirsiniz.

·         F9 tuşu ile seçili olan işlemi sonlandırabilirsiniz.

·         F10 tuşu htop programından çıkmak için kullanılır. Q tuşu ile aynı kullanıma sahiptir.

F1 tuşu ile burada listelenmeyen daha birçok klavye kısayolu hakkında yardım alabileceğinizi hatırlatmak isterim. F1 ekranı bu kısayolları ezberlememek veya daha fazlasını kolayca bulmak için güzel dizayn edilmiştir. Aşağıdaki ekran çıktısını inceleyin:

CPU usage bar: [low-priority/normal/kernel/virtualiz               used%]

Memory bar:    [used/buffers/cache                            used/total]

Swap bar:      [used                                          used/total]

Type and layout of header meters are configurable in the setup screen.

 

Status: R: running; S: sleeping; T: traced/stopped; Z: zombie; D: disk sleep

Arrows: scroll process list              Space: tag process

Digits: incremental PID search               c: tag process and its children

F3 /: incremental name search              U: untag all processes

F4 \: incremental name filtering        F9 k: kill process/tagged processes

F5 t: tree view                         F7 ]: higher priority (root only)

p: toggle program path               F8 [: lower priority (+ nice)

u: show processes of a single user      a: set CPU affinity

H: hide/show user process threads       e: show process environment

K: hide/show kernel threads             i: set IO priority

F: cursor follows process               l: list open files with lsof

F6 + -: expand/collapse tree                 s: trace syscalls with strace

P M T: sort by CPU%, MEM% or TIME

I: invert sort order                 F2 S: setup

F6 >: select sort column                F1 h: show this help screen

                     F10 q: quit

htop programı kullanıcı etkileşimli kipte çalıştığından konsol ekranında fare ile seçim yapmak mümkün olmayabilir. Fare ile seçim yapmak için klavyeden shift tuşuna basılı tutabilirsiniz.

htop arabiriminde kullanabileceğiniz diğer klavye kısayolları ve görevleri şunlardır:

·         u: Sadece belli bir kullanıcıya ait işlemlerin listelenmesini sağlamak üzere kullanıcı adlarının yer aldığı bir menüyü görüntüler.

·         H: Kullanıcı alt işlemlerini (kanal/thread) gizler/gösterir.

·         K: Çekirdek alt işlemlerini (kanal/thread) gizler/gösterir.

·         P, M ve T: İşlemleri sırasıyla, işlemci, bellek ve CPU kullanım süresine göre sıralar.

·         I: Mevcut sıralamayı tersine çevirir.

·         Boşluk: Bir işlemi işaretlemek için kullanılır.

·         c: Bir işlemi ve alt işlemlerini işaretlemek için kullanılır.

·         U: İşaretli işlemlerin işaretlerini kaldırır.

·         a: Seçili işlemin kaç CPU çekirdeği tarafından çalıştırılacağını ayarlar.

·         e: Seçili işlemin ortam bilgilerini (ortam değişkenlerini) görüntüler.

·         i: Seçili işlemin giriş/çıkış (I/O) önceliğini ayarlar.

·         l: lsof aracı ile işlem tarafından kullanılan (açılmış olan) dosyaları listeler.

·         s: strace aracı ile işlemin çağırdığı sistem fonksiyonlarını listeler.

1.1.8.3            htop arabiriminin görünümünü özelleştirmek

F2 tuşu ile htop aracının arabirimini ayarlayarak özelleştirebileceğiniz bir menü sistemi görüntülenir.


htop programın Setup (F2) menüsü

Setup ana menüsünün altında 4 çeşit ayar mevcuttur. Meters, Display Options, Colors ve Coloumns. Meters seçeneği ile ekranda canlı olarak gösterilecek ölçüm panelleri ayarlanır. load avarage (Yük ortalaması), task counter (Görev sayacı) ve Uptime (sistemin açık kalma süresi) bunlardan bazılarıdır. Dilerseniz Available meters sütunundan sol ve sağ sütuna istediklerinizi ekleyip çıkartabilir, htop aracını kendinize göre özelleştirebilirsiniz. Ölçüm panellerini sol ve sağ sutun arasında taşımak için enter ve sağ-ok/sol-ok tuşları kullanılır. Benzer şekilde Available meters sütunundaki ölçüm panellerini seçmek için de enter tuşunu kullanabilirsiniz. Sol ve sağ sütunlardan bir paneli çıkartmak için klavyeden Del tuşu kullanılır. Özelleştirmeyi tamamlayıp htop ekranına geri dönmek için F10 tuşuna basın.


htop aracının Display options menü alt seçenekleri

Display options menüsü altından özelleştirilebilecek seçenekler ve görevleri aşağıdaki gibidir:

·         Tree view: İşlem listesini ağaç yapısı şeklinde görüntüler.

·         Shadow other users’ process: htop’ı çalıştıran kullanıcıya ait olmayan işlemleri koyu renkte (gölgeli) görüntüler.

·         Hide kernel threads: Linux çekirdeğine ait işlemlerin alt işlemlerini (threads/kanallar) gizler.

·         Hide userland process threads: Kullanıcılara ait işlemleri alt işlemlerini (threads/kanallar) gizler.

·         Display threads in a different color: Alt işlemleri farklı renkte görüntüler.

·         Show custom thread names: Kanalların özel isimlerini görüntüler.

·         Show program path: Çalışan işlemlerin disk üstündeki patikalarını da görüntüler.

·         Highlight program “basename”: Çalışan işlemlerin program adlarını farklı bir renkte belirtir.

·         Highlight large numbers in memory counters: htop ana ekranındaki işlemler (prosesler) listesinde yer alan VIRT, RES ve SHR sütunlarındaki göreceli olarak yüksek kullanım değerlerinin yüksek hanelerini dikkat çekmesi amacıyla ışıklandırır.

·         Leave a margin around header: htop ekranın üst kısmında yer alan (sol sütun ve sağ sütun) panellerin etrafına boşluk bırakara okunurluğu artırır.

Colors menü seçeneği ile htop aracının renk teması Monochromatic, Black on White, Light Terminal, MC, Black Night ve Broken Gray ön tanımlı seçeneklerinden biri seçlilerek farklı renk görünümleri ayarlanabilir.

Coloumns menü seçeneği ile htop’ın işlem listesinin sütunları ayarlanabilir. Burada 40’dan fazla sütun vardır. Bu sütunların önemli olanlarında “htop arabiriminin kullanılması” başlıklı konuda bahsedilmiştir.

Bu menüde yapılan görünüm ayarları ~/.config/htop/htoprc dosyasında saklanır. htoprc metin tabanlı bir dosyadır ve herhangi bir metin editöründe düzenlenebilir. Ayarlarınızı yedeklemek için bu dosyayı kullanabilir veya varsayılan ayarlara geri dönmek için aşağıdaki gibi silebilirsiniz:

pi@raspberry:~ $ rm ~/.config/htop/htoprc

1.1.9           cpulimit aracı ile işlemci kullanımını sınırlandırın

Bazen aşırı CPU kullanan programlar Raspberry Pi’ın genel başarımının düşmesine ve dolayısıyla da diğer programların istenildiği gibi çalıştırılamamasına neden olabilir. cpulimit adındaki araç ile sistemde çalışan işlemlerin (process) CPU’nun ne kadarını kullanacağını sınırlayabilirsiniz.  Aracı kurmak için aşağıdaki komutları verin:

pi@raspberry:~ $ sudo apt-get update

pi@raspberry:~ $ sudo apt-get install cpulimit –y

Programın kullanımı oldukça kolaydır. Aşağıdaki örneği inceleyelim.

pi@raspberry ~ $ cpulimit -p 2555 -l 50 –c 4 –b

-p seçeneği ile işlemci kullanımını sınırlayacağımız işlemin işlem numarasını (PID) belirttik. PID numarasını ps, top veya htop gibi araçlar ile listeleyerek öğrenebilir veya pidof komutunu kullanabilirsiniz.

–l seçeneği ile sınırlamak istediğimiz işlemci kullanım yüzdesini tanımladık. Eğer kullanımını sınırlamak istediğimiz işlem çok kanallılığı (multi threading) destekliyorsa bu yüzdeyi 4 ile çarpmalısınız. Yani 4 çekirdeği olan bir Raspberry Pi modelinde, sınırlama yapmak istediğiniz işlem, 4 çekirdeğide kullanabilen yapıdaysa ve işlemcinin azami %50’sini kullanmasını istiyorsanız –l parametresine 200 değerini verebilirsiniz. 

-c seçeneği ile işlemcinin sahip olduğu çekirdek sayısını belirttik. cpulimit’in –l seçeneğinin oranını doğru uygulayabilmesi için çekirdek sayısının belirtilmesinde fayda vardır.

-b seçeneği ile cpulimit’i arak plana atıyoruz. İşlemin sonucunu ps ve htop gibi bir araçtan kontrol edebilirsiniz.

cpulimit, PID numarası verilen işleme belli aralıklarla SIGSTOP ve SIGCONT mesajlarını gödererek işlemi 15-20ms süresince durdurur ve ardından yeniden devam ettirerek çalışır. İşlem durduğu sırada sistem mesajlarını veya I/O işlemlerini kaçırabileceğinden programın istenildiği gibi çalışmamasına da neden olabilir. cpulimit’i kullanırken buna dikkat etmeniz gerekir.

 

 

KULLANIM SARTLARI

Bu web sitesinin içeriginin tüm haklari saklidir. Kitabin/site içeriginin hiçbir bölümü, yazarinin yazili izni olmaksizin tekrar üretilemez, bir erisim sisteminde tutulamaz, herhangi bir biçimde elektronik, mekanik, fotokopi, ses kayit ya da diger yollarla iletilemez. Ancak istisna olarak; ticari olmayan amaçlar için yazara önceden bilgi vermek ve raspberrypikitabi.com adresini kaynak göstermek kaydiyla 10 sayfaya kadar kullanilabilir. Kitapta kullanilan logolar, firmalarin tescilli logolaridir. Raspberry Pi, Raspberry Pi Vakfi'nin ticari markasidir.



BILGILENDIRME

Bu kitapta Raspberry Pi, çesitli çevre birimleri ile düsük voltaj elektronik bilesenlerin bir arada kullanildigi uygulamalar yer almaktadir. Uygulamalarin tamami Raspberry Pi'in üzerinde kosan Linux çekirdegi ve açik kaynak kod özgür yazilimlar kullanilarak gerçeklestirilmistir. Uygulamalar gerçeklestirilirken ortaya çikabilecek elektriksel sorunlar veya kullanici hatalari nedeniyle cihazlar zarar görebilir veya veri kaybi yasanabilir. Ayrica, kitapta anlatilan konularin uygulanmasi sonucu ortaya çikabilecek her türlü lisans ihlali/kanuni ihlal ve zararin sorumlulugu uygulayan kisiye aittir. Olusabilecek herhangi bir zarardan yazar sorumlu tutulamaz.

Leave a comment

Your email address will not be published. Required fields are marked *