İçeriğe geç
academia.sh

Ders 02 / 09

Denetim Grupları

Denetim grubu kaynak ekseninin dört olgusundan üçünü kapatıyor ve işlemci sayısını açık bırakıyor; altı düzenekli demette görünen olgu 15'ten 12'ye iniyor, açık eksen yine 7'de duruyor.

İçindekiler

Önceki ders beş ad alanının görünürlüğü daralttığını, tüketimi hiç sınırlamadığını yazdı. Kaynak ekseninin dört olgusu — işlemci payı, bellek sınırı, kullanılan bellek ve işlemci sayısı — beş ad alanı açıldıktan sonra da olduğu gibi duruyordu. Ad alanı bir görünürlük süzgecidir ve görünürlük tüketimi durdurmaz: kendi süreç tablosunu gören bir süreç, makinenin bütün işlemcisini yine de meşgul edebilir.

Bu ders o ekseni kapatan düzeneği ele alır ve Sistem Yönetimi kursunun bıraktığı borcun ikinci yarısını öder. Servis yöneticisi dersinde birim, yöneticinin defterindeki bir kayıttı ve kaynak muhasebesinin çekirdek tarafı açıkça bu kursa bırakılmıştı. Soru yine aynı: denetim grubu kaynak eksenini kapatıyor mu, yoksa geriye bir şey mi bırakıyor.

Ağaç, Denetleyici ve İki İş

Denetim grubu bir süreç öbeğidir ve öbekler bir ağaç oluşturur. Ağacın her düğümü bir dizindir; bir sürecin numarası bir düğümün üye dosyasına yazıldığında süreç o gruba geçer ve çocukları grubu devralır. Bir süreç aynı anda tek bir grupta bulunur; grup değiştirmek bir yazma işlemidir ve süreç çalışırken yapılabilir.

Ağacın üzerinde denetleyiciler çalışır: işlemci, bellek, girdi/çıktı, süreç sayısı gibi kaynak türlerinin her biri ayrı bir denetleyicidir. Bir denetleyici bir düğümde etkinleştirilir ve o düğümün altındaki bütün alt ağaç için geçerli olur. Üstteki bir düğümde etkin olmayan bir denetleyici altta da etkinleştirilemez; bu kural, ağacın bir bölümünü başka bir yöneticiye yetki devriyi güvenli kılan şeydir.

Her denetleyici iki ayrı iş yapar ve ikisi karıştırıldığında yanlış beklenti üretir. Sınırlandırma bir tavan ya da bir ağırlık koyar: tavan aşılamaz, ağırlık ise rekabet hâlinde payı belirler. Muhasebe ise hiçbir şeyi sınırlamaz, yalnız sayar — kullanılan bellek, harcanan işlemci zamanı, beklemede geçen süre. Bir grupta muhasebe açık olup hiçbir sınır konmamış olabilir; bu durumda grup bir ölçüm birimidir, bir kısıt değil.

Denetim grubu ağacındaki yol, sürecin kendisi tarafından okunabilir. Bu yolu gizleyen ayrı bir ad alanı türü vardır ve önceki derste adlandırılıp geçilmişti: denetim grubu ad alanı, sürecin gördüğü yolun kökünü kendi grubuna kaydırır. Yolun gizlenmesi sınırın gizlenmesi demek değildir; sınır dosyaları yine okunur.

# ornek dokum — calistirilmamistir; yollar ve degerler kurgudur
$ cat /sys/fs/cgroup/olcum.slice/cgroup.controllers
cpu io memory pids
$ cat /sys/fs/cgroup/olcum.slice/cpu.max
20000 100000
$ cat /sys/fs/cgroup/olcum.slice/memory.max
536870912
$ cat /sys/fs/cgroup/olcum.slice/memory.current
331350016
$ nproc
8

