Saya memiliki Acer Aspire R1600-U910H dengan adaptor jaringan nForce gigabit. Throughput TCP maksimumnya sekitar 25MB / s, dan tampaknya dibatasi oleh single core Intel Atom 230; ketika throughput maksimum tercapai, penggunaan CPU adalah sekitar 50% -60%, yang sesuai dengan pemanfaatan penuh mengingat ini adalah CPU berkemampuan Hyper-threading.
Masalah yang sama terjadi pada Windows XP dan Ubuntu 8.04. Di Windows, saya telah menginstal driver chipset nForce terbaru, fitur hemat daya yang dinonaktifkan, dan mengaktifkan checksum offload. Di Linux, driver default memiliki checksum offload diaktifkan. Tidak ada driver Linux yang tersedia di situs web Nvidia.
ethtool -k eth0
menunjukkan bahwa checksum offload diaktifkan:
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off
Berikut ini adalah output powertop
saat jaringan idle:
Wakeups-from-idle per second : 61.9 interval: 10.0s
no ACPI power usage estimate available
Top causes for wakeups:
90.9% (101.3) <interrupt> : eth0
4.5% ( 5.0) iftop : schedule_timeout (process_timeout)
1.8% ( 2.0) <kernel core> : clocksource_register (clocksource_watchdog)
0.9% ( 1.0) dhcdbd : schedule_timeout (process_timeout)
0.5% ( 0.6) <kernel core> : neigh_table_init_no_netlink (neigh_periodic_timer)
Dan ketika throughput maksimum sekitar 25MB / s tercapai:
Wakeups-from-idle per second : 11175.5 interval: 10.0s
no ACPI power usage estimate available
Top causes for wakeups:
99.9% (22097.4) <interrupt> : eth0
0.0% ( 5.0) iftop : schedule_timeout (process_timeout)
0.0% ( 2.0) <kernel core> : clocksource_register (clocksource_watchdog)
0.0% ( 1.0) dhcdbd : schedule_timeout (process_timeout)
0.0% ( 0.6) <kernel core> : neigh_table_init_no_netlink (neigh_periodic_timer)
Perhatikan 20000 interupsi per detik. Mungkinkah ini penyebab penggunaan CPU yang tinggi dan throughput yang rendah? Jika demikian, bagaimana saya dapat memperbaiki situasi?
Sebagai referensi, komputer lain dalam jaringan biasanya dapat mentransfer pada 50 + MB / s tanpa masalah. Komputer dengan CPU Core 2 hanya menghasilkan 5.000 interupsi per detik saat ditransfer pada 110MB / s. Jumlah interupsi sekitar 20 kali lebih sedikit dari sistem Atom (jika interupsi skala linier dengan throughput.)
Bisakah meningkatkan ukuran jendela TCP memecahkan masalah? Apakah ini pengaturan umum di OS, atau spesifik aplikasi?
Dan sebuah pertanyaan kecil: Bagaimana saya bisa mengetahui apa yang digunakan pengemudi untuk eth0?
sumber
Jawaban:
Sepertinya kartu jaringan memiliki buffer yang cukup kecil dan beroperasi dalam mode interupsi, Anda mungkin dapat meningkatkan throughput dengan beralih ke polling, jika didukung oleh NIC & driver Anda.
Namun, masalahnya kemungkinan tidak dapat diselesaikan sepenuhnya tanpa beralih ke NIC dengan buffer yang lebih besar, yang mungkin tidak mungkin dilakukan dengan perangkat keras itu.
sumber
Memeriksa output dmesg dapat membantu.
Berikut adalah kasus khusus yang saya dapatkan di komputer ini tempat saya mengetik jawabannya:
Dalam kasus-kasus tertentu, dukungan NIC dibangun langsung ke dalam kernel (bukan sebagai modul). Jadi setidaknya tidak akan muncul di output lsmod .
sumber
Coba gunakan Pengoptimal TCP . Memilih rekomendasi yang dioptimalkan secara konsisten meningkatkan throughput dibandingkan pengaturan TCP instalasi default.
sumber