Ders 08 / 09
Çekirdek İçi İzleme
Olay tabanlı çekirdek içi izlemenin ölçülmesi: yüzde 6 bedelle 3 olgu geri geliyor, açık yüzey 13 oluyor ve ağ ad alanının tam kapattığı eksen yeniden açılarak açık eksen 7'den 8'e çıkıyor; olgu başına bedel 2,00 puanla dört kanalın en düşüğü.
İçindekiler
Önceki iki kanal aynı yönde çalıştı. Sistem çağrısı izlemesi yüzde 34 bedelle 2 olgu, örnekleme profili yüzde 3 bedelle 1 olgu geri getirdi; ikisi de açık eksen sayısını 7’de bıraktı. Açık eksenin sabit kalması küçük bir ayrıntı değildi: kanallar açık eksenleri kalınlaştırıyor, kapalı bir ekseni açmıyorlardı.
Bu ders o düzeni bozar. Olay tabanlı çekirdek içi izleme, sıkı demetin kapattığı 14 olgudan 3’ünü geri getirir ve bunlardan biri, ağ ad alanının tam kapattığı bir eksene aittir. Açık eksen 7’den 8’e çıkar. Bedel ise yüzde 6’dır — sistem çağrısı izlemesinin beşte birinden azı. Kursun bu konudaki en keskin cümlesi buradan çıkar: en çok geri getiren kanal en pahalı kanal değildir.
Olay Tabanlı Gözlem
Sistem çağrısı izlemesi her çağrıda denetimi izleyen tarafa geçirir; örnekleme profili düzenli aralıklarla anlık görüntü alır. Çekirdek içi izleme üçüncü bir yoldur: çekirdeğin içine izleme noktaları yerleştirilir, bir olay olduğunda küçük bir işleyici çalışır ve sonucu bir tampona yazar. Süreç durdurulmaz, örnek beklenmez; yalnız ilgilenilen olay kaydedilir.
Varsayımlar sürüyor. Kanalın gösterdiği beş olgu koddaki listedir (GZ14). Bedeller modeldeki yüzdelerdir, gerçek ölçüm değildir; taban koşum 1000 zaman birimidir (GZ15). İzleme çekirdek tarafında kurulur ve izlenen sürecin ad alanlarından bağımsız çalışır (GZ16); bu, kanalın izolasyonu delme gücünün kaynağıdır. Bir olay kaydedildiğinde ilgili olgu tam olarak görünür olur (GZ17). Kanal üç izleme noktasına ayrılır ve noktaların olgu kümeleri koddaki listelerdir (GZ18). Nokta bedelleri 2, 3 ve 1’dir ve toplamları kanal bedeline eşittir (GZ19). Noktalar birbirinden bağımsız açılıp kapatılabilir (GZ20). Tampon taşması ve olay düşmesi modelde yoktur (GZ21) — gerçek sistemde yüksek olay hızında kayıt eksilir ve bu, ölçünün dışında kalan bir sınırdır.
# ornek dokum , calistirilmis degildir $ cat /sys/kernel/tracing/available_events | wc -l <olay-sayisi> $ echo 1 > /sys/kernel/tracing/events/sched/sched_process_fork/enable $ cat /sys/kernel/tracing/trace_pipe <surec-adi>-<no> [<islemci>] <zaman>: sched_process_fork: ata=<no> cocuk=<no>
Blok çalıştırılmadı ve içindeki değerler kurgudur. Ölçülen şey satırların biçimi değil, satırlardan okunabilen olgulardır.
# M03/K05 ortak tanim -- yalniz bu dersin kullandigi parcalar. OLGULAR = [ ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"), ("ata-surec-zinciri", "surec"), ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"), ("paylasilan-gecici-dizin", "takma"), ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"), ("dinleyen-baglanti-noktalari", "ag"), ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"), ("makine-adi", "makine"), ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"), ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"), ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"), ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"), ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"), ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"), ] DUZENEK = { "surec-ad-alani": {"eksen": ["surec"], "acik_kalan": ["kendi-surec-numarasi"]}, "takma-ad-alani": {"eksen": ["takma"], "acik_kalan": ["kok-dosya-agaci"]}, "ag-ad-alani": {"eksen": ["ag"], "acik_kalan": []}, "kullanici-ad-alani": {"eksen": ["kullanici"], "acik_kalan": ["dosya-sahipligi"]}, "makine-ad-alani": {"eksen": ["makine"], "acik_kalan": []}, "denetim-grubu": {"eksen": ["kaynak"], "acik_kalan": ["islemci-sayisi"]}, "yetenek-kirpma": {"eksen": ["yetki"], "acik_kalan": ["dosya-yetkileri"]}, "zorunlu-etiket": {"eksen": ["etiket"], "acik_kalan": ["erisim-etiketi"]}, } SIKI_DEMET = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani", "makine-ad-alani", "denetim-grubu", "yetenek-kirpma", "kullanici-ad-alani", "zorunlu-etiket"] KANAL = { "sistem-cagrisi-izleme": ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi", "yetenek-kumesi", "saat"], "ornekleme-profili": ["islemci-payi", "islemci-sayisi", "sistem-yuku"], "cekirdek-ici-izleme": ["oteki-sureclerin-listesi", "ata-surec-zinciri", "dinleyen-baglanti-noktalari", "cekirdek-ayarlari", "sistem-yuku"], "cekirdek-dokumu": ["kullanilan-bellek", "yetenek-kumesi", "erisim-etiketi", "kullanici-kimlik-esleme"], } # GZ15: bedeller MODELDEKI yuzdelerdir , gercek olcum degildir KANAL_BEDELI = {"sistem-cagrisi-izleme": 34, "ornekleme-profili": 3, "cekirdek-ici-izleme": 6, "cekirdek-dokumu": 0} TABAN_SURE = 1000 # GZ18-GZ20: kanal uc izleme noktasina ayriliyor ; noktalarin bedeli 2+3+1 = 6 NOKTA = { "surec-olaylari": (["oteki-sureclerin-listesi", "ata-surec-zinciri"], 2), "ag-olaylari": (["dinleyen-baglanti-noktalari"], 3), "cekirdek-ayar-olaylari": (["cekirdek-ayarlari", "sistem-yuku"], 1), } def gorunen(duzenekler, olgular=OLGULAR): kapali = set() for d in duzenekler: v = DUZENEK[d] for e in v["eksen"]: kapali |= {o for o, x in olgular if x == e} kapali -= set(v["acik_kalan"]) return [o for o, _ in olgular if o not in kapali] def geri_gelen(duzenekler, kanal, olgular=OLGULAR): kapali = {o for o, _ in olgular} - set(gorunen(duzenekler, olgular)) return sorted(set(kanal) & kapali) def yuzey(duzenekler, kanal=(), olgular=OLGULAR): g = set(gorunen(duzenekler, olgular)) geri = set(geri_gelen(duzenekler, kanal, olgular)) return {"gorunen": len(g), "geri_gelen": len(geri), "acik_yuzey": len(g | geri), "acik_eksen": len({e for o, e in olgular if o in (g | geri)})} ICI = KANAL["cekirdek-ici-izleme"] g = set(gorunen(SIKI_DEMET)) ys = yuzey(SIKI_DEMET, ICI) print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}), "| siki demet: gorunen", len(g), "kapattigi", len(OLGULAR) - len(g), "acik eksen", yuzey(SIKI_DEMET)["acik_eksen"]) print() print("kanalin gosterdigi olgu eksen siki demette durumu") for o in ICI: print(f" {o:28s}{dict(OLGULAR)[o]:10s}" f"{'zaten goruluyor' if o in g else 'GERI GELIYOR'}") print() print("EKSEN TABLOSU (olgu | siki demette gorunen | kanal aciksa gorunen)") geri = set(geri_gelen(SIKI_DEMET, ICI)) for e in sorted({e for _, e in OLGULAR}): hepsi = [o for o, x in OLGULAR if x == e] a = len([o for o in hepsi if o in g]) b = len([o for o in hepsi if o in g | geri]) not_ = " <-- eksen yeniden acildi" if a == 0 < b else "" print(f" {e:10s} {len(hepsi):5d} {a:24d} {b:26d}{not_}") print() print("kanal geri acik yuzey acik eksen bedel olgu basina bedel") for k in KANAL: y = yuzey(SIKI_DEMET, KANAL[k]) b = KANAL_BEDELI[k] oran = f"{b / y['geri_gelen']:.2f}" if y["geri_gelen"] else "-" print(f" {k:22s} {y['geri_gelen']:4d} {y['acik_yuzey']:10d} {y['acik_eksen']:10d}" f" {b:5d} {oran:>17s}") print() print("IZLEME NOKTASI SUPURMESI (noktalar sirayla aciliyor)") print(" nokta yeni olgu toplam geri toplam bedel marjinal bedel") acik, top = [], 0 for ad, (olgular_, bedel) in NOKTA.items(): onceki = len(geri_gelen(SIKI_DEMET, acik)) acik = acik + olgular_ simdi = len(geri_gelen(SIKI_DEMET, acik)) top += bedel print(f" {ad:22s} {simdi - onceki:10d} {simdi:12d} {top:13d} {bedel:15d}") print(" toplam nokta bedeli:", top, "= kanal bedeli", KANAL_BEDELI["cekirdek-ici-izleme"], "| kosum", TABAN_SURE * (100 + top) // 100) print() print("OLGU KUMESI SUPURMESI -- cikarma") gd = [o for o, _ in OLGULAR if yuzey(SIKI_DEMET, ICI, [x for x in OLGULAR if x[0] != o])["geri_gelen"] < ys["geri_gelen"]] de = [o for o, _ in OLGULAR if yuzey(SIKI_DEMET, ICI, [x for x in OLGULAR if x[0] != o])["acik_yuzey"] != ys["acik_yuzey"]] ek = [o for o, _ in OLGULAR if yuzey(SIKI_DEMET, ICI, [x for x in OLGULAR if x[0] != o])["acik_eksen"] < ys["acik_eksen"]] print(" taban acik yuzey", ys["acik_yuzey"], "acik eksen", ys["acik_eksen"], "| degistiren", len(de), "| degistirmeyen", len(OLGULAR) - len(de)) print(" geri geleni dusuren:", ", ".join(gd)) print(" acik ekseni 8'den 7'ye dusuren olgu:", len(ek), "| bunlardan kanalin geri getirdigi:", [o for o in ek if o in geri_gelen(SIKI_DEMET, ICI)]) print() buyuten = [e for e in sorted({e for _, e in OLGULAR}) if yuzey(SIKI_DEMET, ICI, OLGULAR + [("yeni-olgu", e)])["acik_yuzey"] > ys["acik_yuzey"]] print("OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)") print(" yuzeyi buyuten eksen:", buyuten, "-> acik yuzey", ys["acik_yuzey"] + 1) print(" oteki", 9 - len(buyuten), "eksende acik yuzey", ys["acik_yuzey"], "olarak kaliyor")
olgu: 24 | eksen: 9 | siki demet: gorunen 10 kapattigi 14 acik eksen 7 kanalin gosterdigi olgu eksen siki demette durumu oteki-sureclerin-listesi surec GERI GELIYOR ata-surec-zinciri surec GERI GELIYOR dinleyen-baglanti-noktalari ag GERI GELIYOR cekirdek-ayarlari cekirdek zaten goruluyor sistem-yuku cekirdek zaten goruluyor EKSEN TABLOSU (olgu | siki demette gorunen | kanal aciksa gorunen) ag 3 0 1 <-- eksen yeniden acildi cekirdek 4 4 4 etiket 2 1 1 kaynak 4 1 1 kullanici 2 1 1 makine 1 0 0 surec 3 1 3 takma 3 1 1 yetki 2 1 1 kanal geri acik yuzey acik eksen bedel olgu basina bedel sistem-cagrisi-izleme 2 12 7 34 17.00 ornekleme-profili 1 11 7 3 3.00 cekirdek-ici-izleme 3 13 8 6 2.00 cekirdek-dokumu 3 13 7 0 0.00 IZLEME NOKTASI SUPURMESI (noktalar sirayla aciliyor) nokta yeni olgu toplam geri toplam bedel marjinal bedel surec-olaylari 2 2 2 2 ag-olaylari 1 3 5 3 cekirdek-ayar-olaylari 0 3 6 1 toplam nokta bedeli: 6 = kanal bedeli 6 | kosum 1060 OLGU KUMESI SUPURMESI -- cikarma taban acik yuzey 13 acik eksen 8 | degistiren 13 | degistirmeyen 11 geri geleni dusuren: oteki-sureclerin-listesi, ata-surec-zinciri, dinleyen-baglanti-noktalari acik ekseni 8'den 7'ye dusuren olgu: 6 | bunlardan kanalin geri getirdigi: ['dinleyen-baglanti-noktalari'] OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu) yuzeyi buyuten eksen: ['cekirdek'] -> acik yuzey 14 oteki 8 eksende acik yuzey 13 olarak kaliyor
Kâhin, Kanal, Geri Gelen Olgu
Üç sayı yan yana durur. Kâhin: sürecin 24 olgusu, dokuz eksende. Kanal: çekirdek içi izleme beş olgu gösteriyor. Geri gelen olgu ve açık yüzey: beşinden 3’ü sıkı demetin kapattığı olgulardır ve geri gelir; açık yüzey 10’dan 13’e, açık eksen 7’den 8’e çıkar.
Geri gelen üçlü oteki-sureclerin-listesi, ata-surec-zinciri ve
dinleyen-baglanti-noktalaridır. İlk ikisi süreç ad alanının kapattığı olgulardır: süreç
kendi ad alanında yalnız kendini görüyor olsa bile, çekirdek tarafında yerleştirilmiş bir
süreç olayı izleyicisi çatallama olaylarını ad alanı ayrımı gözetmeden görür. Üçüncüsü ağ
ad alanının kapattığı bir olgudur ve asıl kırılma oradadır.
Zaten görünen iki olgu — cekirdek-ayarlari ve sistem-yuku — çekirdek eksenindedir.
Önceki iki derste de aynı sonuç çıkmıştı: o ekseni kapatan hiçbir düzenek yok. Kanalın beş
olgusundan ikisi bu yüzden yeni bir şey açmaz.
Kapanmış Bir Eksen Yeniden Açılıyor
Eksen tablosu dört kanal içinde yalnız bu kanalda değişir. Ağ ekseninde üç olgu vardır ve
ağ ad alanı üçünü de kapatır; ortak tanımın birinci okumasında ağ ile makine ad alanı,
kendi eksenlerini tam kapatan tek ikili olarak geçiyordu. Çekirdek içi izleme bu tam
kapatmayı deler: dinleyen-baglanti-noktalari geri gelir ve ağ ekseninde görünen olgu
sayısı 0’dan 1’e çıkar.
Ayrım işletim açısından önemlidir. Bir eksenin kalınlaşması, o eksende zaten bir şey görünürken bir şey daha görünmesidir; ölçüyü büyütür ama izolasyon kararını değiştirmez. Bir eksenin yeniden açılması ise izolasyon kararının kendisini geçersizleştirir. Ağ ad alanı kurulurken verilen karar “bu süreç makinenin ağını görmeyecek” idi; kanal açıkken bu karar artık geçerli değildir. Sıkı demetin dokuz eksenden yedisinde bir şey açık bırakması bilinen bir sonuçtu; sekizinci eksenin gözlem yüzünden açılması ayrı bir sonuçtur.
Süreç ekseninde de bir kalınlaşma vardır: üç olgudan görünen sayısı 1’den 3’e çıkar, yani eksen tamamen görünür olur. Eksen zaten açık sayıldığı için tabloda bir artış görünmez; olgu tarafında ise kanalın en büyük katkısı buradadır.
En Çok Geri Getiren Kanal En Pahalı Kanal Değildir
Dört kanalın karşılaştırma tablosu kursun bu konudaki ana iddiasını tek bakışta verir. Sistem çağrısı izlemesi yüzde 34 bedelle 2 olgu, çekirdek içi izleme yüzde 6 bedelle 3 olgu getiriyor. Olgu başına bedel birincide 17,00, ikincide 2,00 yüzde puandır: çekirdek içi izleme, olgu başına sistem çağrısı izlemesinin 8,5’te biri kadar pahalıdır ve daha çok olgu getirir. Pahalılık ile delme gücü arasında bu modelde bir bağ yoktur.
Nedeni yapısaldır. Sistem çağrısı izlemesinin bedeli her çağrıda ödenir; ölçülen sürecin çağrı yoğunluğuyla büyür. Çekirdek içi izlemenin bedeli ise yalnız seçilen olaylarda ödenir; süreç ne kadar çalışırsa çalışsın, seçilmeyen olaylar için hiçbir şey ödenmez. Birincisi geniş ve körlemesine, ikincisi dar ve seçicidir. Seçicilik hem ucuzluğun hem de delme gücünün kaynağıdır: doğru olay seçildiğinde tek bir izleme noktası, bir ad alanının kapattığı olguyu doğrudan verir.
Tablonun dördüncü satırı da şimdiden görünüyor: çekirdek dökümü yüzde 0 bedelle 3 olgu getiriyor. Onun bedeli koşumda değil, başka bir yerdedir ve bu konunun son dersinde ölçülür.
İzleme Noktası Süpürmesi
Kanal üç noktaya ayrıldığında marjinal getiri açıkça görünür. Süreç olayları noktası 2 yeni olgu getirir ve 2 puana mal olur. Ağ olayları noktası 1 yeni olgu getirir ve 3 puana mal olur — en pahalı nokta, en az olgu getiren noktadır; ama getirdiği olgu tam da ekseni yeniden açan olgudur. Çekirdek ayar olayları noktası 0 yeni olgu getirir ve yine de 1 puan ödetir. Üç noktanın toplamı 6’dır ve kanal bedeline eşittir; koşum 1000’den 1060’a çıkar.
Üçüncü nokta işletim açısından en öğretici olanıdır. Açıktır, kayıt üretir, bedel ödetir ve izolasyon açısından hiçbir şey eklemez; gösterdiği iki olgu zaten görünüyordu. Bir gözlem kurulumunu denetlerken sorulacak soru “bu nokta ne gösteriyor” değil, “bu nokta neyi yeni gösteriyor” olmalıdır. Marjinal getirisi sıfır olan bir nokta yalnız bedel ödetir.
Olgu Kümesi Süpürmesi
Çıkarma süpürmesinde açık yüzeyi 24 olgunun 13’ü değiştiriyor, 11’i değiştirmiyor.
Geri gelen sayısını düşüren üç olgu, kanalın geri getirdiği üç olgunun kendisidir. Açık
ekseni 8’den 7’ye düşüren 6 olgu vardır; bunların yalnız biri —
dinleyen-baglanti-noktalari — kanalın geri getirdiği olgudur. Kalan beşi, kendi ekseninde
sıkı demet altında görünen tek olgu oldukları için çıkarıldıklarında o ekseni tamamen
kapatırlar.
Bu ikinci sonuç eksen ölçüsünün kırılganlığını gösterir. Bir eksenin “açık” sayılması tek
bir olguya bağlı olabilir; liste değişirse eksen sayısı değişir. Olgu sayısı ise daha
dayanıklıdır. Ekleme süpürmesi önceki iki dersle aynı yanıtı verir: dokuz eksenin yalnız
cekirdek ekseninde yeni bir olgu açık yüzeyi büyütür (13’ten 14’e), kalan sekiz eksende
yüzey 13 olarak kalır.
Yüzeyi Daraltmak
Sayılan yüzeyin yanında daraltma yolu yazılır. Birincisi izleme noktası yerleştirme yetkisidir: çekirdek içi izleme ayrı bir yetki gerektirir ve o yetenek kırpma listesine alınabilir; çekirdek ayarlarıyla ayrıcalıksız süreçler için izleme kapatılabilir. İkincisi nokta seçimidir — süpürmenin gösterdiği gibi, marjinal getirisi sıfır olan noktalar kapatılır; açık nokta sayısı azaldıkça hem bedel hem yüzey küçülür. Üçüncüsü olay süzgeçleridir: bir izleme noktası tek bir denetim grubuna ya da tek bir ad alanına daraltılabilir; makine geneli izleme, demet dışı bütün süreçlerin olaylarını da görünür kılar. Dördüncüsü kayıt tarafıdır; toplanan olay akışı süreç adlarını, ata zincirini ve bağlantı noktalarını taşır ve erişimi sınırlanmalıdır.
Bu ders bir gediği sayar, kullanımını anlatmaz. Kaçış, yetki yükseltme ve atlatma yordamları kursun hiçbir dersinde yazılmaz.
Özet
- Çekirdek içi izleme beş olgu gösteriyor; 3’ü geri geliyor ve açık yüzey 13 oluyor: dört kanalın en çok olgu getiren ikilisinden biri.
- Açık eksen 7’den 8’e çıkıyor; ağ ad alanının tam kapattığı eksen yeniden açılıyor ve bunu yapan tek kanal budur.
- Bedel yüzde 6 (taban 1000, koşum 1060) ve olgu başına 2,00 yüzde puan — sistem çağrısı izlemesinin 17,00 puanının 8,5’te biri. Yüzdeler modeldeki değerlerdir, gerçek ölçüm değildir.
- Üç izleme noktasının marjinal getirisi 2, 1 ve 0 olgu; bedelleri 2, 3 ve 1 puan. En pahalı nokta en az olgu getiriyor, üçüncü nokta hiçbir yeni olgu getirmeden bedel ödetiyor.
- Süpürme: açık ekseni düşüren 6 olgudan yalnız biri kanalın getirdiği olgudur; eklenen yeni olgu yüzeyi yine yalnız çekirdek ekseninde büyütüyor.
- Daraltma: izleme yeteneğinin kırpılması, marjinal getirisi sıfır noktaların kapatılması, olayların tek denetim grubuna daraltılması ve olay akışının erişim denetimi.
Sonraki Adım
Üç kanal da koşum sırasında çalıştı ve üçü de koşuma bir bedel ekledi. Sıradaki kanal koşuma hiç dokunmaz: çekirdek dökümü, süreç çöktükten sonra bakar ve koşum bedeli yüzde 0‘dır. Buna karşın geri getirdiği olgu sayısı **3’tür** ve getirdikleri arasında kullanıcı kimlik eşlemesi ile yetenek kümesi vardır. Bedeli sıfır olan bir kanalın yüzeyi neden en büyükler arasında olduğu, dökümün ne taşıdığıyla açıklanır — ve bu, kursun ve M03 müfredatının son dersidir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.