İçeriğe geç
academia.sh

Ders 07 / 09

Başarım Profilleme

Dört kanalın en ucuzu ve en darı: örnekleme tabanlı işlemci profili sıkı demetin kapattığı 14 olgudan yalnız 1'ini geri getiriyor, açık yüzey 11 oluyor ve koşum yüzde 3 yavaşlıyor; örnek sayısı bin kat büyüdüğünde geri gelen olgu değişmiyor.

İçindekiler

Önceki ders pahalı bir kanal ölçtü: sistem çağrısı izlemesi sıkı demetin kapattığı 14 olgudan 2’sini geri getiriyor ve koşumu yüzde 34 yavaşlatıyordu. Geri gelen olgu başına bedel 17,0 yüzde puandı. Bu ders ölçeğin öbür ucundadır. Örnekleme tabanlı işlemci profili, modeldeki dört kanalın en ucuzudur: koşuma eklediği yavaşlık yüzde 3’tür.

Soru ucuzluğun neye mal olduğudur. Bir kanal koşuma dokunmadan bilgi veriyorsa, izolasyonu delme gücü de düşük olabilir; ya da tersine, ucuz bir kanal sürekli açık bırakılabildiği için asıl gediği o açabilir. Ölçü ikisinden hangisinin doğru olduğunu söyler: profil geri getirdiği olgu sayısında da en dardır — geri gelen 1 olgudur.

Profil Bir Kanal Olarak

Örnekleme profili, koşan süreci düzenli aralıklarla durdurup o anda hangi kodun çalıştığını kaydeder. Toplanan şey bir olay dizisi değil, bir dağılımdır: hangi işlev örneklerin ne kadarını topladı. Profilin nasıl okunacağı — hangi ölçütün seçileceği, örnekleme oranının hangi olayı kaçıracağı — Ön Yüz tarafında Frontend Kalitesi, işletim tarafında Gözlemlenebilirlik ve İşletim kursunda ölçüldü ve burada tekrarlanmaz. Bu derste profil bir başarım aracı olarak değil, bir izolasyon kanalı olarak ölçülür.

Varsayımlar sürüyor ve genişliyor. Profil kanalının gösterdiği üç olgu koddaki listedir (GZ8). Bedeller modeldeki yüzdelerdir, gerçek ölçüm değildir; taban koşum 1000 zaman birimidir (GZ9). Profil, koşum boyunca açıktır ve bedeli örnek sayısından bağımsız alınmıştır (GZ10) — gerçek bir sistemde örnek hızı yükseldikçe bedel de yükselir, modelde bu ayrım kapatılmıştır. Örnek sayısı kurgudur ve her örnek bir satır üretir (GZ11). Örnek sayısı bir olgunun kestirimini iyileştirir, olgunun görünürlüğünü değiştirmez (GZ12). Profil aracı demetin dışından, koşum sırasında çalışır (GZ13).

# ornek dokum , calistirilmis degildir
$ perf record -F <ornek-hizi> -g -p <surec-no> -- sleep <saniye>
[ perf record: <ornek-sayisi> ornek yazildi ]
$ perf report --stdio --sort symbol
# Overhead  Symbol
#  <yuzde>  [.] <islev-a>
#  <yuzde>  [.] <islev-b>
#  <yuzde>  [k] <cekirdek-islevi>

Dökümdeki değerler kurgudur ve blok çalıştırılmadı. Ölçülen şey dökümün satırları değil, dökümden 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"]},
}
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"]

KANAL = {  # GZ8: profil kanalinin gosterdigi olgular ; izleme kanali karsilastirma icin
    "ornekleme-profili":     ["islemci-payi", "islemci-sayisi", "sistem-yuku"],
    "sistem-cagrisi-izleme": ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi",
                              "yetenek-kumesi", "saat"],
}
# GZ9: bedeller MODELDEKI yuzdelerdir , gercek olcum degildir
KANAL_BEDELI = {"ornekleme-profili": 3, "sistem-cagrisi-izleme": 34}
TABAN_SURE = 1000
# GZ11-GZ13: ornek sayisi kurgudur ; her ornek bir satir uretir
ORNEK_SAYISI = [100, 1000, 10000, 100000]


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)})}


PROFIL = KANAL["ornekleme-profili"]
g = set(gorunen(SIKI_DEMET))
ys = yuzey(SIKI_DEMET, PROFIL)
print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}),
      "| siki demet: gorunen", len(g), "kapattigi", len(OLGULAR) - len(g))
print()
print("KAYNAK EKSENI (denetim grubunun ekseni)")
for o, e in OLGULAR:
    if e == "kaynak":
        durum = ("acik birakildi" if o in DUZENEK["denetim-grubu"]["acik_kalan"]
                 else "GERI GELIYOR" if o in PROFIL else "kapali")
        print(f"  {o:20s}{durum}")
