İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat