Solusi 1:
Sejujurnya, saya tidak akan menggunakan Ubuntu untuk ini... tetapi ada opsi yang dapat diterapkan ke semua varian Linux.
Anda akan ingin membuat buffer tumpukan jaringan Anda:
net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
Jika aplikasi menulis ke disk, mungkin diperlukan perubahan penjadwal/elevator (mis. deadline
lift).
Di tingkat server, Anda dapat mengubah pengatur CPU dan manajemen daya dan frekuensi CPU (P-States, C-States).
Di tingkat OS, Anda dapat mengubah prioritas realtime aplikasi Anda (chrt
), mengoptimalkan untuk mengurangi interupsi, menyematkannya ke CPU atau grup CPU (taskset
), dan menghentikan layanan atau daemon yang tidak perlu.
Anda juga dapat melihat beberapa saran di:Cara memecahkan masalah latensi antara 2 host linux
Sulit untuk lebih spesifik tanpa mengetahui perangkat keras atau peralatan jaringan yang terlibat.
Solusi 2:
Jika Anda menggunakan 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 banyak aplikasi secara bersamaan dengan cara yang adil dan mencoba untuk mencegah kekurangan sumber daya dan Anda akan bertujuan sebaliknya, membuat semua hal lain kecuali aplikasi Anda kelaparan. Langkah sederhana di tingkat OS adalah mengubah tingkat yang bagus dan prioritas waktu nyata dari aplikasi Anda, mengubah penjadwal, atau menggunakan kernel waktu nyata.
TCP/IP biasanya disetel untuk mencegah koneksi terputus dan memanfaatkan bandwidth yang tersedia secara efisien. Untuk mendapatkan latensi serendah mungkin dari link yang sangat cepat, daripada mendapatkan bandwidth setinggi mungkin dari koneksi di mana beberapa link perantara lebih dibatasi, Anda akan menyesuaikan penyetelan tumpukan jaringan.
sysctl -a
akan menunjukkan kepada Anda sejumlah pengaturan kernel yang dapat Anda sesuaikan. Setelan bergantung pada apakah Anda menggunakan IPv4 atau IPv6 atau tidak dan apa sebenarnya yang sudah Anda lakukan di aplikasi Anda, tetapi yang menarik mungkin:
net.ipv4.tcp_window_scaling=1
RFC 1323 - dukungan untuk IPV4 TCPwindow berukuran lebih besar dari 64K - umumnya diperlukan pada jaringan bandwidth tingginet.ipv4.tcp_reordering=3
Waktu maksimum paket IPV4 dapat diurutkan ulang dalam aliran paket TCP tanpa asumsi TCP kehilangan paket dan memulai dengan lambat.net.ipv4.tcp_low_latency=1
dimaksudkan untuk memberikan preferensi pada latensi rendah daripada throughput yang lebih tinggi; pengaturan =1menonaktifkan pemrosesan prequeue tcp IPV4net.ipv4.tcp_sack=0
pengaturan ke 1 mengaktifkan pengakuan selektif untuk IPV4, yang memerlukan pengaktifan tcp_timestamps 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
Aktifkan untuk mengirim data dalam paket SYN pembuka.
Sebagian besar, jika tidak semua, didokumentasikan dengan lebih baik di sumber kernel.
Anda tentu saja dapat membuat kode soket TCP mentah dan sebagian besar mem-by-pass tumpukan kernel TCP/IP sekaligus.
Seringkali sistem yang sangat disetel berjalan di jaringan tepercaya dan firewall lokal (iptables) akan dinonaktifkan.