İçeriğe geç
academia.sh

Ders 06 / 09

Sistem Çağrısı İzleme

Gözlemin izolasyonu delmesinin ilk ölçüsü: sıkı demetin kapattığı 14 olgudan 2'si sistem çağrısı izlemesiyle geri geliyor, açık yüzey 10'dan 12'ye çıkıyor ve koşum yüzde 34 yavaşlıyor; kanalın gösterdiği beş olgunun üçü zaten görünürdü.

İçindekiler

İzolasyon konusu sekiz düzenekli sıkı bir demetle kapandı: bir sürecin 24 gözlenebilir olgusundan 14’ü kapanmış, 10’u görünür kalmıştı ve dokuz eksenin yedisinde hâlâ bir şey açıktı. Oradaki soru “ne kadarını kapattık” değil, “ne açık kaldı” idi. Bu konu aynı soruyu ters yönden sorar: kapatılan 14 olgunun kaçı, sistemi anlamak için kullandığımız araçlar yüzünden geri gelir.

Sorunun tersliği bir söz oyunu değildir. Gözlem araçları izolasyonu delmek için yazılmadı; bir sürecin ne yaptığını göstermek için yazıldı. Ne var ki bir sürecin ne yaptığını göstermek, tam olarak izolasyonun gizlemeye çalıştığı şeyi göstermek anlamına gelir. Kursun iki konusu bu yüzden birbirinin karşıtıdır ve bu ders karşıtlığın en pahalı örneğiyle açar: sistem çağrısı izlemesi.

Kanal ile Süzgecin Karşıtlığı

Ortak tanımın iki nesnesi vardır. İzolasyon düzeneği bir süzgeçtir: belirli bir ekseni kapatır ve o eksende genellikle bir olguyu açık bırakır. Gözlem kanalı bir kanaldır: kapatılan olguların bir kısmını geri getirir. Kâhin sürecin bütün olgularıdır; kurguyu biz yazdığımız için biliniyor. Ölçülen şey açık kalan yüzeydir — görünen olgularla geri gelen olguların birleşimi.

Bu dersin varsayımları şunlardır. Kanal, izolasyon kurulduktan sonra ve demetin dışından çalışır; izleyen taraf izlenen tarafın kısıtlarına bağlı değildir (GZ1). Kanal yalnız kendi listesindeki olguları gösterir, yeni olgu üretmez (GZ2). Bir olgu geri geldiğinde tam olarak geri gelir; kısmi görünürlük yoktur (GZ3). Sistem çağrısı izlemesinin gösterdiği beş olgu koddaki listedir (GZ4). Kanal bedelleri modeldeki yüzdelerdir, gerçek ölçüm değildir; taban koşum 1000 zaman birimidir (GZ5). Bedel koşum boyunca sabittir, izlenen çağrı sayısıyla değişmez (GZ6). İzleme, süreç çalışırken açıktır; koşum bittikten sonra bakan bir kanal değildir (GZ7).

Araç tarafında görülen şey, sürecin çekirdekten istediği hizmetlerin sırasıdır: hangi dosya açıldı, hangi meta veri okundu, hangi saat sorgulandı. Sistem çağrısının kendisi İşletim Sistemi Kavramları kursunda mekanizma olarak kurulmuştu ve burada tekrarlanmaz.

# ornek dokum , calistirilmis degildir
$ strace -f -e trace=file,clock -p <surec-no>
openat(AT_FDCWD, "/etc/<ayar-dosyasi>", O_RDONLY)       = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_uid=0}, 0)  = 0
openat(AT_FDCWD, "/proc/self/mountinfo", O_RDONLY)      = 4
clock_gettime(CLOCK_REALTIME, {tv_sec=<saniye>})        = 0

Bu döküm çalıştırılmadı ve içindeki değerler kurgudur. Ölçülen şey dökümün kendisi değil, dökümden hangi olgunun okunabildiğidir; onu aşağıdaki kod sayar.

