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’si — oteki-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-takmalarveyetenek-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.