← man/disk_and_filesystems
cvdb — man cvdb — 80×24
ugur@toprak:~/man/disk_and_filesystems$man cvdb
Bölüm 8 Disk & Dosya Sistemleri

cvdb

Xsan İstemci Dosya Sistemi Hata Ayıklayıcısı

Genel Bakış

       cvdb [options]

Açıklama

cvdb, geliştiriciler ve sistem yöneticilerinin Xsan Dosya Sistemi istemci dosya sisteminden hata ayıklama bilgileri çıkarması için bir mekanizma sağlar. Sistem yöneticileri tarafından istemci dosya sisteminin gerçekleştirdiği sistem günlüğü (logging) düzeyini değiştirmek için kullanılabilir. Ayrıca çeşitli istatistikleri almak için bir seçenek (switch) de bulunur.

Kullanım

cvdb, çeşitli işlevleri yerine getiren çok amaçlı bir hata ayıklama aracıdır. Zengin seçenek kümesi, kullanıcıya çeşitli hata ayıklama ve günlük kaydetme işlevleri üzerinde kontrol sağlar. cvdb'nin ana özellikleri şunlardır: Hata ayıklama günlüğünü kontrol etme. Sistem günlüğü (syslog) kaydının düzeyini ve ayrıntısını kontrol etme. İstatistikleri alma.

Seçenekler

  • -g: Çalışan bir sistemden hata ayıklama günlüğünü alır. Bu komuttan sonra günlük işaretçileri sıfırlanır, böylece bir sonraki cvdb -g çağrısı tampondan (buffer) yeni bilgileri alır.

  • -C: İzlemeyi (trace) sürekli olarak anlık görüntüler (snap). (Yalnızca -g seçeneği ile kullanışlıdır.)

-S stopfile stopfile dosyası göründüğünde izlemeyi anlık görüntülemeyi durdurur. (Yalnızca -g ve -C seçenekleri de kullanıldığında kullanışlıdır.)

-D msec İzleme anlık görüntüleri arasında msec milisaniye kadar gecikme ekler. Varsayılan değer 1000 milisaniye veya bir saniyedir. (Yalnızca -C ve -g seçenekleri de kullanıldığında kullanışlıdır.)

  • -F: İzleme çıktısını standart çıktıya yazmak yerine cvdbout.000000, cvdbout.000001 vb. olarak adlandırılan dosyalara kaydeder. Bu dosyalar mevcut çalışma dizininde görünecektir. (Yalnızca -C ve -g seçenekleri de kullanıldığında kullanışlıdır.)

-n cnt cnt kadar dosya yazdıktan sonra, cvdbout.000000 dosyasından başlayarak cvdbout çıktı dosyalarının üzerine yazar. Bu, esasen izleme çıktısını "başa saracaktır".

-N name cvdb çıktı dosyaları için cvdbout yerine name adını kullanır. (Yalnızca -C, -g ve -F seçenekleri de kullanıldığında kullanışlıdır.)

  • -d: Hata ayıklama günlüğünü devre dışı bırakır. Bu, başlangıç (başlatma) varsayılanıdır.

  • -e: Hata ayıklama günlüğünü etkinleştirir. Varsayılan olarak devre dışıdır. Not: Canlı (üretim) ortamında günlük kaydının etkinleştirilmesi dosya sistemi performansını önemli ölçüde düşürebileceğinden dikkatli olunmalıdır.

-m modules=bitvector logmask=bitvector Belirli bir modül veya modüller için izleme noktalarını belirtir.

  • -l: Mevcut izleme noktalarını ve maske değerlerini listeler.

  • -L: Kullanılabilir izleme/hata ayıklama noktalarını listeler.

-s syslog={none|notice|info|debug} Sistem günlüğü (syslog) kayıt değerini ayarlar. Bağlama (mount) sırasındaki varsayılan değer notice'dir. Daha fazla bilgi için mount_acfs(8) kılavuz sayfasına bakın.