# M03/K05 ortak tanim -- yalniz bu dersin kullandigi parcalar.
# Izolasyon bir suzgectir: eksen kapatir , her eksende bir sey acik birakir.
# Gozlem kanali bir kanaldir: kapatilan olgularin bir kismini GERI getirir.
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"]},
}
YAYGIN_DEMET = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani",
                "makine-ad-alani", "denetim-grubu", "yetenek-kirpma"]
SIKI_DEMET = YAYGIN_DEMET + ["kullanici-ad-alani", "zorunlu-etiket"]

# GZ4: sistem cagrisi izleme kanalinin gosterdigi olgular
IZLEME = ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi", "yetenek-kumesi", "saat"]
# GZ5: kanal bedelleri MODELDEKI yuzdelerdir , gercek olcum degildir
KANAL_BEDELI = {"sistem-cagrisi-izleme": 34, "ornekleme-profili": 3,
                "cekirdek-ici-izleme": 6, "cekirdek-dokumu": 0}
TABAN_SURE = 1000


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):
    g = set(gorunen(duzenekler, olgular))
    kapali = {o for o, _ in olgular} - g
    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)})}


print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
g = set(gorunen(SIKI_DEMET))
print("siki demet: duzenek", len(SIKI_DEMET), "| gorunen", len(g),
      "| kapattigi", len(OLGULAR) - len(g))
print()
print("kanalin gosterdigi olgu     eksen      siki demette durumu")
for o in IZLEME:
    e = dict(OLGULAR)[o]
    print(f"  {o:26s}{e:11s}{'zaten goruluyor' if o in g else 'GERI GELIYOR'}")
print()
print("demet          gorunen  geri gelen  acik yuzey  acik eksen")
for ad, d in (("yalin", []), ("yaygin", YAYGIN_DEMET), ("siki", SIKI_DEMET)):
    y = yuzey(d, IZLEME)
    print(f"  {ad:12s} {y['gorunen']:7d}  {y['geri_gelen']:10d}"
          f"  {y['acik_yuzey']:10d}  {y['acik_eksen']:10d}")
print()
yuz = KANAL_BEDELI["sistem-cagrisi-izleme"]
ys = yuzey(SIKI_DEMET, IZLEME)
print("bedel: taban", TABAN_SURE, "-> kosum", TABAN_SURE * (100 + yuz) // 100,
      "| yuzde", yuz)
print("geri gelen olgu basina bedel:", round(yuz / ys["geri_gelen"], 2), "yuzde puan")
print("kanal bedelleri (modeldeki yuzdeler , olcum degil):", KANAL_BEDELI)
print()
print("OLGU KUMESI SUPURMESI -- cikarma (siki demet + izleme kanali)")
geri_dusen, gorunen_dusen = [], []
for o, _ in OLGULAR:
    y = yuzey(SIKI_DEMET, IZLEME, [x for x in OLGULAR if x[0] != o])
    if y["geri_gelen"] < ys["geri_gelen"]:
        geri_dusen.append(o)
    elif y["gorunen"] < ys["gorunen"]:
        gorunen_dusen.append(o)
print("  taban acik yuzey", ys["acik_yuzey"],
      "| degistiren", len(geri_dusen) + len(gorunen_dusen),
      "| degistirmeyen", len(OLGULAR) - len(geri_dusen) - len(gorunen_dusen))
print("    geri geleni dusuren:", ", ".join(geri_dusen), "-> geri 1 , acik yuzey 11")
print("    goruneni dusuren   :", len(gorunen_dusen), "olgu -> gorunen 9 , acik yuzey 11")
print()
print("OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)")
for e in sorted({e for _, e in OLGULAR}):
    y = yuzey(SIKI_DEMET, IZLEME, OLGULAR + [("yeni-olgu", e)])
    print(f"  +{e:10s} olgu 25  gorunen {y['gorunen']:2d}  geri {y['geri_gelen']}"
          f"  acik yuzey {y['acik_yuzey']:2d}")
olgu: 24 | eksen: 9
siki demet: duzenek 8 | gorunen 10 | kapattigi 14