Dökümdeki ilk sayı çifti bir kotadır: yüz bin birimlik pencerede yirmi bin birim, yani 0,2 işlemci. Son satır ise makinenin işlemci sayısını veriyor. İki satır aynı makinede, aynı süreç için doğrudur ve birbirini yalanlamaz; yalnız aynı soruya iki ayrı yanıt verirler. Bu dersin ölçtüğü şey tam olarak bu iki satır arasındaki açıktır. Döküm çalıştırılmamıştır ve buradan hiçbir sayı iddiası çıkarılmaz.

Süreç Başına Kısıttan Farkı

Sistem Yönetimi kursunda süreç başına kaynak sınırları ölçüldü: yumuşak ve katı değerler, çatallanmada devralma ve çalışan bir sürecin sınırının kabuktan değiştirilememesi. O ders burada tekrarlanmaz, ama iki mekanizmanın farkı yazılmadan denetim grubu anlaşılmaz.

Süreç başına sınır tek bir sürecin tavanıdır. Aynı sınıra sahip yüz süreç, makineyi yüz kat tüketebilir; sınır hiçbirini aşmadan makine biter. Denetim grubu ise öbeğin toplamına bakar: gruptaki süreç sayısı ne olursa olsun toplam tüketim tavanla karşılaştırılır. İkinci fark zamandadır. Süreç başına sınır çatallanma anında donar ve sonradan dışarıdan değiştirilemez; denetim grubunun sınırı bir dosyaya yazılır ve süreç koşarken yürürlüğe girer. Üçüncü fark muhasebedir: süreç başına sınırın bir sayacı yoktur, aşıldığında bir arıza üretir; denetim grubu ise aşılmasa da sayar.

İki mekanizma birbirinin yerine geçmez, üst üste biner. Aynı süreç hem kendi tavanına hem de grubunun tavanına tabidir ve hangisine önce çarptığı ikisinin değerine bağlıdır. Tanıda bu üst üste binme bir tuzaktır: sürecin kendi sınır okuması grubun tavanını göstermez, grubun sayacı da tek bir sürecin kendi tavanını göstermez. İki okuma ayrı yerlerdedir ve biri ötekinin yerine geçmez.

  • IZ10 — Denetim grubu kaynak eksenini kapatan tek düzenektir; kaynak ekseninde 4 olgu vardır.
  • IZ11 — Denetim grubu kaynak ekseninin 3 olgusunu kapatır ve islemci-sayisi olgusunu açık bırakır.
  • IZ12 — Kapatmak, olgunun yok olması değil, sürecin gördüğü değerin makinenin değeri olmaktan çıkıp grubun değeri olması demektir.
  • IZ13 — Ölçüm süreç başına sınırları modellemez; Sistem Yönetimi kursunda ölçülen katman buraya taşınmaz.
"""Ortak tanimin bu derste kullanilan parcasi: 24 olgu , 9 eksen ve
kaynak eksenini kapatan denetim grubu. Olculen sey ACIK KALAN YUZEY."""

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"]},
}
BES = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani",
       "kullanici-ad-alani", "makine-ad-alani"]


def gorunen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


kaynak = [o for o, e in OLGULAR if e == "kaynak"]
acik = set(gorunen(["denetim-grubu"]))
print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
print("kaynak ekseninde", len(kaynak), "olgu")
print()
print("olgu                 denetim grubu")
for o in kaynak:
    print(f"  {o:20s} {'ACIK BIRAKIR' if o in acik else 'kapatir'}")
print()
g = gorunen(["denetim-grubu"])
print("denetim grubu tek basina: kapatti", len(OLGULAR) - len(g),
      "| acik kalan 1 | gorunen", len(g),
      "| acik eksen", len(acik_eksen(["denetim-grubu"])))
KAHIN  olgu: 24 | eksen: 9
kaynak ekseninde 4 olgu

olgu                 denetim grubu
  islemci-payi         kapatir
  bellek-siniri        kapatir
  kullanilan-bellek    kapatir
  islemci-sayisi       ACIK BIRAKIR