-R size=[nbytes[k|m|g]] Hata ayıklama günlüğünü yeniden boyutlandırır. Varsayılan olarak günlük boyutu 4MB'tır. İzin verilen minimum boyut 32768 bayttır.

  • -v: İşlemler hakkında ayrıntılı bilgi verir.

  • -i: Dizin önbelleği hakkında çeşitli istatistikleri yazdırır. Etkinleştirilip yapılandırılırsa dizin önbelleği, dizin içeriklerine ait bir dizi tampon içerir. Bu önbellek, bağlanmış tüm Xsan dosya sistemleri tarafından paylaşılır. -v seçeneği olmadan aşağıdakiler yazdırılır:

Şu anda önbelleğe alınmış dizin tamponlarının sayısı ve izin verilen maksimum sayı.

Bir tamponun önbellekte kaç kez "isabet" (hit) aldığı.

Önbellek aramasının kaç kez başarısız (miss) olduğu ve MDC'ye bir RPC gerektirdiği.

Bir dizin okumasının, aynı dizinin bir önceki okumasında kullanılan SON tamponu kaç kez yeniden kullandığı (bir önbellek isabetine benzer ancak önbelleği araştırmaz).

Bir dizin okumasının kaç kez EOF (dosya sonu) ofsetini belirttiği.

Belirli bir dizinin dizin önbelleğinin kaç kez geçersiz kılındığı. Örneğin, dizin içeriği okunduktan sonra değiştiyse ve ardından gelen bir dizin okuma işlemi yapıldıysa, bu durum geçersiz kılmaya neden olur.

-v de belirtilirse, -i daha fazla istatistik gösterir. Dizin önbelleğinde 2 karma tablo (hash) olduğunu unutmayın: biri tüm tamponlar için, diğeri ise dizin ve dosya sistemine göredir.

Dizin önbellek tamponlarını bulmak için kullanılan karma tablodaki girdi sayısı.

Dizin önbellek tampon karma tablosu kullanılarak yapılan aramaların sayısı.

Tamponlar için dizin önbelleğini arayan toplam araştırma sayısı. Birden fazla tampon aynı karma kovasına (hash bucket) isabet edebileceğinden, karma tablodaki aramalardan daha büyük olabilir.

Belirli bir karma kovasına isabet ettikten sonraki maksimum araştırma sayısı (tamponlar için).

Dizin ve dosya sistemine göre karma tablodaki maksimum araştırma sayısı.

  • -b: Her bir tampon önbelleği (buffer cache) hakkında çeşitli istatistikleri yazdırır. Bununla birlikte kullanılabilecek tek diğer seçenek -v'dir. Her cachebufsize için tampon önbellekleri mevcuttur, bkz. mount_acfs(8). Her tampon önbelleği için aşağıdakiler yazdırılır:

Bu tampon önbelleğini kullanan bağlı dosya sistemlerinin sayısı

Tampon sayısı ve kullanılan toplam bellek

Önbellek isabetlerinin sayısı (ve yüzdesi)

Önbellek ıskalamalarının (miss) sayısı (ve yüzdesi)

Tek bir dosya sisteminin aşırı kullanımını önlemek amacıyla yazma sınırlandırması (write throttling) için yapılan kontrollerin sayısı. Yazma sınırlandırmaları yalnızca önbelleği 1'den fazla dosya sistemi kullandığında gerçekleşir.

Yazma işlemlerinin kaç kez sınırlandırıldığı

-b ile birlikte -v seçeneği de kullanılırsa, her bir tampon önbelleği için aşağıdaki ek istatistikler yazdırılır:

buffercachecap, bkz. mount_acfs(8)

buffercachewant (dahili, iş parçacığının bir tampon beklediği anlamına gelir)

bufhashsize (dahili, tamponları aramak için kullanılan karma tablodaki girdi sayısı)

bcdirtycnt (dahili, önbellekte sıraya alınmış "kirli" verilere sahip tamponların sayısı)

dirty_ndone (dahili, bcdirtycnt + yazılmakta olan tamponlar)

flusheractive (dahili, tampon boşaltıcının aktif olduğunu belirten bayrak)

deferredflush (dahili, dosyalar kapatıldıktan sonra ertelenen tampon sayısı)

dirtywaiters (dahili, sınırlandırma nedeniyle bekleyen iş parçacığı sayısı)

rsvd max (dahili, görülen maksimum ayrılmış alan miktarı)

non-zero rsvd min (dahili, görülen > 0 minimum ayrılmış alan miktarı)