kanalin gosterdigi olgu     eksen      siki demette durumu
  kok-dosya-agaci           takma      zaten goruluyor
  oteki-takmalar            takma      GERI GELIYOR
  dosya-sahipligi           kullanici  zaten goruluyor
  yetenek-kumesi            yetki      GERI GELIYOR
  saat                      cekirdek   zaten goruluyor

demet          gorunen  geri gelen  acik yuzey  acik eksen
  yalin             24           0          24           9
  yaygin            12           2          14           7
  siki              10           2          12           7

bedel: taban 1000 -> kosum 1340 | yuzde 34
geri gelen olgu basina bedel: 17.0 yuzde puan
kanal bedelleri (modeldeki yuzdeler , olcum degil): {'sistem-cagrisi-izleme': 34, 'ornekleme-profili': 3, 'cekirdek-ici-izleme': 6, 'cekirdek-dokumu': 0}

OLGU KUMESI SUPURMESI -- cikarma (siki demet + izleme kanali)
  taban acik yuzey 12 | degistiren 12 | degistirmeyen 12
    geri geleni dusuren: oteki-takmalar, yetenek-kumesi -> geri 1 , acik yuzey 11
    goruneni dusuren   : 10 olgu -> gorunen 9 , acik yuzey 11

OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)
  +ag         olgu 25  gorunen 10  geri 2  acik yuzey 12
  +cekirdek   olgu 25  gorunen 11  geri 2  acik yuzey 13
  +etiket     olgu 25  gorunen 10  geri 2  acik yuzey 12
  +kaynak     olgu 25  gorunen 10  geri 2  acik yuzey 12
  +kullanici  olgu 25  gorunen 10  geri 2  acik yuzey 12
  +makine     olgu 25  gorunen 10  geri 2  acik yuzey 12
  +surec      olgu 25  gorunen 10  geri 2  acik yuzey 12
  +takma      olgu 25  gorunen 10  geri 2  acik yuzey 12
  +yetki      olgu 25  gorunen 10  geri 2  acik yuzey 12

Kâhin, Kanal, Geri Gelen Olgu

Üç sayı yan yana durur. Kâhin: sürecin 24 olgusu, dokuz eksende. Kanal: sistem çağrısı izlemesi beş olgu gösteriyor. Geri gelen olgu ve açık yüzey: bu beş olgunun 2’si sıkı demetin kapattığı olgulardır ve geri gelir; açık yüzey 10’dan 12’ye çıkar.

Geri gelen ikili oteki-takmalar ve yetenek-kumesidir. Birincisi takma ad alanının kapattığı bir olgudur: kök dosya ağacı değiştirilmiş olsa bile, sürecin hangi takma noktalarını okuduğu çağrı dizisinde görünür. İkincisi yetenek kırpmanın kapattığı olgudur: sürecin hangi yetkiyi kullanmaya çalıştığı, çağrının başarısız dönüşünde bile okunur. İkisi de düzeneklerin “kapattı” dediği olgulardır ve kanal ikisini de geri açar.

Açık eksen sayısı ise 7’de kalır. Bunun nedeni, geri gelen iki olgunun eksenlerinde zaten açık bir şey olmasıdır: takma ekseninde kok-dosya-agaci, yetenek ekseninde dosya-yetkileri sıkı demette de görünüyordu. Yani bu kanal yeni eksen açmıyor, açık eksenleri kalınlaştırıyor. Ayrım önemlidir: eksen bir izolasyon kararının konusudur, olgu ise o kararın kalitesinin ölçüsüdür.

Beş Olgu Gösteriliyor, İkisi Yeni

Kanalın gösterdiği beş olgunun üçükok-dosya-agaci, dosya-sahipligi, saat — sıkı demet altında zaten görünüyordu. İzleme bunları göstermekle yeni bir şey açmaz; yalnız var olan görünürlüğü tekrarlar.

