Ada server untuk pengukuran yang berjalan di Ubuntu di lab saya. Dan ada program C, yang menerima data melalui koneksi TCP dan harus secepatnya mengirim balasan.
Konfigurasi
- CPU: 2 prosesor x 4 core - Intel (R) Xeon (R) CPU E5345 @ 2.33GHz
- RAM: 12 GB
- NIC: Intel Corporation 80003ES2LAN Pengontrol Gigabit Ethernet / Pengontrol Gigabit Ethernet 82546EB
- Switch jaringan: Cisco Catalyst 2960
- Info data: Blok data datang kira-kira. masing-masing 10 milidetik. Ukuran blok data sekitar. 1000 byte.
Latensi jaringan saat menerima paket sangat penting (puluhan mikrodetik penting). Saya mengoptimalkan program secara maksimal, tetapi saya tidak punya pengalaman mengutak-atik Ubuntu.
Apa yang dapat dikonfigurasikan di Ubuntu untuk mengurangi penundaan pemrosesan / pengiriman paket lokal?
Jawaban:
Jujur, saya tidak akan menggunakan Ubuntu untuk ini ... tetapi ada opsi yang dapat diterapkan untuk varian Linux apa pun.
Anda ingin meningkatkan buffer tumpukan jaringan Anda:
Jika aplikasi sedang menulis ke disk, mungkin diperlukan perubahan scheduler / elevator (mis.
deadline
Lift).Di tingkat server, Anda dapat memodifikasi pengatur CPU dan manajemen daya dan frekuensi CPU (P-States, C-States).
Pada level OS, Anda dapat mengubah prioritas waktu-nyata aplikasi Anda (
chrt
), mengoptimalkan untuk mengurangi interupsi, menyematkannya ke CPU atau grup CPU (taskset
), dan menghentikan semua layanan atau daemon yang tidak perlu.Anda juga dapat melihat beberapa saran di: Cara mengatasi masalah latensi antara 2 host linux
Sulit untuk menjadi lebih spesifik tanpa mengetahui perangkat keras atau peralatan jaringan yang terlibat.
sumber
Jika Anda menuju rute kinerja tinggi biasanya Anda ingin menjalankan sesedikit mungkin proses (terjadwal) lainnya karena akan mengganggu aplikasi Anda.
Linux, seperti sistem operasi UNIX klasik, dirancang untuk menjalankan beberapa aplikasi secara bersamaan dengan cara yang adil dan mencoba untuk mencegah kelaparan sumber daya dan Anda akan mengincar yang sebaliknya, membuat kelaparan segala sesuatu yang lain kecuali aplikasi Anda. Langkah-langkah sederhana di tingkat OS mengubah tingkat yang menyenangkan dan prioritas waktu nyata aplikasi Anda, mengubah penjadwal atau menggunakan kernel waktu nyata .
TCP / IP biasanya disetel untuk mencegah penurunan koneksi dan membuat efisien penggunaan bandwidth yang tersedia. Untuk mendapatkan latensi serendah mungkin dari tautan yang sangat cepat, alih-alih mendapatkan bandwidth tertinggi yang mungkin dari koneksi di mana beberapa tautan perantara lebih dibatasi, Anda akan menyesuaikan penyetelan tumpukan jaringan.
akan menampilkan sejumlah pengaturan kernel yang dapat Anda sesuaikan. Pengaturan tergantung pada apakah Anda menggunakan IPv4 atau IPv6 atau tidak dan apa sebenarnya yang sudah Anda lakukan dalam aplikasi tetapi menarik:
net.ipv4.tcp_window_scaling=1
RFC 1323 - dukungan untuk ukuran jendela IPV4 TCP lebih besar dari 64K - umumnya diperlukan pada jaringan bandwidth tingginet.ipv4.tcp_reordering=3
Waktu maksimum paket IPV4 dapat disusun ulang dalam aliran paket TCP tanpa TCP dengan asumsi paket hilang dan mulai lambat.net.ipv4.tcp_low_latency=1
dimaksudkan untuk memberikan preferensi pada latensi rendah daripada throughput yang lebih tinggi; setting = 1 menonaktifkan pemrosesan IPque4 tcp prequeuenet.ipv4.tcp_sack=0
pengaturan ke 1 memungkinkan pengakuan selektif untuk IPV4, yang mengharuskan tcp_timestamps diaktifkan dan menambahkan beberapa overhead paket, yang tidak Anda perlukan jika Anda tidak mengalami packetlossnet.ipv4.tcp_timestamps=0
Hanya disarankan dalam kasus di mana karung diperlukan.net.ipv4.tcp_fastopen=1
Memungkinkan untuk mengirim data dalam paket SYN pembuka.Sebagian besar jika tidak semua didokumentasikan dengan lebih baik di sumber kernel .
Anda tentu saja dapat kode soket TCP mentah dan sebagian besar by-pass stack TCP / IP kernel sama sekali.
Sistem yang sering disetel berjalan di jaringan tepercaya dan firewall lokal (iptables) mereka dinonaktifkan.
sumber