print()
print("kanalin gosterdigi olgu   eksen     siki demette durumu")
for o in PROFIL:
    print(f"  {o:24s}{dict(OLGULAR)[o]:10s}"
          f"{'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, PROFIL)
    print(f"  {ad:12s} {y['gorunen']:7d}  {y['geri_gelen']:10d}"
          f"  {y['acik_yuzey']:10d}  {y['acik_eksen']:10d}")
print()
print("kanal                   geri  acik yuzey  bedel  kosum  olgu basina bedel")
for k in KANAL:
    y = yuzey(SIKI_DEMET, KANAL[k])
    b = KANAL_BEDELI[k]
    print(f"  {k:22s} {y['geri_gelen']:4d}  {y['acik_yuzey']:10d}  {b:5d}"
          f"  {TABAN_SURE * (100 + b) // 100:5d}  {b / y['geri_gelen']:17.2f}")
print()
print("ORNEK SAYISI SUPURMESI (geri gelen olgu ornek sayisina bagli degil)")
print("  ornek     satir  geri gelen olgu  olgu basina satir")
for n in ORNEK_SAYISI:
    print(f"  {n:6d}  {n:8d}  {ys['geri_gelen']:15d}  {n // ys['geri_gelen']:17d}")
print()
print("OLGU KUMESI SUPURMESI -- cikarma")
geri_dusen = [o for o, _ in OLGULAR
              if yuzey(SIKI_DEMET, PROFIL,
                       [x for x in OLGULAR if x[0] != o])["geri_gelen"] < ys["geri_gelen"]]
degisen = [o for o, _ in OLGULAR
           if yuzey(SIKI_DEMET, PROFIL,
                    [x for x in OLGULAR if x[0] != o])["acik_yuzey"] != ys["acik_yuzey"]]
print("  taban acik yuzey", ys["acik_yuzey"], "| degistiren", len(degisen),
      "| degistirmeyen", len(OLGULAR) - len(degisen))
print("  geri geleni sifirlayan tek olgu:", geri_dusen)
print()
print("OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)")
for e in sorted({e for _, e in OLGULAR}):
    y = yuzey(SIKI_DEMET, PROFIL, OLGULAR + [("yeni-olgu", e)])
    print(f"  +{e:10s} olgu 25  acik yuzey {y['acik_yuzey']:2d}", end="")
    print("   <-- buyuyor" if y["acik_yuzey"] > ys["acik_yuzey"] else "")
olgu: 24 | eksen: 9 | siki demet: gorunen 10 kapattigi 14

KAYNAK EKSENI (denetim grubunun ekseni)
  islemci-payi        GERI GELIYOR
  bellek-siniri       kapali
  kullanilan-bellek   kapali
  islemci-sayisi      acik birakildi

kanalin gosterdigi olgu   eksen     siki demette durumu
  islemci-payi            kaynak    GERI GELIYOR
  islemci-sayisi          kaynak    zaten goruluyor
  sistem-yuku             cekirdek  zaten goruluyor

demet          gorunen  geri gelen  acik yuzey  acik eksen
  yalin             24           0          24           9
  yaygin            12           1          13           7
  siki              10           1          11           7

kanal                   geri  acik yuzey  bedel  kosum  olgu basina bedel
  ornekleme-profili         1          11      3   1030               3.00
  sistem-cagrisi-izleme     2          12     34   1340              17.00

ORNEK SAYISI SUPURMESI (geri gelen olgu ornek sayisina bagli degil)
  ornek     satir  geri gelen olgu  olgu basina satir
     100       100                1                100
    1000      1000                1               1000
   10000     10000                1              10000
  100000    100000                1             100000

OLGU KUMESI SUPURMESI -- cikarma
  taban acik yuzey 11 | degistiren 11 | degistirmeyen 13
  geri geleni sifirlayan tek olgu: ['islemci-payi']

OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)
  +ag         olgu 25  acik yuzey 11
  +cekirdek   olgu 25  acik yuzey 12   <-- buyuyor
  +etiket     olgu 25  acik yuzey 11
  +kaynak     olgu 25  acik yuzey 11
  +kullanici  olgu 25  acik yuzey 11
  +makine     olgu 25  acik yuzey 11
  +surec      olgu 25  acik yuzey 11
  +takma      olgu 25  acik yuzey 11
  +yetki      olgu 25  acik yuzey 11

Kâhin, Kanal, Geri Gelen Olgu

Üç sayı yan yana durur. Kâhin: sürecin 24 olgusu, dokuz eksende. Kanal: örnekleme profili üç olgu gösteriyor. Geri gelen olgu ve açık yüzey: üçünden 1’i sıkı demetin kapattığı olgudur ve geri gelir; açık yüzey 10’dan 11’e çıkar, açık eksen 7’de kalır.

Geri gelen tek olgu islemci-payidır. Öteki iki olgu — islemci-sayisi ve sistem-yuku — sıkı demet altında zaten görünüyordu. Bu, dört kanalın en küçük açık yüzeyidir: 11. Aynı sayı sistem çağrısı izlemesinde 12, kalan iki kanalda 13’tür.

Zaten görünen iki olgunun neden görünür olduğu da ayrı ayrı okunur. islemci-sayisi denetim grubunun bilerek açık bıraktığı olgudur: bir süreç kaç işlemcinin bulunduğunu görmeye devam eder, yalnız payı sınırlanır. sistem-yuku ise çekirdek eksenindedir ve o ekseni kapatan hiçbir düzenek yoktur; önceki dersin ekleme süpürmesi bunu tek satırda göstermişti. Yani profilin gösterdiği üç olgudan ikisi, izolasyonun hiç dokunmadığı yerlerdedir; kanal orada bir gedik açmaz, yalnız var olan görünürlüğü okunur kılar.

Demet tablosu bir ayrıntı daha verir. Yaygın altı düzenekli demette de geri gelen 1’dir; sıkılaşan izolasyon bu kanalın gediğini daraltmaz. Nedeni tabloda görünüyor: gediği açan düzenek denetim grubudur ve o, yaygın demette de vardır. Kanalın deldiği şey, demete sonradan eklenen iki düzenek değil, demetin çekirdeğindeki bir düzenektir.

Denetim Grubunun Ekseni Kısmen Geri Açılıyor

Kaynak ekseninde dört olgu vardır. Denetim grubu bunların üçünü kapatır ve islemci-sayisinı açık bırakır; bu, denetim grupları dersinde ölçülmüştü ve burada tekrarlanmaz. Profil, kapatılan üçten birini — islemci-payinı — geri getirir. Sonuç: kaynak ekseninin dört olgusundan ikisi görünür olur. Denetim grubu tek başına yüzde 25’lik bir görünürlük bırakıyordu; profil açıkken bu yüzde 50’ye çıkar.

Bunun nedeni yapısaldır ve modeli aşar. Denetim grubu bir sürecin ne kadar kaynak alabileceğini sınırlar; profil ise sürecin ne kadar kaynak kullandığını sayar. İkisi aynı büyüklüğün iki yüzüdür. Sınırlamak için ölçmek gerekir, ölçmek de görünür kılar. Bir denetim grubunun kendi muhasebe sayaçları da aynı büyüklüğü tutar; profil bu bilgiyi sıfırdan üretmez, zaten tutulan bir bilgiyi süreç ayrımıyla okunabilir kılar.

Kalan iki olgu — bellek-siniri ve kullanilan-bellek — bu kanalda kapalı kalır. Profil işlemci eksenlidir; bellek tarafını başka bir kanal açacaktır ve o kanal bu konunun son dersinde ölçülür.

Dört kanal içinde profil, geri getirdiği olgu bir düzeneğin kendi muhasebesinde tutulan büyüklük olan tek kanaldır. Ötekiler bir olguyu, düzeneğin hiç kaydetmediği bir yerden okurlar. Bu fark daraltma tarafında karşılığını bulur: ölçmeyi bırakmadan görünürlüğü kapatmak burada güçtür, çünkü ölçüm izolasyonun kendi işleyişinin parçasıdır. Daraltma sorusu “ölçülsün mü” değil, “kim okuyabilsin” biçiminde sorulmak zorundadır.

Daha Çok Örnek, Aynı Olgu

Örnek sayısı süpürmesi kursun ikinci iddiasını bu kanalda öder. Örnek sayısı 100’den 100000’e, yani 1000 kat büyütüldüğünde satır sayısı da 1000 kat büyür; geri gelen olgu 1’de sabit kalır. Olgu başına satır 100’den 100000’e çıkar. Modelde bu ilişki tanımlıdır (GZ12) ama tanım keyfi değildir: bir olgunun görünürlüğü ikili bir niteliktir, örnek sayısı ise o olgunun kestiriminin duyarlılığını belirler.

Ayrım işletim tarafında da geçerlidir. Örnek hızını yükselten operatör daha ince bir dağılım elde eder — hangi işlevin payı yüzde 40 mı yüzde 42 mi olduğunu daha kesin söyler. Yükseltme ona yeni bir olgu vermez: hangi süreçlerin işlemciyi paylaştığı bilgisi ilk örnekle de, yüz bininci örnekle de aynı derecede açıktır. İzolasyon açısından bakan biri için bu kanalın riski örnek hızından bağımsızdır.