Buradan çıkan okuma kursun ikinci iddiasının bu konudaki karşılığıdır: bir aracın çok şey göstermesi, çok şey geri getirmesi anlamına gelmez. Sistem çağrısı izlemesi dört kanalın en ayrıntılısıdır; her çağrıyı, argümanlarını ve dönüş değerini verir. Buna karşın geri getirdiği olgu sayısı 2’dir ve bu, dört kanalın içinde en yüksek sayı değildir. Aracın ürettiği satır sayısıyla izolasyona açtığı gedik arasında doğru orantı yoktur.

Demet tablosu aynı şeyi başka bir yönden söyler. İzolasyon yokken kanal 0 olgu geri getirir — geri getirecek kapalı olgu yoktur, 24 olgunun hepsi zaten görünür. Yaygın altı düzenekli demette geri gelen 2, sıkı sekiz düzenekli demette yine 2’dir. Eklenen iki düzenek bu kanalın gediğini hiç daraltmaz: kullanıcı ad alanı dosya-sahipligini açık bırakıyor, zorunlu etiket ise bu kanalın listesinde olmayan bir olguyu kapatıyor. Sıkılaşan izolasyon, kanalın açtığı yüzeyi kendiliğinden kapatmaz.

Bedel: Koşum Yüzde 34 Yavaşlıyor

Kanalın bedeli koşumu yavaşlatmasıdır. Modeldeki taban koşum 1000 zaman birimidir; izleme açıkken 1340 olur, yani yüzde 34. Bu sayı ve öteki üç kanalın sayıları modeldeki yüzdelerdir, gerçek ölçüm değildir; makineye, yüke ve izlenen çağrı türüne göre gerçek değer başka çıkar. Modelde durmalarının nedeni büyüklük sırasını sabit tutmaktır.

Bedelin kaynağı yapısaldır. İzleme, izlenen sürecin her sistem çağrısında denetimi izleyen tarafa geçirir; bir çağrı, birkaç bağlam değiştirmeye dönüşür. Bu yüzden bedel çağrı yoğunluğuyla artar: hesap ağırlıklı bir koşum az etkilenir, dosya ve ağ ağırlıklı bir koşum çok. Modelde bedel sabit alınmıştır (GZ6) ve gerçek sistemde bu varsayım kaba bir yaklaşıklıktır.

Geri gelen olgu başına bedel 17,0 yüzde puandır. Bu oran kursun geri kalanında karşılaştırma birimi olacak; şimdilik tek başına anlamı, izlemenin pahalı ve dar bir kanal olduğudur. Bedelin ikinci yüzü ölçünün dışında kalır: yavaşlayan bir süreç, zamana duyarlı davranışını değiştirir. Zaman aşımları farklı yerlerde dolar, yarış durumları başka sıraya girer. İzleme yalnız gözlemez, gözlediği şeyi değiştirir; aralıklı bir arıza izleme açıkken kaybolabilir.

Olgu Kümesi Süpürmesi

Bu kursta ikinci tohum yoktur; yerine olgu kümesi süpürülür. Çıkarma süpürmesinde 24 olgu tek tek listeden düşürülür. Sonuç: açık yüzeyi 12 olgu değiştiriyor, 12 olgu değiştirmiyor. Değiştirenlerin yalnız 2’sioteki-takmalar ve yetenek-kumesi — geri gelen sayısını düşürüyor; kalan 10’u zaten görünen olgulardır ve çıkarıldıklarında görüneni düşürürler. Değiştirmeyen 12 olgu, sıkı demetin kapattığı ve bu kanalın listesinde olmayan olgulardır.

Ekleme süpürmesi daha keskin bir şey söyler. Dokuz eksenin her birine birer yeni olgu eklendiğinde açık yüzey yalnız bir eksende büyür: cekirdek. Nedeni doğrudan düzenek tablosundadır — sekiz düzeneğin hiçbiri çekirdek eksenini kapatmıyor. Çekirdek sürümü, çekirdek ayarları, sistem yükü ve saat, sıkı demet altında bile olduğu gibi görünür. Modelde bu eksene eklenen her yeni olgu doğrudan açık yüzeye yazılır; öteki sekiz eksene eklenen olgular kapalı kalır.

