deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Rust tabanlı container motoru boxr, container başlatma benchmarkında podman'ı %38 geride bıraktı

dev.to üzerinde paylaşılan bir benchmarkta, Rust ile yazılmış rootless motor boxr, önbelleğe alınmış bir Alpine container'ı medyan 134 ms'de başlatırken podman 217 ms'de kaldı; ancak podman rootful çalıştı ve ağ devre dışıydı.

Rust tabanlı container motoru boxr, container başlatma benchmarkında podman'ı %38 geride bıraktı

dev.to'da yayınlanan bir benchmark, Rust ile yazılmış genç bir rootless container motoru olan boxr'ı podman ile tek ve dar bir soruda karşılaştırıyor: bir container ne kadar hızlı başlatılabilir? Aynı sanal makinede boxr 0.1.44, minimal ve önceden önbelleğe alınmış bir Alpine container'ı medyan 134 ms'de ayağa kaldırırken, podman 4.9.3 medyan 217 ms sürdü — kabaca %38 daha yavaş. Yazar metodolojiyi alışılmadık ölçüde ayrıntılı biçimde belgeliyor ve okuyuculardan başlıktaki rakamı aktarmadan önce uyarıları dikkate almalarını defalarca rica ediyor.

Test nasıl yapıldı

İş yükü, anlamlı olan en basit container işlemiydi: önceden pull edilmiş bir imajdan bir container başlatmak, true çalıştırmak ve hemen çıkmak. Her iki motor da aynı imaj baytlarını — özdeş bir Alpine config digest'i — ve --network none seçeneğini kullandı. Zamanlama, tam CLI çağrısını çevreleyen duvar saati süresiydi; bu, CLI'nin kendi başlatılması dahil, kullanıcının fiilen hissettiği gecikmeyi ölçüyor. Motor başına beş soğuk çalıştırmanın ardından yazar her biri için 20 ılık çalıştırma yaptı ve her yinelemede motorları sırayla değiştirerek makine yükündeki kaymanın iki tarafa da eşit vurmasını sağladı. 50 çalıştırmanın tamamı başarılı oldu ve hiçbir aykırı değer ayıklanmadı.

Ilık çalıştırma rakamları (motor başına 20 çalıştırma): boxr medyan 134 ms, ortalama 150 ms, minimum 107 ms ve p95 207 ms; podman medyan 217 ms, ortalama 225 ms, minimum 181 ms ve p95 288 ms elde etti. Soğuk çalıştırmalar da aynı tabloyu çizdi: boxr için medyan 128 ms, podman için 212 ms.

Ortam, 7.7 GiB RAM'e sahip 2 vCPU'luk bir AMD EPYC VM'idir; Ubuntu 24.04.5, 7.0.0-38-generic çekirdeği üzerinde çalışıyor, podman'ın runtime'ı olarak crun 1.14.1 ve boxr tarafında sağlama doğrulanmış önceden derlenmiş bir boxr v0.1.44 ikili dosyası kullanılmıştır.

Rakamları şekillendiren uyarılar

d.to gönderisine göre bu, rootless'a karşı rootless bir karşılaştırma değildi. VM'nin kendi kullanıcı ad alanı (user namespace) kısıtlamaları ayrıcalıksız kullanıcı ad alanlarını kullanılamaz kıldığından, podman bir container kullanıcı ad alanı olmadan rootful çalışırken boxr kendi --rootless modunda çalıştı. Yazar, podman'ın boxr'ın gerçekleştirdiği kullanıcı ad alanı kurulumunu atladığı için bunun podman lehine olduğunu savunuyor.

Podman'ın varsayılan netavark kurulumu bu ortamda çalışamadığı için iki tarafta da ağ devre dışı bırakıldı; simetri için boxr da --network none aldı. Ayrı bir ölçüm, pasta ağını kuran boxr'ın varsayılan auto modunun kabaca 45 ms eklediğini gösterdi. Podman'ın da bazı geçici çözümlere ihtiyacı oldu: depolama graphroot'u, idmapped mount'larla native overlay kullanabilmesi için tmpfs'e yönlendirildi (bu muhtemelen zarar değil yarar sağladı) ve D-Bus bulunmadığı için cgroupfs yöneticisiyle çalıştı.

