GNU/Linux >> Belajar Linux >  >> Linux

Meningkatkan kinerja TCP melalui jaringan gigabit dengan banyak koneksi dan lalu lintas paket kecil yang tinggi

Solusi 1:

Masalahnya mungkin Anda mendapatkan terlalu banyak interupsi pada kartu jaringan Anda. Jika Bandwidth bukan masalahnya, frekuensi adalah masalahnya:

  • Aktifkan buffer kirim/terima pada kartu jaringan

    ethtool -g eth0
    

Akan menampilkan pengaturan saat ini (256 atau 512 entri). Anda mungkin dapat menaikkannya menjadi 1024, 2048 atau 3172. Lebih banyak mungkin tidak masuk akal. Ini hanyalah buffer cincin yang hanya terisi jika server tidak dapat memproses paket masuk dengan cukup cepat.

Jika buffer mulai terisi, flow control adalah sarana tambahan untuk memberi tahu router atau sakelar agar melambat:

  • Aktifkan kontrol aliran masuk/keluar di server dan port sakelar/router yang terhubung dengannya.

    ethtool -a eth0
    

Mungkin akan menampilkan:

Pause parameters for eth0:
Autonegotiate:  on
RX:             on
TX:             on

Periksa /var/log/messages untuk pengaturan eth0 saat ini. Periksa sesuatu seperti:

eth0:Tautan naik pada 1000 Mbps, dupleks penuh, kontrol aliran tx dan rx

Jika Anda tidak melihat tx dan rx, admin jaringan Anda harus menyesuaikan nilai pada sakelar/router. Di Cisco yang menerima/mentransmisikan kontrol aliran.

Awas: Mengubah Nilai ini akan menaikkan dan menurunkan tautan Anda untuk waktu yang sangat singkat (kurang dari 1 detik).

  • Jika semua ini tidak membantu - Anda juga dapat menurunkan kecepatan kartu jaringan menjadi 100 MBit (lakukan hal yang sama pada switch/router-ports)

    ethtool -s eth0 autoneg off && ethtool -s eth0 speed 100
    

Tetapi dalam kasus Anda, saya akan mengatakan - naikkan buffer penerima di buffer cincin NIC.

Solusi 2:

Mengikuti mungkin bukan jawaban pasti tetapi pasti akan memberikan beberapa ide

Coba tambahkan ini ke sysctl.conf

##  tcp selective acknowledgements. 
net.ipv4.tcp_sack = 1
##enable window scaling
net.ipv4.tcp_window_scaling = 1
##
net.ipv4.tcp_no_metrics_save = 1

Sedangkan ack tcp selektif baik untuk kinerja optimal dalam kasus jaringan bandwidth tinggi. Namun waspadalah terhadap kekurangan lainnya. Manfaat penskalaan jendela dijelaskan di sini. Adapun opsi sysctl ketiga:Secara default, TCP menyimpan berbagai metrik koneksi di cache rute saat koneksi ditutup, sehingga koneksi yang dibuat dalam waktu dekat dapat menggunakan ini untuk mengatur kondisi awal. Biasanya, ini meningkatkan kinerja secara keseluruhan, tetapi terkadang dapat menyebabkan penurunan kinerja. Jika disetel, TCP tidak akan meng-cache metrik saat menutup koneksi.

Periksa dengan

ethtool -k ethX

untuk melihat apakah offloading diaktifkan atau tidak. Offload checksum TCP dan offload segmen besar didukung oleh sebagian besar NIC Ethernet saat ini dan tampaknya Broadcom juga mendukungnya.

Coba gunakan alat

powertop

saat jaringan diam dan saat kejenuhan jaringan tercapai. Ini pasti akan menunjukkan jika interupsi NIC adalah penyebabnya. Polling perangkat adalah jawaban untuk situasi seperti itu. FreeBsd mendukung tombol polling tepat di dalam ifconfig tetapi linux tidak memiliki opsi seperti itu. Konsultasikan ini untuk mengaktifkan pemungutan suara. Dikatakan BroadCom juga mendukung polling yang merupakan kabar baik untuk Anda.

Tweak paket jumbo mungkin tidak memotongnya untuk Anda karena Anda menyebutkan lalu lintas Anda sebagian besar terdiri dari paket kecil. Tapi, hei, cobalah juga!

Solusi 3:

Saya perhatikan di daftar tweak bahwa stempel waktu dimatikan, tolong jangan lakukan itu. Itu adalah kemunduran lama ke masa lalu ketika bandwidth sangat mahal dan orang ingin menghemat beberapa byte/paket. Ini digunakan, misalnya, oleh tumpukan TCP akhir-akhir ini untuk mengetahui apakah paket yang tiba untuk soket di "CLOSE_WAIT" adalah paket lama untuk sambungan atau apakah itu paket baru untuk sambungan baru dan membantu dalam perhitungan RTT. Dan menyimpan beberapa byte untuk cap waktu TIDAK ADA dibandingkan dengan apa yang akan ditambahkan alamat IPv6. Menonaktifkan stempel waktu lebih berbahaya daripada manfaatnya.

Rekomendasi untuk mematikan stempel waktu ini hanyalah kemunduran yang terus diteruskan dari satu generasi sysadmin ke generasi berikutnya. Semacam "legenda urban".

Solusi 4:

Anda perlu mendistribusikan beban ke semua inti CPU. Mulai 'irqbalance'.

Solusi 5:

Dalam kasus saya hanya satu penyetelan:

net.ipv4.tcp_timestamps = 0

membuat perubahan yang sangat besar dan bermanfaat, waktu pemuatan situs berkurang 50%.


Linux
  1. Cara mengkonfigurasi failover dan ikatan jaringan ketersediaan tinggi di Linux

  2. Cara memeriksa kecepatan jaringan dengan speedtest.net dan terminal

  3. Gabungkan dan Tshark:Gabungkan Dump Paket dan Analisis Lalu Lintas Jaringan

  1. Lihat koneksi jaringan server Linux Anda dengan netstat

  2. Alat sumber terbuka dan tip untuk meningkatkan kinerja PC Linux Anda

  3. Cara Memantau dan Mencatat Lalu Lintas Jaringan di Linux Menggunakan vnStat

  1. Bagaimana Memantau Lalu Lintas TCP Antara Localhost Dan Alamat Ip?

  2. Koneksi penerusan Putty, CygwinX, dan X11 ditolak

  3. Mengapa lalu lintas jaringan Linux hanya melewati eth0?