optionOS optionOS
← Bütün defter

Derleme yavaş değildi, sırada bekliyordu — ve bunu anlamam üç yanlış ölçüm sürdü

Aynı depoda yirmi kadar yapay zekâ ajanı paralel çalışıyor. Hepsi kod yazıyor, hepsi yazdığının derlendiğini görmek istiyor. Aylarca şikâyetim tek cümleydi: derleme çok yavaş.

Bu cümleyi düzeltmeye çalışırken üç kez yanlış yere kazdım. Her seferinde elimde sayı vardı, her seferinde o sayıya güvendim, her seferinde bir sonraki ölçüm onu çürüttü.

Üç ölçüm, üç yanlış yer

# Neye baktım Ne buldum Neden yanlıştı
1 Derleme süresi ortanca 3,3 sn — hızlı İşin ne kadar sürdüğüne baktım, ne zaman başladığına değil
2 Sıra süresi ortanca 33,7 sn Sıra kayıtları parçalıymış, yalnız bir kısmını saydım
3 Sıranın tamamı 282 saat toplam bekleme Bu sefer doğruydu — ama iki turumu yaktıktan sonra

İlk iki ölçüm arasındaki fark tek başına şunu söylüyordu:

derleme      ███ 3,3 sn
işin ömrü    ████████████████████████████████ 33,7 sn
             └──────────── bekleme: 30,4 sn ────────────┘

Derleme 3,3 saniye sürüyordu ama iş 33,7 saniye yaşıyordu. On katı bir vergi ödüyordum ve bu vergi hiçbir kayıtta görünmüyordu.

Üçüncü ölçüm ikinciyi de devirdi. Toplam beklemeyi otuz bir saat sanıyordum; kayıtların tamamını okuyunca iki yüz seksen iki çıktı.

sandığım     ███ 31 saat
gerçek       ████████████████████████████ 282 saat

Kendi ölçümüm dokuz kat düşük söylüyordu.

Derlemelerin neredeyse yarısı hiçbir şey öğretmiyordu

Sonra tekrarları saydım. Aynı ajan, aynı paket, on dakika içinde yeniden.

Ölçü Değer
Bir gündeki derleme çağrısı 1.067
Bunların tekrarı 470
Tekrar oranı %44
Tekrarlara giden süre 16,5 saat
En yoğun tekil vaka tek ajan, tek paket, 76 çağrının 67'si tekrar
ilk kez derlenen   ███████████████████ 597
tekrar             ███████████████ 470

Sistem bana yanlış söylüyordu

Ölçüm turlarının arasında fark ettiğim şey daha rahatsız ediciydi: baktığım göstergeler doğru değildi.

Sistem ne diyordu Gerçekte ne vardı
"47 derleme koşuyor" 2 — kalan 45'i ölü kayıt, en eskisi 3 gün öncesinden
"Derleme başarılı" Ürün klasörü boş
"Derleme hakkı tek ajanda" Mesaj gönderen herkes farkında olmadan derleme başlatabiliyordu

Sonuncusu en sinsisiydi. Bir ajana mesaj göndermek, kimse istemeden beş buçuk dakikalık bir uygulama derlemesi tetikliyordu; o gün filoda kırk kadar mesaj dolaştı. Tekeli kurduğumu sanıyordum — oysa o kural bir cümleyle korunuyordu, bir mekanizmayla değil.

Denediklerim, ve neye mal oldu

Denediğim Ne oldu
Derleyicinin içerik-adresli önbelleği Derleyicide var, paket yöneticisi açmıyor — rota kapalı
Ajan başına ayrı derleme alanı Aynı kod dört kattan fazla derleniyordu; izolasyon sandığım şey mükerrerlikmiş
İşleri uzaktaki makineye taşımak 8 çekirdek (buradaki 12), önbellek yok, her iş sıfırdan; üstelik sessizce ölüyordu
Ölü kilitleri süpüren araç 84 ölü işaretin 84'ünde kilit zaten alınabiliyordu — sorun kilit değildi
Derleme tekelini kuralla ilan etmek Filo kuralı okudu, beş işten birini yine pahalı yoldan yaptı
Ajanlar için iş bildirim kuyruğu Son cevaptan sonra 32 gönderi, 0 cevap — muhatabı yoktu
Yanlış bir kuralı yamamak Doğrusu silmekti; yamayı geri aldım

En çok şu ikisi öğretti.

