Ders 07 / 16
Aygıt İzleme Protokolleri
Sorgu tabanlı izleme ile olay bildirimi aynı kırk aygıtı ayrı biçimlerde kaybeder: yedi yüz milisaniyelik bir tarama bütçesinde yoklama en iyi durumda 29 aygıt görür, dokuz olaylık bildirim eşiğinde 25 aygıt konuşur, ve iki modelin birlikte hiç görmediği aygıt sayısı 6'dır.
İçindekiler
Önceki ders telemetriyi kaydın kendisinden okudu: akış kayıtları ve sayaçlar aygıtta üretiliyor ve bir toplayıcıya gidiyordu. Kaydın kim tarafından başlatıldığı sorulmadı. Oysa toplama iki ayrı biçimde kurulabilir ve seçim tek başına bir kaldıraçtır.
Birinci biçimde yönetici sorar: aygıtları sırayla dolaşır, her birinden değerleri ister ve yanıtı yazar. İkinci biçimde aygıt bildirir: bir eşik aşıldığında ya da bir durum değiştiğinde yöneticiye kendiliğinden ileti gönderir. İki modelin tur maliyeti ve yakalama gecikmesi Uygulama Katmanı Protokolleri kursunda ölçüldü ve burada tekrarlanmayacak. Bu dersin sorusu başkadır: aynı kırk aygıtta, iki model kaç özneyi hiç raporlamıyor — ve raporlamadıkları özneler aynı özneler mi?
İki Modelin İleti Biçimi
Sorgu tabanlı izlemede aygıt bir nesne ağacı sunar. Her ölçülebilir değerin bir nesne kimliği vardır ve yönetici kimliği vererek değeri ister. Ağaç sıralıdır, bu yüzden yönetici bilmediği bir dalı da “bir sonrakini ver” diyerek gezebilir. Olay bildiriminde yön terstir: aygıt aynı nesne kimliğini ve değeri, sorulmadan gönderir. Bildirimin onaylanan ve onaylanmayan iki biçimi vardır; aradaki fark önceki kursta ölçüldü ve burada yalnız anılıyor. Üçüncü bir biçim abonelik kurar: yönetici bir yol ve bir aralık bildirir, aygıt o yolu düzenli olarak ya da her değişimde akıtır.
# ogretilen ileti bicimi , calistirilmamistir sorgu tabanli izleme yonetici -> aygit sorgu nesne kimligi 1.3.6.1.2.1.2.2.1.10.3 aygit -> yonetici yanit deger 918233100, tur sayac32 yonetici -> aygit sonraki agacta bir sonraki dal olay bildirimi aygit -> yonetici bildirim nesne kimligi, deger, zaman damgasi aygit -> yonetici onayli bildirim yonetici onaylar, gelmezse aygit yineler abonelik yonetici -> aygit abone ol yol /arayuzler/arayuz/sayaclar, aralik 10 s aygit -> yonetici akis her aralikta ya da her degisimde
Biçimin kendisi ölçüye girmez. Ölçüye giren şey, her modelin neyin raporlanacağına karar veren ayarıdır.
Yoklamanın Bütçesi
Yoklayan modelde yönetici listeyi baştan gezer ve her aygıtı sırayla sorar. Tarama bir dönem içinde bitmek zorundadır: bir sonraki dönem başladığında tarama yeniden baştan başlar. Bu tarama bir süre bütçesi demektir.
Bütçeyi harcayan iki şey vardır. Yanıt veren aygıt kendi gecikmesi kadar süre yer. Yanıt vermeyen aygıt ise zaman aşımı kadar süre yer — hem de hiçbir veri vermeden. Yöneticinin elindeki ayar bu zaman aşımı eşiğidir ve iki yöne birden çeker.
Eşik düşük tutulursa yavaş aygıt yanıt yetiştiremeden kesilir ve raporlanmaz; buna karşılık her kesme ucuzdur, tarama listenin sonuna varır. Eşik yükseltilirse yavaş aygıtlar da yanıt verebilir, ama her yanıt daha çok süre yer ve bütçe listenin sonuna varmadan tükenir. Bu durumda listenin kuyruğundaki aygıtlar hiç sorulmaz bile. İki neden ayrı ayrı sayılmalıdır: zaman aşımına uğrayan aygıt sorulmuş ama yanıtlamamıştır, hiç sorulmayan aygıt ise yöneticinin haberi bile olmadan dışarıda kalmıştır.
Bildirimin Eşiği
Bildiren modelde tarama yoktur, dolayısıyla süre bütçesi de yoktur. Onun yerine aygıtta bir bildirim eşiği durur: aygıt her olayı değil, ancak eşiği aşan bir etkinlik gördüğünde konuşur. Eşik olmasaydı yönetici pencereye düşen her olayı ayrı bir iletiyle alırdı ve bu, tarama bütçesinden çok daha büyük bir yük olurdu.
Eşiğin doğurduğu sessizlik iki anlama gelir ve ileti bunları ayırmaz. Bir aygıt susuyorsa ya gerçekten eşiği aşmamıştır ya da konuşamayacak durumdadır. Yoklamada sessizlik en azından sorulmuş bir sessizliktir; bildirimde sorulmamıştır bile.
Ölçümün varsayımları:
- GB7 — Kırk özne kursun sabit topluluğudur; her öznenin bir yanıt gecikmesi vardır ve bu gecikme sorgunun süre maliyetidir.
- GB8 — Tarama dönemi bütçesi 700 ms’dir. Kırk aygıtın gecikme toplamı bu bütçenin üstündedir, yani tarama en iyi durumda bile listenin tamamına yetişmez.
- GB9 — Tarama listeyi özne sırasına göre gezer ve her dönem baştan başlar; kuyruktaki aygıtlar sıraya hiç girmez. Sıra karıştırılırsa görünmeyen özneler değişir, sayıları değişmez.
- GB10 — Zaman aşımına uğrayan sorgu bütçeden zaman aşımı kadar süre yer ve hiçbir değer getirmez.
- GB11 — Bildirim eşiği pencerede üretilen olay sayısı üzerinden tanımlıdır: aygıt ancak eşik kadar ya da daha çok olay ürettiyse bildirim gönderir, ve gönderdiğinde olaylarının tamamını gönderir.
- GB12 — Raporlanan aygıtın ağır olaylarının tümü görünür; raporlanmayan aygıtın ağır olaylarının tümü kaçar. Kâhin kurgudur ve hangi olayın ağır olduğunu biz yazdığımız için bilinir.
- GB13 — İki modelin karşılaştırıldığı satırda yoklama için zaman aşımı 30 ms, bildirim için eşik 9 olay seçilmiştir; bu iki ayar birbirine yakın büyüklükte kör nokta üretir.
Ölçüm
"""Aygit izleme: sorgu tabanli izleme ile olay bildiriminin hic raporlamadigi ozne. Bolum 1 - yoklama: sure butcesi sabit, kaldirac zaman asimi esigi. Bolum 2 - bildirim: kaldirac bildirim esigi (pencerede en az kac olay). Bolum 3 - iki modelin hic gormedigi ozne kumelerinin kesisimi. """ TOHUM = 20260812 SURE_BUTCESI = 700 # ms, bir tarama donemi def uretec(tohum): d = tohum % 2147483646 + 1 def r(n): nonlocal d d = (d * 48271) % 2147483647 return d % n return r def ozneler(sayi=40, tohum=TOHUM): r, liste = uretec(tohum), [] for i in range(sayi): liste.append({"no": i + 1, "kapasite": 20 + r(81), "gecikme": 5 + r(45), "sinif": ("etkilesim", "toplu", "yedek")[r(3)], "ozel": r(9) == 0}) return liste def olaylar(oz, sayi=400, tohum=TOHUM + 3): r, liste = uretec(tohum), [] for i in range(sayi): o = oz[r(len(oz))] liste.append({"no": i + 1, "ozne": o["no"], "agir": r(25) == 0}) return liste def yoklama(oz, zamanasimi, butce=SURE_BUTCESI): """Tarayici listeyi bastan gezer; her sorgu aygitin gecikmesi kadar surer, yanitsiz aygit zaman asimi kadar sure yer. Butce bitince tarama durur.""" gecen = sorulan = 0 gorulen = set() for o in oz: maliyet = min(o["gecikme"], zamanasimi) if gecen + maliyet > butce: break gecen += maliyet sorulan += 1 if o["gecikme"] <= zamanasimi: gorulen.add(o["no"]) return sorulan, gecen, gorulen def bildiren(oz, ol, esik): """Aygit ancak penceredeki olay sayisi esigi asarsa bildirim gonderir.""" sayim = {o["no"]: 0 for o in oz} for x in ol: sayim[x["ozne"]] += 1 konusan = {n for n, c in sayim.items() if c >= esik} return sum(sayim[n] for n in konusan), konusan def kacan(ol, gorulen): return sum(1 for x in ol if x["agir"] and x["ozne"] not in gorulen) oz = ozneler() ol = olaylar(oz) print(f"özne {len(oz)} | olay {len(ol)} | ağır olay {sum(o['agir'] for o in ol)}" f" | gecikme {min(o['gecikme'] for o in oz)}–{max(o['gecikme'] for o in oz)} ms" f" | tam tarama süresi {sum(o['gecikme'] for o in oz)} ms") print() print(f"{'zaman aşımı':>12s} {'sorulan':>8s} {'harcanan ms':>12s} " f"{'yanıtlayan':>11s} {'zaman aşımı yiyen':>18s} {'hiç sorulmayan':>15s} " f"{'kaçan ağır':>11s}") yok_gorulen = {} for za in (10, 20, 30, 40, 50): s, g, gor = yoklama(oz, za) yok_gorulen[za] = gor print(f"{za:12d} {s:8d} {g:12d} {len(gor):11d} {s - len(gor):18d} " f"{len(oz) - s:15d} {kacan(ol, gor):11d}") print() print(f"{'bildirim eşiği':>15s} {'bildiren özne':>14s} {'iletiler':>9s} " f"{'hiç raporlanmayan':>18s} {'kaçan ağır':>11s}") bil_gorulen = {} for esik in (1, 6, 9, 12, 15): ileti, kon = bildiren(oz, ol, esik) bil_gorulen[esik] = kon print(f"{esik:15d} {len(kon):14d} {ileti:9d} {len(oz) - len(kon):18d} " f"{kacan(ol, kon):11d}") print() a, b = yok_gorulen[30], bil_gorulen[9] ya, yb = set(o["no"] for o in oz) - a, set(o["no"] for o in oz) - b print(f"yoklama (zaman aşımı 30) görmedi {len(ya)} | bildirim (eşik 9) görmedi {len(yb)}") print(f"ikisinin de görmediği {len(ya & yb)} | yalnız birinin gördüğü {len(ya ^ yb)}" f" | birlikte görülen {len(oz) - len(ya & yb)}") print(f"ikisi birlikte kaçan ağır olay {kacan(ol, a | b)}")
özne 40 | olay 400 | ağır olay 22 | gecikme 6–48 ms | tam tarama süresi 935 ms
zaman aşımı sorulan harcanan ms yanıtlayan zaman aşımı yiyen hiç sorulmayan kaçan ağır
10 40 385 10 30 0 18
20 40 634 18 22 0 9
30 36 698 24 12 4 8
40 29 664 26 3 11 5
50 29 678 29 0 11 4
bildirim eşiği bildiren özne iletiler hiç raporlanmayan kaçan ağır
1 40 400 0 0
6 37 385 3 1
9 25 301 15 3
12 13 184 27 15
15 5 83 35 16
yoklama (zaman aşımı 30) görmedi 16 | bildirim (eşik 9) görmedi 15
ikisinin de görmediği 6 | yalnız birinin gördüğü 19 | birlikte görülen 34
ikisi birlikte kaçan ağır olay 1
Yoklama Tablosunun Okunması
Kırk aygıtın gecikme toplamı 935 ms’dir ve bütçe 700 ms. Tarama, hiçbir zaman aşımı olmasa bile listenin tamamına yetişemez; bu, kaldıracın hareket alanının en baştan sınırlı olduğu anlamına gelir.
Zaman aşımı 10 ms iken tarama ucuzdur: kırk aygıtın kırkı da sorulur ve toplam 385 ms harcanır. Ama yanıtlayan yalnız 10 aygıttır — otuzu eşiğin altına sığamamıştır. Rapor kırk aygıtın dörtte birini gösterir ve 18 ağır olay kaçar.
Eşik 50 ms’ye çıkarıldığında zaman aşımı yiyen aygıt 0‘a iner; artık her sorulan aygıt yanıt verir. Karşılığında tarama 29 aygıtta durur ve 11 aygıt hiç sorulmaz. Yanıtlayan sayısı 10’dan 29’a çıkmıştır, ama kırka hiçbir zaman ulaşmaz.
Arada duran 30 ms satırı iki nedenin aynı anda çalıştığı yerdir: 12 aygıt zaman aşımına uğrar, 4 aygıt hiç sorulmaz, geriye 24 yanıtlayan kalır. Aynı raporda iki ayrı görünmezlik nedeni vardır ve gösterge tablosunda ikisi de aynı boşluk olarak durur.
Kaçan ağır olay sütunu bu eğilimi izler ama hiçbir satırda sıfıra inmez: 18, 9, 8, 5, 4. En cömert ayarda bile yirmi iki ağır olayın dördü hiçbir sorguya girmez.
Bildirim Tablosunun Okunması
Bildirim eşiği 1 olduğunda hiçbir aygıt susmaz: kırkı da konuşur, 0 aygıt görünmez kalır ve hiçbir ağır olay kaçmaz. Bedeli sütunda duruyor — 400 ileti. Yoklama en pahalı satırında kırk sorgu atıyordu; bildirim burada onun on katı ileti üretiyor. Bildirim yükü özne sayısına değil, olay sayısına bağlıdır ve bu, iki modelin en temel yapısal farkıdır.
Eşik 9’a çekildiğinde ileti 301’e iner ve 25 aygıt konuşur; 15 aygıt hiç raporlanmaz. Eşik 15’te yük 83 iletiye kadar düşer ama artık yalnız 5 aygıt konuşmaktadır ve 35 aygıt sessizdir. Yirmi iki ağır olayın 16’sı kaçar.
Dikkat çeken şey, eşiğin yükü doğrusaldan hızlı düşürmesidir: 400’den 83’e inerken görünen aygıt 40’tan 5’e iner. Eşik, çok olay üreten azınlığı tutar ve geri kalanı düşürür. Yoklamanın kaybettiği aygıt yavaş aygıttı; bildirimin kaybettiği aygıt sessiz aygıttır.
Kör Noktalar Aynı Değil
Son üç satır dersin asıl sonucudur. Yoklama zaman aşımı 30 ms ile 16 aygıtı, bildirim eşik 9 ile 15 aygıtı hiç raporlamıyor. Sayılar birbirine yakın; ama ikisinin de görmediği aygıt yalnız 6’dır. Yani otuz bir kör noktanın yirmi beşi tek bir modele özgüdür.
Bunun doğrudan bir işletme sonucu vardır. İki model birlikte çalıştırıldığında görülen aygıt sayısı 34’e çıkar ve ikisinin birlikte kaçırdığı ağır olay 22’den 1’e iner. Tek başına en iyi yoklama ayarı 4 ağır olay kaçırıyordu, en iyi bildirim ayarı ise kırk aygıtın tamamını konuşturmak pahasına çalışıyordu; ikisi üst üste konduğunda tek bir ağır olay dışında her şey görünür hâle gelir.
Bunun nedeni modellerin kalitesi değil, kör noktalarının bağımsız olmasıdır. Yoklama gecikmeye göre eler, bildirim etkinliğe göre eler; bir aygıtın hem yavaş hem sessiz olması ise ayrı bir tesadüftür ve kırk aygıtta yalnız altısında gerçekleşir. Kuyruk kalkmaz — altı aygıt hâlâ hiçbir raporda yoktur — ama kuyruğun kimden oluştuğu ölçülebilir hâle gelir.
Envanter ve Canlılık
Ölçümün kırk özneyi baştan bildiği bir yeri vardır ve bu, kurgunun operatöre verdiği bir kolaylıktır. Sahada iki modelin de bir envantere ihtiyacı vardır, ama ihtiyaçları farklı yöndedir.
Yoklama envanteri girdi olarak kullanır: listede olmayan aygıt hiç sorulmaz, dolayısıyla envanterdeki bir eksiklik doğrudan görünmez bir özneye dönüşür. Bunun bir iyi yanı vardır — liste bilindiği için kimin yanıt vermediği de bilinir. Yukarıdaki tabloda “zaman aşımı yiyen” sütunu tam olarak bu bilgidir ve bir sorunun adıdır.
Bildirim envanteri çıktı olarak üretir: yönetici, kendisine ileti gönderen aygıtları tanır. Envanterde olmayan bir aygıt konuşursa yönetici onu öğrenir; bu, yoklamanın yapamayacağı bir şeydir. Ama tersi de doğrudur: hiç konuşmayan aygıt envanterde hiç belirmez ve yokluğu bir sorun olarak görünmez. Önceki dersteki sıralama listesinde olduğu gibi, olmayan bir satır bilgi taşımaz.
Bu asimetriyi kapatan yaygın düzenek canlılık bildirimidir: aygıt, söyleyecek bir şeyi olmasa da düzenli aralıklarla kısa bir ileti gönderir. Yönetici artık sessizliği ölçebilir, çünkü sessizlik bir ileti eksikliği hâline gelmiştir. Maliyeti hesaplanabilir bir yüktür — kırk aygıt ve dakikada bir bildirim, bir saatte 2 400 ileti demektir ve bu yük olay sayısından bağımsızdır. Kazancı ise ölçüde doğrudan görünür: bildirim eşiği 15 iken 35 aygıt sessizdir; canlılık bildirimi eklendiğinde bu otuz beşin hepsi görünür hâle gelir, yalnız neyi yaptıkları değil, var oldukları bilgisiyle.
Özet
- Sorgu tabanlı izlemede yönetici sorar, olay bildiriminde aygıt konuşur; iki modelin tur maliyeti önceki kursta ölçüldü, burada ölçülen kaç öznenin hiç raporlanmadığıdır.
- Yoklamanın kaldıracı zaman aşımı eşiğidir ve iki yönden birden keser: eşik düşükken 30 aygıt zaman aşımına uğrar, eşik yüksekken 11 aygıt hiç sorulmaz; yanıtlayan sayısı 700 ms bütçede en çok 29’dur.
- Bildirimin kaldıracı eşiktir ve yükü olay sayısına bağlar: eşik 1’de 400 ileti ile 0 görünmeyen, eşik 15’te 83 ileti ile 35 görünmeyen aygıt.
- Yoklama yavaş aygıtı, bildirim sessiz aygıtı kaybeder; iki modelin kör noktaları bağımsız olduğu için 16 ve 15 kişilik iki kümenin kesişimi yalnız 6 aygıttır.
- İki model birlikte kullanıldığında görülen aygıt 34’e çıkar ve kaçan ağır olay 1’e iner; kuyruk kalkmaz, ama kimin kuyrukta olduğu artık bilinir.
Sonraki Adım
Bu iki model de aygıtın kendi anlattığına dayanıyordu: yanıtı da bildirimi de aygıt üretiyor ve içeriğine aygıt karar veriyordu. Bir aygıtın hiç raporlamadığı bir davranış varsa, onu aygıta sorarak öğrenmenin yolu yoktur. Sonraki ders bu yüzden kaynağı değiştirir ve paketin kendisine bakar: hattan geçen baytları süzen bir filtre kurulduğunda, filtrenin göremediği ne kadardır — dar bir filtre kaç akışı, geniş bir filtre kaç baytı kaçırır?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.