Tailscale bellek sınırını aşmak için Go bağlayıcısını optimize etti
Öne çıkanlar
- iOS ağ uzantıları için uygulanan 15 MB bellek sınırı Tailscale üzerinde sistem çökmelerine yol açtı.
- Go bağlayıcısındaki yeniden konumlandırma kayıtları ofsetlerle değiştirilerek yaklaşık 1 MB bellek kazanıldı.
- Optimizasyon çalışması darwin/arm64 ikili boyutlarını yüzde 5 küçülttü ve bağlama süresini yüzde 30 hızlandırdı.
- Çalışma tamamlandığında Apple, iOS 15 güncellemesiyle bellek sınırını 35 MB genişletti.
Tailscale mühendisleri, iOS platformunda Network Extension olarak çalışan VPN uygulamalarının karşılaştığı 15 MB boyutundaki katı bellek sınırını aşmak için Go bağlayıcısında kapsamlı bir optimizasyon çalışması yürüttü. Standart iOS uygulamaları yaklaşık 5 GB bellek kullanabilirken, arka planda çalışan ağ uzantıları çok düşük kotalarla sınırlandırılıyor. Temel operasyonların 10-12 MB tüketmesi sebebiyle kullanıcıların VPN bağlantılarının çökmesi ve UPnP ile http2 gibi özelliklerin eklenememesi üzerine mühendisler sistemik bir çözüm arayışına girdi.
Ekip, standart bellek tahsisi iyileştirmeleri ve Go çalışma zamanındaki ayarlamaların ardından iOS tarafındaki bellek muhasebesini inceledi. İşletim sisteminin konumdan bağımsız çalıştırılabilir dosyalar için bellek sayfalarını yeniden konumlandırma (relocation) işlemleri yüzünden kirli (dirty) olarak işaretlediği ve bu verilerin silinemediği belirlendi. Go'nun pclntab yapısındaki bu yeniden konumlandırma girdilerini dinamik ofset hesaplamalarına dönüştüren ekip, Go geliştiricileriyle iş birliği yaparak bağlayıcı üzerinde onlarca değişiklik gerçekleştirdi. Bu çalışma, darwin/arm64 ikili dosya boyutlarını yaklaşık yüzde 5 oranında küçülttü ve bağlayıcı süresini hızlandırdı.
Optimizasyon çalışmaları tamamlandığında ve Go 1.18 sürümüne dahil edilmek üzere hazırlanırken ekip ilginç bir durumla karşılaştı. Bağlayıcıdaki düzenlemeler sayesinde hedeflenen yaklaşık 1 MB düzeyindeki bellek tasarrufu sağlanırken, Apple'ın yayımladığı iOS 15 güncellemesi ağ uzantılarının bellek sınırını sessizce 35 MB daha artırdı. Böylece Tailscale'in kullanılabilir bellek alanı hedeflenen 1 MB yerine 36 MB genişledi.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.