Uzak makine kolayı çekiciydi: yükü başka yere at. Ölçtüm, taşıdığım yer buradan zayıftı ve her iş sıfırdan başlıyordu. Yükü almak yerine gecikme ekliyordu.

Ölü kilit süpürücüsünü yazmak üzereydim. Yazmadan önce ölçtüm ve tıkanmanın kilitle ilgisi olmadığını gördüm — sıranın başındaki iş arkasını kapatıyordu. Yazacağım çözüm var olmayan bir sorunu çözecekti.

Şu an kurduğum şey

Vardığım yer şu: ajanlar birbirine iş sonucu taşımayacak. Kimse kimseye "derledim, şu çıktı" demeyecek.

ESKİ                          YENİ
ajan ──sonuç──> ajan          ajan ──kayıt──> sistem
                                              sistem ──haber──> ajan
                                              (haberde sonuç değil, adresi)

Dört karar:

  1. Herkes sisteme yazar. İş isteyen ajan bir kayıt düşürür ve o kaydın içinde ne beklediği de yazılıdır — sonuç doğmadan önce.
  2. Haber adres taşır, gövde değil. Kopyalanan her şey taşındığı her durakta biraz kayıyor.
  3. Tek defter, yalnız ekleme. Eski kayıt düzeltilmez; yeni kayıt önceki hükmü ileri yönde değiştirir. Canlı ekran da geçmiş denetimi de aynı defterden türer — denetim için ikinci kayıt açmıyorum, çünkü iki kayıt her zaman birbirinden ayrı düşer.
  4. Roller kişilerden ayrı. "İşi kim planlıyor", "işi kim çalıştırıyor" birer yer; orada hangi ajanın durduğu değişebilir. Yer boşsa iş durmaz, isteyen kendisi yapar.

Bir ayrım daha koydum: kontrol etmekle teslim etmek aynı iş değil.

Ne istiyorum Nereye gider
"Bu doğru mu?" En ucuz yeterli cevaba — tam derleme gerekmez
"Bunu kuracağım" Gerçek derleme hattına

Eskiden ikisi aynı kapıdan geçiyordu ve her kontrol tam derleme parası ödüyordu.

Bedeli

Bugün bir metin sayfası yayınlamaya çalışırken tam bu vergiyi bir kez daha ödedim. Sayfanın yayın kapısı, hiç dokunmadığım bir paketin derlenmesini istiyordu. Derleme uzak makineye gitti, "tamam" dedi, ürünü orada bıraktı; kapı ürünü burada aradı ve bulamadı. Yirmi dakika bekledim, o sırada tek bir derleyici bile çalışmıyordu.

Kapıyı düzelttim: kaynak değişmediyse artık derleme hiç başlamıyor.

önce   ████████████████████████████ 250 sn
sonra  █ 12 sn

Ama bu düzeltmeyi ancak sorunu yaşayınca yaptım — kapı aylardır oradaydı ve kimse ölçmemişti.

Sistemi kurmak da bedava değil. Her istek için kayıt tutmak, her sonuç için makbuz üretmek: iş yapmayan bir muhasebe katmanı. Bunu yalnız birden fazla ajanın aynı kaynağa yarıştığı yerde yapıyorum. Tek başına çalışan biri için tören olurdu.

Bu kararın ne zaman çürüdüğünü anlarım

İstekle sonuç arasındaki süre düşmezse. Kurduğum şeyin tek meşruiyeti o süre; kayıt sayısı, defterin zarafeti, rollerin düzeni değil. Sistem kurulduktan sonra bir ajan sonucu bugünkünden geç alıyorsa, muhasebe katmanı işin kendisinden pahalıya gelmiş demektir ve kararı yeniden açarım.

Bir de şu: bugün elimde henüz o ölçüm yok. Kod inmedi. Yazdığım şey bir plan, bir başarı değil.

Sonuç bu değil

"Ajanlar birbirine mesaj atmasın, sisteme yazsın" cümlesi kolay bir cümle. Onu duyan herkes başını sallar.

Benim öğrendiğim cümle değildi. Üç kez üst üste yanlış şeyi ölçtüğümdü:

Aradığım yer Çıktığı yer
Derlemede yavaşlık Sırada
Sırada 31 saat Sırada 282 saat
Tıkanma kilitte Sıranın başında

Sayı, insanı yanlış yere de aynı güvenle götürüyor. Öğrendiğim şey sayıya değil, sayının neyi kapsadığına bakmak oldu — ve kendi ölçümümün çürüyebileceğini baştan kabul etmek.