denetim grubu tek basina: kapatti 3 | acik kalan 1 | gorunen 21 | acik eksen 9

Üç sayı yan yana duruyor. Kâhin: 24 olgu, 9 eksen; kaynak ekseninde 4 olgu. İzolasyon: denetim grubu tek başına 3 olgu kapatıyor. Açık kalan yüzey: 21 olgu ve 9 eksen — tek düzenek hiçbir ekseni listeden düşürmüyor, çünkü kaynak ekseninde bir olgu ayakta kalıyor.

Açık Kalan Olgu: İşlemci Sayısı

Kapanan üç olgu grubun kendi ölçüleriyle yer değiştiriyor. Süreç işlemci payını sorduğunda grubun kotasını, bellek sınırını sorduğunda grubun tavanını, kullanılan belleği sorduğunda grubun sayacını görüyor. Dördüncüsünde bu ikame yok: makinenin işlemci sayısı olduğu gibi görünüyor. Kotası 0,2 işlemci olan bir süreç, sekiz işlemcili bir makinede sekiz yanıtını alır.

Bunun bedeli soyut değildir. Çalışma zamanlarının çoğu, iş parçacığı havuzunu, koşut çalışan işçi sayısını, çöp toplayıcı iş parçacığı sayısını ve bağlantı havuzu boyunu başlangıçta bir kez, makinenin işlemci sayısına bakarak seçer. Kotanın kırk katı büyüklükte bir havuz açan süreç daha hızlı çalışmaz; çizelgeleyici ona yine 0,2 işlemcilik pay verir ve fazladan iş parçacıkları bekleme, bağlam değiştirme ve bellek olarak ödenir. Arıza da sessizdir: hiçbir sınır aşılmaz, hiçbir hata iletisi çıkmaz, yalnız gecikme büyür.

Daraltma yolu üç adımdır ve üçü de bu dersteki tabloya doğrudan karşılık gelir. Birincisi, boyutlandırma kararının kaynağını değiştirmektir: makinenin işlemci sayısı yerine grubun kotası okunur; kota dosyası zaten sürecin görebildiği bir yerdedir. İkincisi, kotayı sürece açık bir değer olarak geçirmektir — çalışma zamanı bir ayar okuyabiliyorsa, koşut çalışan işçi sayısı yapılandırmadan verilir ve tahmine bırakılmaz. Üçüncüsü, kotayla birlikte bir de işlemci kümesi kısıtı koymaktır: sürecin koşabileceği işlemciler daraltıldığında görünen sayı da daralır ve iki yanıt birbirine yaklaşır. Üçü de olguyu tümüyle kapatmaz; açık yüzeyi bir olgudan bir yanlış hesaba indirmeyi bırakır.

Sınırı Kim Yazar

Denetim grubu dosyalarına elle yazmak nadiren doğru yoldur, çünkü ağacı yöneten başka bir taraf vardır. Servis yöneticisi her birim için bir düğüm açar, birimleri dilimlere toplar ve birim dosyasındaki kaynak ayarlarını bu düğümlerin dosyalarına çevirir. Elle yazılan bir değer, yönetici ağacı yeniden kurduğunda kaybolur; kalıcı olan yer birim tanımıdır.

# ornek birim dosyasi parcasi — calistirilmamistir
[Service]
CPUQuota=20%
AllowedCPUs=2-3
MemoryMax=512M
MemoryAccounting=yes
TasksMax=64

Parçadaki ilk iki satır bu dersin ölçtüğü açığa doğrudan dokunur: birincisi kotayı yazar, ikincisi sürecin koşabileceği işlemcileri daraltır. Dördüncü satır ise yalnız muhasebeyi açar ve hiçbir şeyi sınırlamaz. Ayarların adları ve yazımı servis yöneticisine göre değişir; burada gösterilen biçim değil, ayrımdır: sınır koyan satır ile yalnız sayan satır ayrı satırlardır.