successful rsvd requests (dahili, ayrılmış alana ihtiyaç duyulan sefer sayısı)

failed rsvd requests (dahili, ayrılmış alanın mevcut olmadığı sefer sayısı)

  • -B: Her saniyede bir yenilenen curses tabanlı bir ekran kullanarak tampon önbellek istatistiklerini yazdırır. İstatistikler; okumalar ve yazmalar için, her önbellek bölümü için ve her bağlama noktası için ayrı ayrı tutulur. Cumulative olarak etiketlenen istatistikler, komut çağrıldığından veya son sıfırlamadan bu yana olan toplamları temsil eder. Current olarak etiketlenenler ise ekran yenileme aralığına kabaca denk gelen, son bir saniyedeki değişikliği temsil eder.

curses destekleyen sistemlerde etkileşimli olarak iki tuş vuruşu tanınır. q (quit) ekranın sonlandırılmasına neden olur. r (reset) ise kümülatif sayaçları sıfırlar.

-B seçeneği, tampon önbelleğinin performansını çeşitli uygulamalar, I/O alt sistemleri ve çeşitli yapılandırma parametreleri ile analiz etmek amacıyla kullanılmak üzere tasarlanmıştır.

Yenilenen ekran, curses özelliğine sahip istemcilerde desteklenir. Diğer istemciler benzer içerikle satır yönelimli bir çıktı üretecektir.

Hiçbir dosya sistemi bağlı değilken 30 saniye sonra bir gözetim zamanlayıcısı (deadman timer) ekranı sonlandıracaktır. Bu, dosya sistemi kapanışı sırasında kilitlenmeyi önlemek içindir.

  • -x: Dağıtık LAN proxy istemci ve sunucu istatistiklerini yazdırır. Bununla birlikte kullanılabilecek diğer tek seçenekler -X and -f'dir. Proxy istatistikleri, her proxy bağlantısının hem istemci hem de sunucu uçlarında toplanır. İstemci, her proxy istemci dosya sistemi için bir proxy sunucusuna giden her yol için bir bağlantı girdisine sahip olacaktır. Bir proxy sunucusu ise dosya sistemini bağlamış olan her istemciye giden her yol için bir bağlantı girdisine sahip olacaktır.

Not: Dağıtık LAN proxy seçenekleri, yalnızca dağıtık LAN istemcisini veya sunucusunu destekleyen platformlarda kullanılabilir.

Her proxy bağlantısı için aşağıdaki bilgiler görüntülenir:

Client/Server System ID: Bu IP adresi uzak ana bilgisayarı tanımlar.

Client IP Addr: Bağlantının İstemci tarafının IP adresi.

Server IP Addr: Bağlantının Sunucu tarafının IP adresi.

Read Bytes/Sec: Bağlantının ölçülen son okuma performansı.

Write Bytes/Sec: Bağlantının ölçülen son yazma performansı.

FS Read Bytes/Sec: Bu dosya sistemi için tüm bağlantıların ölçülen son okuma performansı.

FS Write Bytes/Sec: Bu dosya sistemi için tüm bağlantıların ölçülen son yazma performansı.

Queued I/O: Bu bağlantı için bekleyen (out-standing) I/O birikmesi (backlog). Birikme yalnızca istemci tarafı bağlantıları için anlamlıdır.

-X seçeneği Her yol için istatistikleri virgülle ayrılmış değerler (CSV) biçiminde döker. (Yalnızca -x seçeneğiyle kullanışlıdır.) Aşağıdaki seçenekler mevcuttur:

1 Uzak uç nokta IP adresini ve bayt cinsinden birikmeyi (backlog) döker. Bu seçenek yalnızca istemci bağlamaları için geçerlidir.

2 Uzak uç nokta IP adresini ve saniyede okunan bayt miktarını döker.

3 Uzak uç nokta IP adresini ve saniyede yazılan bayt miktarını döker.

-f fsname Bir eylem seçeneğiyle ilişkili dosya sisteminin adını belirtir. Proxy istatistikleri için (-x seçeneği), verilen dosya sisteminin bağlantılarını filtreler. Bu parametre, okuma/yazma istatistikleri (-y veya -Y) seçeneği için gereklidir.

  • -U: NOT: Genel kullanım için tasarlanmamıştır. Yalnızca hata enjeksiyonu (fault injection) aracı olarak Quantum Destek ekibi tarafından önerildiğinde kullanın.

