Ada beberapa jawaban yang bagus di sini, saya hanya ingin menambahkan beberapa opsi lagi.
1. Saya tahu ini tidak sesuai dengan yang Anda minta (baca cara-cara lain). Tetapi jika Anda ingin mengetahui kinerja NIC Anda di dunia nyata , daripada apa yang seharusnya komputer Anda katakan, Anda bisa menggunakan iperf. Saya biasanya melakukan ini - karena Anda tidak pernah tahu. Saya membeli NIC 1Gb baru-baru ini yang hanya ditransfer pada 672Mbps tetapi uplink-nya adalah 1Gb. Untung aku memeriksa.
Anda akan membutuhkan dua komputer.
Di komputer satu, jalankan iperf dalam mode server:
iperf -s
Di sisi lain, jalankan iperf dalam mode klien:
iperf -c 192.168.0.10
Jika Anda ingin melihat kecepatan dupleks penuh, coba ini sebagai gantinya:
iperf -d -c 192.168.0.10
Pengganti 192.168.0.10 untuk alamat IP server
2. Pada sistem Ubuntu, /var/log/kern.log
memiliki logging terbatas pada peristiwa kernel. Ini akan merekam kecepatan tautan dan status NIC saat berubah. Saya yakin distribusi lain mungkin melakukan sesuatu yang serupa atau dapat diatur untuk melakukannya.
$ tail -n 300 /var/log/kern.log.1 | grep slave0
Aug 28 12:54:04 haze kernel: [ 9452.766248] e1000e: slave0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Aug 28 12:54:41 haze NetworkManager[921]: <info> [1472403281.8486] device (slave0): link disconnected
Aug 28 12:54:41 haze kernel: [ 9489.898476] e1000e: slave0 NIC Link is Down
3. Anda mungkin tidak akan pernah perlu sejauh ini, tetapi Anda dapat menulis kode c untuk mendapatkan kecepatan. Kerja yang diuji dan root tidak diperlukan.
https://stackoverflow.com/questions/2872058/get-link-speed-programmatically
#include <stdio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <linux/ethtool.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
int sock;
struct ifreq ifr;
struct ethtool_cmd edata;
int rc;
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sock < 0) {
perror("socket");
exit(1);
}
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
ifr.ifr_data = &edata;
edata.cmd = ETHTOOL_GSET;
rc = ioctl(sock, SIOCETHTOOL, &ifr);
if (rc < 0) {
perror("ioctl");
exit(1);
}
switch (ethtool_cmd_speed(&edata)) {
case SPEED_10: printf("10Mbps\n"); break;
case SPEED_100: printf("100Mbps\n"); break;
case SPEED_1000: printf("1Gbps\n"); break;
case SPEED_2500: printf("2.5Gbps\n"); break;
case SPEED_10000: printf("10Gbps\n"); break;
default: printf("Speed returned is %d\n", edata.speed);
}
return (0);
}