Ağacın bir dalı başka bir yöneticiye devredilebilir. Devretme, o dalın altındaki düğümleri açma ve süreç taşıma yetkisini vermek demektir; devralan taraf kendi alt ağacını istediği gibi böler ama üstteki tavanın üzerine çıkamaz. Bir konteyner çalışma zamanının çalışma biçimi tam budur ve beşinci derste ölçülür. Devretmenin sınırı da yazılmalıdır: devredilen dalda açılan düğüm sayısı ve o düğümlere taşınan süreç sayısı üstten sınırlanmazsa, tavan tutulurken ağaç büyümeye devam eder.

Muhasebenin kendisi bu kursun ikinci konusuna bakan bir yüzdür. Denetim grubu kapattığı üç olgunun yerine grubun kendi ölçülerini koyar ve bu ölçüler okunabilir dosyalardır: grubun harcadığı işlemci zamanı, o an tuttuğu bellek, tavana kaç kez dayandığı. Bu, izolasyonun bir kusuru değil, işletmenin gereğidir — sınırın tutup tutmadığı ancak sayılarak bilinir. Ama aynı sayılar içerideki süreç tarafından da okunur ve grubun yükü hakkında bilgi taşır. Kursun ikinci konusu bu türden okuma yollarını gözlem kanalı olarak ele alır ve her birinin izolasyonu ne kadar deldiğini sayar.

Bellek tavanına dayanıldığında verilen karar da grubun içinde kalır: çekirdek, tavanı aşan grubun kendi süreçlerinden birini seçer. Sistem Yönetimi kursunda ölçülen makine geneli bellek tükenmesinden farkı budur ve tanıda önemlidir — grubun içindeki bir ölüm, makinenin belleğinin tükendiği anlamına gelmez. Grup sınırlarının toplamı makinenin belleğinden büyük konabildiği için iki durum aynı makinede ayrı ayrı görülebilir.

Büyüyen Demet ve Olgu Kümesi Süpürmesi

Kurs boyunca aynı süreç üzerinde düzenek eklenir ve yüzeyin nasıl daraldığı sayılır. Önceki ders beş ad alanıyla bitmişti; bu ders altıncı düzeneği ekler. Süpürme yine olgu kümesi üzerinde yapılır, çünkü modelde rastgelelik ve ikinci tohum yoktur.

  • IZ14 — Eklenen olgu girdi-cikti-payi, kaynak eksenine aittir ve denetim grubunun açık bıraktıklarında değildir.
  • IZ15 — Çıkarılan islemci-sayisi, kaynak ekseninin açık kalan tek olgusudur.
  • IZ16 — Demet sırası bağlayıcıdır: beş ad alanı, sonra denetim grubu.
# --- Onceki blogun uzerine kurulur: OLGULAR, DUZENEK, BES, gorunen, acik_eksen.
DEMET = BES + ["denetim-grubu"]
print("kurs boyunca buyuyen demet")
print("asama                      duzenek  gorunen  acik eksen")
for ad, d in (("bes ad alani", BES), ("+denetim grubu", DEMET)):
    print(f"  {ad:24s} {len(d):7d}  {len(gorunen(d)):7d}  {len(acik_eksen(d)):10d}")
print()
EK = OLGULAR + [("girdi-cikti-payi", "kaynak")]
EKSIK = [(o, e) for o, e in OLGULAR if o != "islemci-sayisi"]
print("olgu kumesi supurmesi (alti duzenek uygulanmis halde)")
print("kume                       olgu  eksen  gorunen  acik eksen  kaynak acik")
for ad, kume in (("temel", OLGULAR), ("+girdi-cikti-payi", EK),
                 ("-islemci-sayisi", EKSIK)):
    g = gorunen(DEMET, kume)
    e = acik_eksen(DEMET, kume)
    ka = sum(1 for o, ek in kume if ek == "kaynak" and o in set(g))
    print(f"  {ad:24s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(g):7d}  {len(e):10d}  {ka:11d}")