Bu sonuç ölçünün kurguya bağlı yerini de gösterir. Açık yüzeyin büyüklüğü seçilen 24 olguya bağlıdır ve başka bir liste başka bir sayı verirdi. Açık yüzeyin duyarlılığı ise listeye değil, düzenek tablosuna bağlıdır: hangi eksenin kapatıcısı yoksa yüzey o eksende büyür.

Yüzeyi Daraltmak

Bu ders bir gedik sayıyor, o gediğin nasıl kullanılacağını değil. Kursun sınırı bağlayıcıdır: kaçış, yetki yükseltme ya da atlatma yordamı hiçbir derste yazılmaz. Sayılan her yüzeyin yanında daraltma yolu yazılır ve bu kanalın daraltma yolları dörttür.

Birincisi izleme yeteneğinin kendisidir. Bir süreci izlemek ayrı bir yetki gerektirir; yetenek kırpma listesine bu yetkinin eklenmesi, demet içinden başlatılan izlemeyi keser. İkincisi izleyicinin konumudur: izleyen taraf demetin dışındaysa (GZ1) sayılan gedik açıktır, izleyici de aynı demetin içine alınırsa kanal demetin kısıtlarına bağlanır. Üçüncüsü izleme çıktısının kendisidir; döküm bir dosyaya yazılıyorsa o dosya sürecin gördüğü her yolu ve yetki denemesini taşır ve erişimi sınırlanmalıdır. Dördüncüsü kapsamdır: izleme tanı süresince ve dar bir çağrı süzgeciyle açılır, sürekli açık bırakılmaz.

Dördü de bir şeyi ortaklaşa söyler. Kanal, izolasyonun bir kusuru değildir; ayrı bir erişim denetimi konusudur. İzolasyon kararı ile gözlem kararı aynı yerde verilmediğinde, ikinci karar birincisini sessizce geri alır. En az yetki ilkesinin kendisi Siber Güvenlik müfredatında kurulmuştu ve burada tekrarlanmaz; buradaki karşılığı tek cümledir: bir demeti izleyebilen taraf, o demetin kapattığı olguların bir kısmını görebilen taraftır ve bu görünürlük demetin yapılandırmasında değil, izleyicinin yetkisinde yazılıdır.

Özet

  • Sıkı demet 24 olgunun 14’ünü kapatıyor, 10’u görünür bırakıyor; sistem çağrısı izlemesi kapatılanların 2’sini geri getiriyor ve açık yüzey 12 oluyor.
  • Kanalın gösterdiği beş olgunun üçü zaten görünüyordu: çok gösteren araç çok geri getiren araç değildir.
  • Geri gelen ikili oteki-takmalar ve yetenek-kumesidir; açık eksen 7’de kalır, yani kanal yeni eksen açmaz, açık eksenleri kalınlaştırır.
  • Bedel yüzde 34 (taban 1000, koşum 1340) ve geri gelen olgu başına 17,0 yüzde puandır; bu yüzdeler modeldeki değerlerdir, gerçek ölçüm değildir.
  • Süpürme: açık yüzeyi 24 olgunun 12’si değiştiriyor; eklenen yeni olgu yüzeyi yalnız çekirdek ekseninde büyütüyor, çünkü o ekseni kapatan düzenek yok.
  • Daraltma: izleme yeteneğinin kırpılması, izleyicinin demet içine alınması, döküm dosyasının erişim denetimi ve dar kapsam.

Sonraki Adım

Bu kanal pahalıydı ve dardı. Sıradaki kanal tam tersi bir yerde durur: örnekleme tabanlı işlemci profili koşumu yüzde 3 yavaşlatır, yani izlemenin onda birinden azına mal olur. Sonraki ders bu ucuz kanalın kaç olgu geri getirdiğini sayar — sonuç 1’dir ve bu, denetim grubunun kapattığı bir olgudur. Ucuzluğun tek başına bir erdem olmadığı, örnek sayısını büyütmenin geri gelen olguyu hiç değiştirmediği tabloda görünecek.

İ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