Saya ingin memahami secara komprehensif biaya kinerja run-time dari wadah Docker. Saya telah menemukan referensi untuk jaringan secara anekdot menjadi ~ 100μs lebih lambat .
Saya juga menemukan referensi untuk biaya run-time menjadi "diabaikan" dan "mendekati nol" tetapi saya ingin tahu lebih tepat berapa biaya-biaya itu. Idealnya saya ingin tahu apa yang Docker abstraksi dengan biaya kinerja dan hal-hal yang diabstraksi tanpa biaya kinerja. Jaringan, CPU, memori, dll.
Selanjutnya, jika ada biaya abstraksi, apakah ada cara untuk menyiasati biaya abstraksi. Sebagai contoh, mungkin saya dapat memasang disk secara langsung vs. secara virtual di Docker.
performance
docker
Luke Hoersten
sumber
sumber
Jawaban:
Makalah penelitian IBM 2014 yang sangat baik " Perbandingan Kinerja yang Diperbarui dari Mesin Virtual dan Wadah Linux " oleh Felter et al. memberikan perbandingan antara wadah logam kosong, KVM, dan Docker. Hasil umum adalah: Docker hampir identik dengan kinerja asli dan lebih cepat dari KVM di setiap kategori.
Pengecualian untuk ini adalah Docker's NAT - jika Anda menggunakan pemetaan port (misalnya,
docker run -p 8080:8080
), maka Anda dapat mengharapkan hit kecil dalam latensi, seperti yang ditunjukkan di bawah ini. Namun, Anda sekarang dapat menggunakan tumpukan jaringan host (mis.,docker run --net=host
) Ketika meluncurkan wadah Docker, yang akan melakukan secara identik ke kolom Asli (seperti yang ditunjukkan dalam hasil latensi Redis bawah ke bawah).Mereka juga menjalankan tes latensi pada beberapa layanan tertentu, seperti Redis. Anda dapat melihat bahwa di atas 20 utas klien, overhead latensi tertinggi adalah Docker NAT, lalu KVM, lalu ikatan kasar antara host Docker / asli.
Hanya karena itu kertas yang sangat berguna, berikut adalah beberapa tokoh lainnya. Silakan unduh untuk akses penuh.
Melihat pada Disk I / O:
Sekarang melihat overhead CPU:
Sekarang beberapa contoh memori (baca kertas untuk detailnya, memori bisa sangat rumit):
sumber
--net=host
(dua tanda hubung) dan-p 8080:8080
(huruf kecil 'p') untuk NAT.Docker bukan virtualisasi, sebagai gantinya - itu adalah abstraksi di atas dukungan kernel untuk ruang proses proses yang berbeda, ruang nama perangkat, dll .; satu namespace pada dasarnya tidak lebih mahal atau tidak efisien daripada yang lain, jadi apa yang sebenarnya membuat Docker memiliki dampak kinerja adalah masalah apa yang sebenarnya ada di namespace tersebut.
Pilihan Docker dalam hal cara mengkonfigurasi ruang nama untuk wadahnya memiliki biaya, tetapi biaya itu semua terkait langsung dengan manfaat - Anda dapat menyerah, tetapi dengan melakukannya Anda juga melepaskan manfaat terkait:
Dan seterusnya. Seberapa besar biaya ini benar-benar memengaruhi Anda di lingkungan Anda - dengan pola akses jaringan Anda, kendala memori Anda, dll - adalah hal yang sulit untuk dijawab secara umum.
sumber
Berikut ini beberapa tolok ukur untuk
Docker based memcached server
dibandingkanhost native memcached server
dengan menggunakan alat benchmark Twemperf https://github.com/twitter/twemperf dengan 5000 koneksi dan 20k tingkat koneksiMenghubungkan waktu overhead untuk memcached berbasis buruh pelabuhan tampaknya setuju dengan whitepaper di atas pada kira-kira dua kali kecepatan asli.
Twemperf Docker Memcached
Twemperf Centmin Mod Memcached
Berikut patokan menggunakan alat benchmark memtier
memtier_benchmark docker Memcached
memtier_benchmark Centmin Mod Memcached
sumber
avg 200.5 min 0.6 max 263.2 stddev 73.85