Test sırasında boxr'a özgü bir tuhaflık da ortaya çıktı: motor docker.io/ registry önekini normalize etmiyor, dolayısıyla imajı docker.io/library/alpine:latest şeklinde yazmak boxr'ın önbelleğini ıskalıyor ve her çalıştırmada yeniden pull ve yeniden extract tetikliyor; bu da yaklaşık 1.7 saniyelik bir ceza demek. Yazar bu sorunu bir geçici çözümle aştığını ve bakımcıya bir hata raporu açıldığını söylüyor.

Ayrıca iki dev.to gönderisinin de aynı yazar rumuzunu taşıdığı ve eşlik eden gönderinin yazarın boxr'ın ağ kodu üzerindeki çalışmasını anlattığı not edilmeli. Dolayısıyla benchmark bağımsız bir değerlendirme değil birinci taraftan; yine de yazar spekülasyonları spekülasyon olarak etiketliyor ve yaklaşık 80 ms'lik farkın muhtemelen mimariyi yansıttığını savunuyor — podman'ın Go CLI'sı, çağrı başına yapılandırma tesisatıyla conmon üzerinden crun'a uzanırken, boxr CLI'dan runtime'a daha kısa bir yola sahip tek bir Rust ikili dosyası.

Boxr gerçekte nedir

İkinci dev.to gönderisi boxr'ı Rust ile yazılmış rootless bir OCI motoru olarak tanımlıyor. Ağı several modu destekliyor: kurulu olduğunda pasta kullanan, aksi halde UserNet adlı gömülü yola düşen auto; açık UserNet; pasta; bridge; host; ve none. UserNet, container'ın ağ ad alanı içindeki bir TAP arayüzü üzerine kurulu, süreç içi bir Katman 2'den Katman 4'e veri yoludur; sanal bir ağ geçidi ve DNS çözümleyicisi için ARP işleyicisi, ICMP echo yanıtları, host UDP soketleri üzerinden bir DNS proxy'si ve el sıkışmaları ile sıra numaralarını izleyen bir TCP yolu içerir. Yazar, TCP uygulamasının henüz yeniden iletim, pencere ölçekleme, sıra dışı segmentler veya diğer üretim düzeyi davranışları ele almadığını ve boxr'ın bu nedenle beta olarak etiketlendiğini açıkça belirtiyor.

Neden önemli

Başlatma gecikmesi, kullanıcıların gün içinde fiilen hissettiği birkaç container motoru farkından biri: tek seferlik container'lar başlatan CI adımları, betiklerdeki --rm yardımcı container'ları, gün içinde onlarca kez container'ı yeniden başlatan yerel geliştirme döngüleri ve ölçek-sıfıra-inme desenleri. Uzun süre çalışan servisler içinse 80 ms bir gürültüdür. Benchmark, tek ikili dosyalık bir Rust tasarımının nerede kazanması gerektiğini — kısa ömürlü container'lar — ve nerede en az önem taşıdığını çerçeveliyor. Yazarın açık sorular listesi de adil: root olmayan bir kullanıcıyla çıplak metalde gerçek bir rootless podman koşusu, ilk bayta kadar sürelen gerçek bir iş yükü, soğuk sayfa önbellekleri ve Docker ile nerdctl karşılaştırmaları. Bunlar var olana kadar %38'lik rakam umut verici ama dar bir veri noktası; yazar, farklı sonuçlarla testi yeniden çalıştıran herkesi bunları projenin GitHub tartışmasına göndermeye davet ediyor.

  • #containers
  • #rust
  • #benchmark
  • #podman
  • #open-source

İlgili yazılar