Bu seçenek, bu düğümün bir proxy istemcisi veya ağ geçidi (gateway) olduğu tüm dosya sistemlerindeki tüm proxy bağlantıları için proxy karşı tarafına (peer) giden ağ bağlantısını sıfırlar. Bu, beklenmedik bir ağ bağlantısı kesilmesini ve yeniden bağlanmasını simüle eder. StorNext DLC proxy istemcisi ve ağ geçidi sistemlerindeki hata işleme ve yeniden bağlanma mantığının sağlamlığını test etmek için tasarlanmıştır.

-y, -Y: -f seçeneğiyle belirtilen dosya sistemi için okuma/yazma istatistiklerini görüntüler (gerekli). -Y ise istatistikleri temizler.

  • -Z: NOT: Genel kullanım için tasarlanmamıştır. Yalnızca hata enjeksiyonu (fault injection) aracı olarak Quantum Destek ekibi tarafından önerildiğinde kullanın.

Bu seçenek, tüm aktif dosya sistemleri için dosya sistemi yöneticisine giden ağ bağlantısını sıfırlar. Bu, beklenmedik bir ağ bağlantısı kesilmesini ve yeniden bağlanmasını simüle eder. StorNext dosya sistemindeki hata işleme ve yeniden bağlanma mantığının sağlamlığını test etmek için tasarlanmıştır.

  • -z: NOT: Genel kullanım için tasarlanmamıştır. Yalnızca bir performans ölçüm aracı olarak Quantum Destek ekibi tarafından önerildiğinde kullanın. Bu seçeneğin ayarlanması veri bozulmasına, veri kaybına veya başlatılmamış disk verilerinin istenmeyen şekilde açığa çıkmasına neden olabilir!!

Bu seçenek DEVNULL özelliğini açar ve yalnızca Linux istemcileri için geçerlidir. Etkinleştirildiğinde, bu seçenek yeniden başlatmaya kadar etkin kalmaya devam edecektir. Bu seçenek etkinleştirildiğinde, DEVNULL benzeşimi (affinity) olan dosyalara ait tüm I/O işlemleri en alt düzeyde gerçekleştirilmez. Alan tahsisi dahil tüm kod yolları yürütülür, ancak veriler diske yazılmaz veya diskten okunmaz. Bunun yerine, yazmalar sadece I/O işlemini tamamlayıp geri döner, okumalar ise "okuma" tamponunu sıfırlar ve I/O işlemini tamamlar.

DEVNULL benzeşimi olmayan dosyalar bu ayardan etkilenmez.

Bu özelliği kullanmayı denemeden önce, istemcinin erişebildiği hiçbir dosya sisteminde hiç kimsenin DEVNULL ifadesini benzeşim (affinity) olarak kullanmadığından emin olun. Ardından, test edilen dosya sistemine ait snfs_config(5) dosya sistemi yapılandırma dosyasını, veri tutabilen en az bir şerit grubunda (stripe group) DEVNULL benzeşimini içerecek şekilde değiştirin. Sonrasında fsm'yi yeniden başlatın. Daha sonra, bu test için kullanılacak dosyaları barındıracak bir dizin oluşturmak amacıyla -k DEVNULL ile cvmkdir(1) komutunu kullanın. Son olarak, cvdb -z seçeneğiyle bu özelliği etkinleştirin.

Hata Ayıklama Günlüğü

Çekirdekte (kernel) çalışan kod geliştirmek, kullanıcı düzeyinde bir uygulama programlamaktan çok farklıdır. Çekirdek ortamına aşina olmayan eklenti geliştiricilerine yardımcı olmak için Xsan, basit bir "izleme noktası benzeri" (tracepoint-like) hata ayıklama mekanizması sağlar. Bu mekanizma, geliştiricilerin kodlarında hata ayıklamaya yardımcı olmak için printf benzeri ifadeler kullanmalarına olanak tanır.

Hata ayıklama özelliğini kullanmak için her modül (tipik olarak bir ".c" dosyası), ModuleLogInfo_t türünde bir yapı tanımlamalıdır. Bu yapı, modülün hata ayıklama ifadelerinde görünecek adını tanımlar ve o modül için geçerli olan hata ayıklama düzeyini belirtir.