Bedel tarafı da aynı yerden okunur. Profilin bedeli yüzde 3’tür: taban koşum 1000 zaman birimiyken profil açıkken 1030 olur. Geri gelen olgu başına bedel 3,00 yüzde puandır; sistem çağrısı izlemesinin 17,00 puanıyla karşılaştırıldığında profil, olgu başına 5,67 kat ucuzdur. Bu ucuzluğun bir sonucu vardır: pahalı kanal tanı bitince kapatılır, ucuz kanal sürekli açık bırakılabilir. Süreklilik, tek bir olgunun görünürlüğünü kalıcı hâle getirir.

Olgu Kümesi Süpürmesi

Çıkarma süpürmesinde açık yüzeyi 24 olgunun 11’i değiştiriyor, 13’ü değiştirmiyor. Geri gelen sayısını düşüren tek olgu islemci-payidır; o çıkarıldığında kanal hiçbir olgu geri getirmez ve açık yüzey 10’a iner. Yani bu kanalın bütün gediği tek bir olguya yaslanmıştır. Bu, ölçünün kurguya bağlılığını dürüstçe gösterir: liste değişirse profilin gediği tamamen kapanabilir.

Ekleme süpürmesi önceki dersteki sonucu doğrular. Dokuz eksenin her birine bir olgu eklendiğinde açık yüzey yalnız cekirdek ekseninde büyür (11’den 12’ye). Sekiz düzeneğin hiçbiri o ekseni kapatmıyor; kaynak eksenine eklenen yeni bir olgu ise denetim grubu tarafından kapatıldığı için yüzeye yazılmaz. Bir eksenin kapatıcısı varsa, o eksende büyüyen olgu listesi yüzeyi büyütmez.

Yüzeyi Daraltmak

Bu kanalın gediği dardır ama daraltma yolları vardır ve sayılan yüzeyin yanında yazılmaları gerekir. Birincisi örnekleme yetkisidir: işlemci sayaçlarına erişim ayrı bir yetkiye bağlıdır ve o yetenek kırpma listesine alınabilir; çekirdek ayarlarıyla ayrıcalıksız süreçler için örnekleme kapatılabilir. İkincisi kapsamdır: profil bütün makineyi değil, tek bir süreci ya da tek bir denetim grubunu hedefleyecek biçimde açılır — makine geneli profil, demet dışı süreçlerin işlemci payını da görünür kılar. Üçüncüsü profil dosyasının kendisidir; toplanan dağılım işlev adlarını ve çağrı yığıtlarını taşır, dosya erişim denetimine bağlanır. Dördüncüsü süredir: tanı süresince açılır, sürekli açık bırakılmaz.

Bu ders bir gediği sayar, kullanımını anlatmaz. Kaçış, yetki yükseltme ve atlatma yordamları kursun hiçbir dersinde yazılmaz; ölçülen şey hangi olgunun görünür kaldığıdır.

Özet

  • Örnekleme profili üç olgu gösteriyor; sıkı demet altında yalnız 1’i geri geliyor (islemci-payi) ve açık yüzey 11 oluyor — dört kanalın en küçük yüzeyi.
  • Açık eksen 7’de kalıyor; profil yeni eksen açmıyor, kaynak eksenini kalınlaştırıyor: eksenin dört olgusundan görünür olanlar 1’den 2’ye çıkıyor.
  • Bedel yüzde 3 (taban 1000, koşum 1030) ve geri gelen olgu başına 3,00 yüzde puan; sistem çağrısı izlemesinin 17,00 puanına karşı olgu başına 5,67 kat ucuz. Yüzdeler modeldeki değerlerdir, gerçek ölçüm değildir.
  • Örnek sayısı 1000 kat büyüdüğünde satır sayısı 1000 kat büyüyor, geri gelen olgu 1’de kalıyor: örnek sayısı kestirimi iyileştirir, yüzeyi büyütmez.
  • Süpürme: kanalın bütün gediği tek olguya (islemci-payi) yaslanıyor; eklenen yeni olgu yüzeyi yine yalnız çekirdek ekseninde büyütüyor.
  • Daraltma: örnekleme yetkisinin kırpılması, profilin tek sürece ya da tek denetim grubuna daraltılması, profil dosyasının erişim denetimi ve sınırlı süre.

Sonraki Adım

İki kanal ölçüldü ve ikisi de aynı yönde çalıştı: açık eksen sayısını 7’de bıraktılar. Sıradaki kanal bunu bozar. Olay tabanlı çekirdek içi izleme yüzde 6 bedelle 3 olgu geri getirir ve bunlardan biri, ağ ad alanının tam kapattığı ekseni yeniden açar; açık eksen 7’den 8’e çıkar. Sonraki ders bu kanalı üç izleme noktasına ayırarak ölçer ve şu sonucu yazar: en çok geri getiren kanal en pahalı kanal değildir.

İ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