Adakah yang mengetahui benchmark / pengukuran throughput untuk menggunakan soket unix lokal untuk komunikasi antar-proses?
Saya ingin mengilustrasikan manfaat kinerja memiliki contoh basis data lokal pada server yang sama dengan perangkat lunak yang meminta data dari basis data vs. harus berkomunikasi melalui tautan jaringan, terutama yang seperti gigabit Ethernet yang saya harapkan agak lambat relatif berbicara.
Saat mencari online saya menemukan beberapa tolok ukur yang menunjukkan jumlah operasi per detik, tetapi tidak throughput per detik (yaitu 12GB / s).
Saya mengerti bahwa kinerjanya akan bervariasi karena hal-hal seperti mungkin throughput memori pada sistem yang diberikan atau karakteristik perangkat keras lainnya, tetapi hanya gagasan kasar yang diperlukan.
Ini tidak mengacu pada kinerja TCP lokal atau perbandingannya.
sumber
Jawaban:
Anda dapat menggunakan socat untuk tes kecepatan soket UNIX sederhana.
Di bawah ini adalah hasil yang saya dapatkan di laptop saya:
Memori ke disk (SSD), melalui soket UNIX
Memori ke memori, melalui soket UNIX
Memori ke / dev / null (buang), melalui soket UNIX
/ dev / zero to / dev / null, melalui socket UNIX
Seperti yang Anda lihat bahkan "memory to disk" throughput tes adalah 545MB / s (yaitu ~ 4360MiB / s), yang jauh di depan dari throughput teoritis maksimum untuk koneksi ethernet 1GB (yang ~ 1000/8 = 125MB / s, bahkan tidak mempertimbangkan overhead protokol).
PS
Harap dicatat bahwa ini hanyalah tes sederhana menggunakan beberapa alat sederhana, dan bukan tolok ukur yang nyata dan tepat .
sumber
Saya harus membantu orang memahami dampak tumpukan aplikasi multi-tier.
Untuk aspek komunikasi TCP saya menggunakan perbedaan dalam RTT (round-trip-time).
Untuk single-tier Anda dapat membandingkan alamat IP lokal (pada NIC) dengan lo0 (loopback).
Untuk multi-tier Anda membandingkan / menghitung alamat "lebih jauh", misalnya, multi-tier dapat berupa dua VM di host yang sama, atau bisa juga host yang berbeda di pusat data yang sama, atau bisa juga di pusat data yang berbeda (mungkin jaraknya hanya 500 meter, tapi masih beda).
FYI: untuk banyak aplikasi, perbedaan RTT dapat diabaikan, tetapi untuk aplikasi yang melakukan 10-100 dari ribuan pesan kecil untuk waktu aplikasi RTT dapat menjadi hambatan.
(Saya telah melihat situasi di mana "batch membutuhkan waktu hampir 6 jam lebih lama di multi-tier ketika RTT 0,25 milidetik lebih lama, dibandingkan dengan single-tier)
Jadi, test bed sederhana:
Itu
Dan program pemantauan saya adalah tcpdump - dengan opsi -ttt
Jadi, di dua jendela berbeda saya menjalankan tcpdump:
Untuk waktu "lokal": tcpdump -i lo0 -n -ttt port 80 Dan untuk "remote" tcpdump -I en1 -n -ttt port 80
Dalam data di bawah ini - tujuannya bukan untuk melakukan analisis apa pun, tetapi untuk menunjukkan bagaimana Anda dapat mengidentifikasi 'perbedaan' dalam waktu yang dibutuhkan untuk menyelesaikan transaksi. Ketika throughput aplikasi adalah transaksi serial - throughput per "detik | min | jam" dipengaruhi oleh total waktu yang diperlukan untuk "respons". Saya telah menemukan ini paling mudah untuk dijelaskan dengan menggunakan konsep RTT - round-trip-time.
Untuk analisis nyata ada hal-hal tambahan yang perlu dilihat. Jadi, satu-satunya baris yang akan saya perlihatkan adalah jabat tangan TCP awal, dan paket keluar pertama dan ACK yang kembali. Sebagai perbandingan, bandingkan waktu delta berapa lama sebelum "balasan" kembali.
127.0.0.1
192.168.129.63
perhatikan 01.XXXXXX - untuk satu detik tidur pada antarmuka "lo0"
192.168.129.72
mesin virtual di host yang sama - perhatikan waktu mulai pukul 00.000000 - paket pertama ditampilkan (dan 01.XXXXXX untuk dua alamat lainnya di bawah)
192.168.129.254
router saya - di luar tuan rumah, bukan mesin virtual.
192.168.129.71
koneksi yang sama dengan 192.168.129.72, tetapi ini 'sibuk' sementara '72' menganggur. Saya berharap bahwa jabat tangan awal hampir identik
banyak hop
ini adalah host yang sama, hasil apache yang sama, tetapi sekarang melalui antarmuka eksternal (6 IP hop, bukan langsung) - sekarang Anda dapat efek RTT jarak jauh. (ps, saya sedikit mengubah alamat IP). Lebih penting - perhatikan bahwa ada dua paket keluar setelah jabat tangan awal sebelum ACK pertama setelah jabat tangan kembali.
Jadi, daripada RTT 25 msec, pikirkan bahwa RTT adalah 250 mikrodetik, dibandingkan dengan 25 mikrodetik - dan Anda memiliki transaksi 500 ribu (yang hanya membutuhkan tambahan 120 hingga 125 detik dibandingkan dengan lokal, dan throughputnya adalah, imho, sebanding. Tetapi dengan 50 juta transaksi (seperti yang saya lakukan dalam situasi kehidupan nyata) Anda mendapatkan tambahan 12500 detik - yang menambahkan sekitar 3,5 jam tambahan untuk "secara harfiah" pekerjaan yang sama (dan bagian dari solusi untuk kasus ini adalah membuat paket lebih besar -. ukuran rata-rata awalnya 400-450 byte).
Hal lain yang saya "sukai" tentang penggunaan tcpdump adalah program yang tersedia secara umum. Tidak ada tambahan yang perlu diinstal.
sumber