ModuleLogInfo_t MyLogModule = { "mymodule_name", DEBUGLOG_NONE};

Bu özelliği kullanmak için her modül AddLogModule() rutinini çağırmalıdır. Bu genellikle modül ilk kez başlatıldığında (bir eklenti için xxx_start() rutininde) yapılır. Günlük kaydı artık gerekmediğinde (eklenti kaldırıldığında olduğu gibi), modül sistem kaynaklarını serbest bırakmak için RemoveLogModule() rutinini çağırmalıdır.

Günlük kaydı varsayılan olarak etkin değildir. Günlük kaydını istediğiniz zaman etkinleştirmek için etkinleştirme bayrağını (-e) belirtin.

shrubbery %h: cvdb -e

Günlük kaydını devre dışı bırakmak için devre dışı bırakma bayrağını belirtin.

shrubbery %h: cvdb -d -v Disabling debug logging

Hata ayıklama düzeyi 64 bitlik bir maske ile kontrol edilir. Bu, her modülün 64 farklı, bağımsız izleme/günlük noktasına sahip olmasını sağlar. Kod yürütüldüğünde günlük noktası etkinse, izleme noktası dairesel tampona (circular buffer) dökülecektir.

Önceden tanımlanmış tüm izleme noktalarının tam listesi şu şekilde elde edilebilir:

rabbit %h: cvdb -L Trace points: cvENTRY 0x0001 cvEXIT 0x0002 cvINFO 0x0004 cvNOTE 0x0008 cvWARN 0x0010 cvMEM 0x0020 cvNUKE 0x0040 cvLOOKUP 0x0080 cvGATE 0x0100 cvSTRAT 0x0200 cvRWCVP 0x0400

Bu izleme noktaları daha sonra günlük kaydının ayrıntısını kontrol etmek için kullanılacaktır. Yukarıdaki örneği kullanarak, eğer cvEXIT ve cvINFO izleme noktaları etkinleştirilirse, yalnızca bu izleme noktaları günlüğe dökülecektir.

İzleme noktalarını etkinleştirmek için ilk adım modülün kimliğini (ID) belirlemektir. Bu, list komutuyla yapılır.

shrubbery %h: cvdb -l Module 'cvfs_memalloc' module 0x000001 logmask 0x0000000000000000 Module 'cvfs_fsmsubr' module 0x000002 logmask 0x0000000000000000 Module 'cvfs_fsmdir' module 0x000004 logmask 0x0000000000000000 Module 'cvfs_fsmvfsops' module 0x000008 logmask 0x0000000000000000 Module 'cvfs_fsmvnops' module 0x000010 logmask 0x0000000000000000 Module 'cvfs_sockio' module 0x000020 logmask 0x0000000000000000 Module 'cvfs_subr' module 0x000040 logmask 0x0000000000000000 Module 'cvfs_vfsops' module 0x000080 logmask 0x0000000000000000 Module 'cvfs_vnops' module 0x000100 logmask 0x0000000000000000 Module 'cvfs_dmon' module 0x000200 logmask 0x0000000000000000 Module 'cvfs_rwlock' module 0x000400 logmask 0x0000000000000000 Module 'cvfs_rw' module 0x000800 logmask 0x0000000000000000 Module 'cvfs_fsmtokops' module 0x001000 logmask 0x0000000000000000 Module 'cvfs_extent' module 0x002000 logmask 0x0000000000000000 Module 'cvfs_plugin' module 0x004000 logmask 0x0000000000000000 Module 'cvfs_disk' module 0x008000 logmask 0x0000000000000000

Eklentinin cvENTRY ve cvEXIT izleme noktalarını, rwlock, vnops ve memalloc rutinlerini etkinleştirmek için modules komutunu kullanın.

shrubbery %h: cvdb -m modules=0x4501 logmask=3

Bit maskeleri birikimlidir (additive), değiştirme yapmaz. Bu, belirtmediğiniz modüllerin ve izleme noktalarının etkilenmeyeceği anlamına gelir. Tüm izleme noktalarında tüm hata ayıklamaları açmak için eksi bir (-1) belirtin.