kurs boyunca buyuyen demet
asama                      duzenek  gorunen  acik eksen
  bes ad alani                   5       15           7
  +denetim grubu                 6       12           7

olgu kumesi supurmesi (alti duzenek uygulanmis halde)
kume                       olgu  eksen  gorunen  acik eksen  kaynak acik
  temel                      24      9       12           7            1
  +girdi-cikti-payi          25      9       12           7            1
  -islemci-sayisi            23      9       11           6            0

Birinci tablo kursun ikinci iddiasının ilk ödemesidir. Altıncı düzenek görünen olguyu 15’ten 12’ye indiriyor — üç olguluk bir kazanç — ama açık eksen 7’de kalıyor. Kaynak ekseni kapanmadı, yalnız inceldi. Düzenek eklemek olguyu azaltıyor, ekseni azaltmıyor.

Süpürme aynı örüntüyü doğruluyor. Kaynak eksenine yirmi beşinci olgu eklendiğinde denetim grubu onu da kapatıyor ve açık yüzey 12’de kalıyor: kapalı bir eksene olgu eklemek yüzeyi büyütmüyor. Buna karşılık açık kalan tek olgu listeden çıkarıldığında eksen tamamen kapanıyor, görünen olgu 11’e, açık eksen 6’ya iniyor. Ölçünün duyarlı olduğu yer yine aynı: açık yüzeyi belirleyen şey eksendeki olgu sayısı değil, hangi olgunun açık kaldığıdır.

Modeldeki bütün sayılar kurgu üzerinden tam sayımdır; bir makinede yapılmış ölçüm değildir. Kaynak ekseninin gerçek bir sistemde kaç olgu taşıdığı, hangi denetleyicilerin etkin olduğuna ve süreç dosya sisteminin nasıl takıldığına göre değişir.

Özet

  • Denetim grubu bir süreç öbeğidir; öbekler ağaç oluşturur, üzerlerinde denetleyiciler çalışır ve her denetleyici iki ayrı iş yapar: sınırlandırma ve muhasebe.
  • Süreç başına kaynak sınırından üç noktada ayrılır: öbeğin toplamına bakar, süreç koşarken değiştirilebilir ve aşılmasa da sayar.
  • Kaynak ekseninde 4 olgu vardır; denetim grubu 3’ünü kapatır, islemci-sayisi olgusunu açık bırakır ve tek başına 24 olgudan 21’ini görünür bırakır.
  • Açık kalan olgu somut bir yanlış hesap üretir: kotası bir işlemcinin beşte biri olan süreç makinenin işlemci sayısını görür ve havuzlarını ona göre boyutlandırır. Daraltma yolu kotayı okumak, koşut işçi sayısını yapılandırmadan vermek ve işlemci kümesini daraltmaktır.
  • Altı düzenekli demette görünen olgu 15’ten 12’ye iner, açık eksen 7’de durur; süpürmede açık kalan tek olgu çıkarıldığında eksen kapanır ve yüzey 11’e düşer.

Sonraki Adım

Kaynak ekseni inceldi, ama sürecin ne yapabileceği hâlâ ölçülmedi. Görünürlüğü daraltmak ve tüketimi sınırlamak, bir sürecin çekirdekten hangi ayrıcalıklı işlemi isteyebileceğini belirlemez: aynı grup içindeki bir süreç ağ yapılandırmasını değiştirmeye, takma noktası açmaya ya da başka bir kullanıcının dosyasına dokunmaya kalkışabilir. Sonraki ders süper kullanıcı yetkisinin ayrı ayrı verilebilen parçalara bölünmesini ele alır, yetenek kümelerini ve kırpmayı ölçer ve yetenek ekseninin iki olgusundan yalnız birinin kapandığını sayar. Açık kalan olgu dosya yetkileridir ve nedeni beklenmediktir: süreçten kırpılan yetenek, dosyanın üzerinde yazılı olanı değiştirmez.

İ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