shrubbery %h: cvdb -m modules=-1 logmask=-1

Modül sisteme eklendikten sonra, günlük mesajları 1 megabaytlık dairesel bir tampona dökülecektir. Modüller, günlük mesajlarının biçiminin her dosyada aynı olması için her dosyada bir makro tanımlamayı kullanışlı bulabilirler. Örneğin, aşağıdaki makro tanımı ve günlük fonksiyonu, izleme noktası etkinse günlük tamponuna bilgi dökecektir:

#define LOGINFO (&MyLogModule)

LogMsg(LOGINFO, cvEXIT, "Plugin read return error %d bytes %llx", error, num_bytes);

Çalışan bir sistemdeki günlükten mesajları çıkarmak için cvdb'nin -g seçeneğini kullanın.

Sistem Günlüğü (Syslog)

Xsan istemci dosya sistemi, bazı olayları sistem konsolunda ve sistem günlüğünde (/var/adm/SYSLOG) görünecek şekilde günlüğe kaydedebilir. Mesajların ayrıntısı syslog parametresiyle kontrol edilebilir. Varsayılan ayar tüm mesajları kaydetmektir. Sistem günlüğü kaydının kurulması hakkında daha fazla bilgi için syslogd(1M) sayfasına bakın.

Dört günlük düzeyi vardır: none, notice, info ve debug. Düzeyler önceliklendirilmiştir, bu nedenle en ayrıntılı düzey debug düzeyidir; düzeyin none olarak ayarlanması günlük kaydını tamamen kapatacaktır. Her düzeyde günlüğe kaydedilen olaylar şunlardır:

notice • FSM ile yeniden bağlantı kurulması.

info • tüm notice mesajlarına ek olarak • soket arka plan işleminin (daemon) sonlandırılması

debug • Şu anda kullanılmıyor

Günlük düzeyi varsayılan olarak debug olarak ayarlanmıştır.

Meşgul Ayırmalar (Busy Unmounts)

Bazen, tüm işlemlerin artık birimi kullanmadığı görünse bile Xsan birimini ayırmak (unmount) imkansız olabilir. Sorun, işlemlerin büyük olasılıkla zombi (zombie) durumunda olmasıdır; ps çıktısında görünmeseler bile crash kullanılarak bulunabilirler. Genellikle bu işlemler Xsan dosya sistemindeki bir kilidi veya FSM'den bir yanıtı beklemektedir.

Hata Ayıklama Günlüğü Örnekleri

Günlük kaydını etkinleştirmek için: cvdb -e

Günlük kaydını devre dışı bırakmak için: cvdb -d

Çalışan bir sistemde günlük bilgisini almak için: cvdb -g > cvdbout

Çalışan bir sistemde günlük bilgisini sürekli olarak almak ve izlemeyi saniyede bir kez anlık görüntülemek için: cvdb -g -C > cvdbout

Çalışan bir sistemde günlük bilgisini sürekli olarak almak, izlemeyi iki saniyede bir anlık görüntülemek ve STOP adlı dosya göründüğünde durmak için: cvdb -g -C -D 2000 -S STOP > cvdbout

Çalışan bir sistemde günlük bilgisini sürekli olarak almak ve çıktıyı cvdbout.000000, cvdbout.0000001 vb. olarak adlandırılan dosyalara kaydetmek ve 100 dosya yazıldıktan sonra başa sarmak için: cvdb -g -C -F -n 100

/tmp/snap.000000, /tmp/snap.000001 vb. olarak adlandırılan izlemeleri sürekli anlık görüntülemek için: cvdb -g -C -F -N /tmp/snap

Tüm modülleri ve bunların etkinleştirilmiş izleme noktalarını listelemek için: cvdb -l

Ayrı modüllerde izleme noktaları ayarlamak için: cvdb -m modules=bitmask_of_modules logmask=tracepoints.

Günlük boyutunu 12 megabayt olarak yeniden ayarlamak için: cvdb -R 12m

Önceden tanımlanmış tüm izleme noktalarını dökmek için: cvdb -L

Ayrıca Bakınız

syslogd(1M), umount(8), cvdbset(8)

Xsan Dosya Sistemi Ocak 2018 CVDB(8)