『壹』 如何在linux下安裝網卡驅動
一、查看網卡型號和機器位數
1、查看網卡型號
linux系統下通過以下命令,可以查看當前的網卡驅動信息;
[box color="white" icon="none"]
[root@localhost zhangy]# lspci |grep -i eth
03:00.0 Ethernet controller: Realtek Semiconctor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)
[/box]
2、查看機器位數
驅動程序是要區分系統是32位系統還是64位系統的, 所以通過以下linux命令,就可以知道操作系統的位數了;
[box color="white" icon="none"]
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-308.13.1.el5PAE #1 SMP Tue Aug 21 17:50:26 EDT 2012 i686 i686 i386 GNU/Linux
[/box]
下載前先看一下你的網卡驅動,如果是最新的就不用在重新裝了。
[box color="white" icon="none"]
[root@localhost zhangy]# ethtool -i eth0
driver: r8169
version: 2.3LK-1-NAPI
firmware-version:
bus-info: 0000:03:00.0
[/box]
RTL8111/8168B就是網卡的型號,這樣你可以網卡的型號來找一下網卡驅動的官方網站,然後下載最裂改新的網卡驅動,驅動分64位和32位的,i386,i686是32位的機器,x86_64表示是64位的機器,不要選錯驅動了。
二、下載驅動,並安裝
1、解壓
[box color="white" icon="none"]
[root@localhost download]# tar jxvf r8168-8.032.00.tar.bz2
[/box]
2、安裝
[box color="white" icon="none"]
[root@localhost r8168-8.032.00]# make && make install
[/box]
如果報以下錯敏源首誤
make -C /lib/moles/2.6.18-308.8.2.el5PAE/build SUBDIRS=/home/zhangy/r8168-8.032.00/src INSTALL_MOD_DIR=kernel/drivers/net moles_install
make: *** /lib/moles/2.6.18-308.8.2.el5PAE/build: 沒有那個文件或目錄。 停止。
make: *** [install] 錯誤 2
說明你kernel源碼沒有安裝。安裝kernel源碼
[box color="white" icon="none"]
[root@localhost r8168-8.032.00]# yum install kernel-xen kernel-xen-devel kernel
> kernel-PAE kernel-PAE-devel kernel-devel kernel-headers
[/box]
安裝完以後,一定要重啟機器。不然下面操作就過不去了,會報FATAL: Mole r8168 not found.
[box color="white" icon="none"]
[root@localhost r8168-8.032.00]# depmod -a
[root@localhost r8168-8.032.00]# modprobe r8168
[/box]
編輯配置文件/etc/modprobe.cof,如果以前沒有添加alias eth0 r8168,如果已經有了修改一下成alias eth0 r8168。
查一下驅動橋數是不是載入了,如果有以下內容說明驅動安裝成功了。
[box color="white" icon="none"]
[root@localhost r8168-8.032.00]# lsmod |grep r8168
r8168 231132 0
[/box]
必須重新啟動一下機器,用ethtool查看驅動才會改變,不然還是老樣子。下面是新的驅動。
[box color="white" icon="none"]
[root@localhost ~]# ethtool -i eth0
driver: r8168
version: 8.032.00-NAPI
firmware-version:
bus-info: 0000:02:00.0
[/box]
『貳』 如何在linux中獲取網卡信息
查看 linux 的網卡信息步驟如下:工具原料:linux操作系統①啟動 linux 操作系統,進入到桌面;②啟動終端;③終端輸入命令 ifconfig eth0,回車;④linux 的網卡信息解讀:1.查看網卡生產廠商和信號:查看基本信息:lspci查看詳細信息:lspci -vvv # 3個小寫的v查看網卡信息:lspci | grep Ethernet;2.查看網卡驅動:查看網卡驅動信息:lspci -vvv # 找到網卡設備的詳細信息,包括網卡驅動# lsmod 列出載入的所有驅動,包括網卡驅動;3.查看網卡驅動版本查看模塊信息:modifo<mole name> # 其中包含version信息或 # ethtool-i <device name>;4.查看網路介面隊列數查看網卡介面的中斷信息:#cat /proc/interrupts | grep eth0或 # ethtool-S eth0;5.查看網卡驅動源碼的版本號解壓Intel網卡驅動源碼,打開解壓縮目錄下的*.spec文件查看驅動的版本;
『叄』 linux下無線網卡如何驅動
linux下無線網卡具體驅動的操作方法如下:
1、首先需要確定網卡的類型,打開linux的輸入窗口,然後繼續在linux終端下輸入lsusb命令,此時在輸出欄的第一行可以查看網卡類型,記錄下來。
『肆』 在linux下如何通過命令查網卡配置
在linux下通過命令查網卡配置的方法如下:
1、首先在電腦上打開Linux系統,然後進入Linux系統的終端窗口。
『伍』 linux查看系統網卡信息命令
查看網路信息命令 ifconfig
或者ip add show
希望可以幫助你,請採納,謝謝
『陸』 如何用命令查看linux的網卡吞吐量或最大網卡流量
linux查看網卡吞吐量和網卡流量用自帶命令,iptraf查看。
1 命令行直接輸入:iptraf(如果沒有,使用yum install iptraf安裝)
此外還有很多工具命令可以查看:
watch命令:
watch -n 1 "/sbin/ifconfig eth0 | grep bytes"。
『柒』 linux多網卡機上如何通過工具查看各網卡是否接入網路
一、通過mii-tool指令
[root@linuxzgf ~]# mii-tool
//mii-tool主要是用於配置網卡工作模式的指令,同時也可以進行查詢、監控等工作!
二、ethtool
[root@linuxzgf ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes
從上面 Link detected 可以看出eth0 處於連接狀態
三.[root@linuxzgf ~]# /etc/init.d/network status
配置設備:
lo eth0 eth0.10 eth0.2 eth0.3 eth0.4 eth0.5 eth0.7 eth0.8 eth1
當前的活躍設備:
lo eth0 eth0.10
[四、ifconfig -a
[root@linuxzgf ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:E0:81:80:D8:96
inet6 addr: fe80::2e0:81ff:fe80:d896/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:626032 errors:0 dropped:0 overruns:0 frame:0
TX packets:415035 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:123631002 (117.9 MiB) TX bytes:297575498 (283.7 MiB)
Base address:0x2000 Memory:df300000-df320000
eth1 Link encap:Ethernet HWaddr 00:E0:81:80:D8:97
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Base address:0x2020 Memory:df320000-df340000
五、lspci也可以看到網卡的信息
『捌』 linux 網卡狀態命令mii-tool 和 ethtool
linux下用mii-tool和ethtool 查看網線是否正確連接到網卡
輸入mii-tool可以查看網線是否連接到網卡
有時驅動可能不支持會出錯下列錯誤
可以使用ethtool查看
Link detected: yes為正常no為失敗
mii-tool 的用法:
mii-tool 在更改網路設備通信協商方式的方法比較簡單,用 -v 參數來查看網路介面的狀態;看下面的例子;
mii-tool 更改網路介面協商的方法;
[root@localhost ~]# mii-tool --help
usage: mii-tool [-VvRrwl] [-A media,... | -F media] [interface ...]
-V, --version display version information
-v, --verbose more verbose output 註:顯示網路介面的信息;
-R, --reset reset MII to poweron state 註:重設MII到開啟狀態;
-r, --restart restart autonegotiation 註:重啟自動協商模式;
-w, --watch monitor for link status changes 註:查看網路介面連接的狀態變化;
-l, --log with -w, write events to syslog 註:寫入事件到系統日誌;
-A, --advertise=media,... advertise only specified media 註:指令特定的網路介面;
-F, --force=media force specified media technology 註:更改網路介面協商方式;
media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
(to advertise both HD and FD) 100baseTx, 10baseT
example:
[at_Neal:root:~:]# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
eth1: no link
eth2: negotiated 100baseTx-FD flow-control, link ok
『玖』 ethtool原理介紹和解決網卡丟包排查思路
之前記錄過處理因為LVS網卡流量負載過高導致軟中斷發生丟包的問題, RPS和RFS網卡多隊列性能調優實踐 ,對一般人來說壓力不大的情況下其實碰見的概率並不高。這次想分享的話題是比較常見伺服器網卡丟包現象排查思路,如果你是想了解點對點的丟包解決思路涉及面可能就比較廣,不妨先參考之前的文章 如何使用MTR診斷網路問題 ,對於Linux常用的網卡丟包分析工具自然是ethtool。
2020年06月22日 - 初稿
閱讀原文 - https://wsgzao.github.io/post/ethtool/
ethtool - utility for controlling network drivers and hardware
ethtool is the standard Linux utility for controlling network drivers and hardware, particularly for wired Ethernet devices. It can be used to:
Most features are dependent on support in the specific driver. See the manual page for full information.
ethtool 用於查看和修改網路設備(尤其是有線乙太網設備)的驅動參數和硬體設置。你可以根據需要更改乙太網卡的參數,包括自動協商、速度、雙工和區域網喚醒等參數。通過對乙太網卡的配置,你的計算機可以通過網路有效地進行通信。該工具提供了許多關於接駁到你的 Linux 系統的乙太網設備的信息。
接收數據包是一個復雜的過程,涉及很多底層的技術細節,但大致需要以下幾個步驟:
NIC 在接收到數據包之後,首先需要將數據同步到內核中,這中間的橋梁是 rx ring buffer 。它是由 NIC 和驅動程序共享的一片區域,事實上, rx ring buffer 存儲的並不是實際的 packet 數據,而是一個描述符,這個描述符指向了它真正的存儲地址,具體流程如下:
當驅動處理速度跟不上網卡收包速度時,驅動來不及分配緩沖區,NIC 接收到的數據包無法及時寫到 sk_buffer ,就會產生堆積,當 NIC 內部緩沖區寫滿後,就會丟棄部分數據,引起丟包。這部分丟包為 rx_fifo_errors ,在 /proc/net/dev 中體現為 fifo 欄位增長,在 ifconfig 中體現為 overruns 指標增長。
這個時候,數據包已經被轉移到了 sk_buffer 中。前文提到,這是驅動程序在內存中分配的一片緩沖區,並且是通過 DMA 寫入的,這種方式不依賴 CPU 直接將數據寫到了內存中,意味著對內核來說,其實並不知道已經有新數據到了內存中。那麼如何讓內核知道有新數據進來了呢?答案就是中斷,通過中斷告訴內核有新數據進來了,並需要進行後續處理。
提到中斷,就涉及到硬中斷和軟中斷,首先需要簡單了解一下它們的區別:
當 NIC 把數據包通過 DMA 復制到內核緩沖區 sk_buffer 後,NIC 立即發起一個硬體中斷。CPU 接收後,首先進入上半部分,網卡中斷對應的中斷處理程序是網卡驅動程序的一部分,之後由它發起軟中斷,進入下半部分,開始消費 sk_buffer 中的數據,交給內核協議棧處理。
通過中斷,能夠快速及時地響應網卡數據請求,但如果數據量大,那麼會產生大量中斷請求,CPU 大部分時間都忙於處理中斷,效率很低。為了解決這個問題,現在的內核及驅動都採用一種叫 NAPI(new API)的方式進行數據處理,其原理可以簡單理解為 中斷 + 輪詢,在數據量大時,一次中斷後通過輪詢接收一定數量包再返回,避免產生多次中斷。
(1) RX errors
表示總的收包的錯誤數量,這包括 too-long-frames 錯誤,Ring Buffer 溢出錯誤,crc 校驗錯誤,幀同步錯誤,fifo overruns 以及 missed pkg 等等。
(2) RX dropped
表示數據包已經進入了 Ring Buffer,但是由於內存不夠等系統原因,導致在拷貝到內存的過程中被丟棄。
(3) RX overruns
表示了 fifo 的 overruns,這是由於 Ring Buffer(aka Driver Queue) 傳輸的 IO 大於 kernel 能夠處理的 IO 導致的,而 Ring Buffer 則是指在發起 IRQ 請求之前的那塊 buffer。很明顯,overruns 的增大意味著數據包沒到 Ring Buffer 就被網卡物理層給丟棄了,而 CPU 無法即使的處理中斷是造成 Ring Buffer 滿的原因之一,上面那台有問題的機器就是因為 interruprs 分布的不均勻(都壓在 core0),沒有做 affinity 而造成的丟包。
(4) RX frame
表示 misaligned 的 frames。
網線上的packet首先被網卡獲取,網卡會檢查packet的CRC校驗,保證完整性,然後將packet頭去掉,得到frame。網卡會檢查MAC包內的目的MAC地址,如果和本網卡的MAC地址不一樣則丟棄(混雜模式除外)。
網卡將frame拷貝到網卡內部的FIFO緩沖區,觸發硬體中斷。(如有ring buffer的網卡,好像frame可以先存在ring buffer里再觸發軟體中斷(下篇文章將詳細解釋Linux中frame的走向),ring buffer是網卡和驅動程序共享,是設備里的內存,但是對操作系統是可見的,因為看到linux內核源碼里網卡驅動程序是使用kcalloc來分配的空間,所以ring buffer一般都有上限,另外這個ring buffer size,表示的應該是能存儲的frame的個數,而不是位元組大小。另外有些系統的 ethtool 命令 並不能改變ring parameters來設置ring buffer的大小,暫時不知道為什麼,可能是驅動不支持。)
網卡驅動程序通過硬中斷處理函數,構建sk_buff,把frame從網卡FIFO拷貝到內存skb中,接下來交給內核處理。(支持napi的網卡應該是直接放在ring buffer,不觸發硬中斷,直接使用軟中斷,拷貝ring buffer里的數據,直接輸送給上層處理,每個網卡在一次軟中斷處理過程能處理weight個frame)
過程中,網卡晶元對frame進行了MAC過濾,以減小系統負荷。(除了混雜模式)
網卡驅動程序將IP包添加14位元組的MAC頭,構成frame(暫無CRC)。Frame(暫無CRC)中含有發送端和接收端的MAC地址,由於是驅動程序創建MAC頭,所以可以隨便輸入地址,也可以進行主機偽裝。
驅動程序將frame(暫無CRC)拷貝到網卡晶元內部的緩沖區,由網卡處理。
網卡晶元將未完全完成的frame(缺CRC)再次封裝為可以發送的packet,也就是添加頭部同步信息和CRC校驗,然後丟到網線上,就完成一個IP報的發送了,所有接到網線上的網卡都可以看到該packet。
產生中斷的每個設備都有一個相應的中斷處理程序,是設備驅動程序的一部分。每個網卡都有一個中斷處理程序,用於通知網卡該中斷已經被接收了,以及把網卡緩沖區的數據包拷貝到內存中。
當網卡接收來自網路的數據包時,需要通知內核數據包到了。網卡立即發出中斷。內核通過執行網卡已注冊的中斷處理函數來做出應答。中斷處理程序開始執行,通知硬體,拷貝最新的網路數據包到內存,然後讀取網卡更多的數據包。
這些都是重要、緊迫而又與硬體相關的工作。內核通常需要快速的拷貝網路數據包到系統內存,因為網卡上接收網路數據包的緩存大小固定,而且相比系統內存也要小得多。所以上述拷貝動作一旦被延遲,必然造成網卡FIFO緩存溢出 - 進入的數據包占滿了網卡的緩存,後續的包只能被丟棄,這也應該就是ifconfig里的overrun的來源。
當網路數據包被拷貝到系統內存後,中斷的任務算是完成了,這時它把控制權交還給被系統中斷前運行的程序。
網卡的內核緩沖區,是在PC內存中,由內核控制,而網卡會有FIFO緩沖區,或者ring buffer,這應該將兩者區分開。FIFO比較小,裡面有數據便會盡量將數據存在內核緩沖中。
網卡中的緩沖區既不屬於內核空間,也不屬於用戶空間。它屬於硬體緩沖,允許網卡與操作系統之間有個緩沖;
內核緩沖區在內核空間,在內存中,用於內核程序,做為讀自或寫往硬體的數據緩沖區;
用戶緩沖區在用戶空間,在內存中,用於用戶程序,做為讀自或寫往硬體的數據緩沖區;
另外,為了加快數據的交互,可以將內核緩沖區映射到用戶空間,這樣,內核程序和用戶程序就可以同時訪問這一區間了。
對於有ring buffer的網卡,ring buffer是由驅動與網卡共享的,所以內核可以直接訪問ring buffer,一般拷貝frames的副本到自己的內核空間進行處理(deliver到上層協議,之後的一個個skb就是按skb的指針傳遞方式傳遞,直到用戶獲得數據,所以,對於ring buffer網卡,大量拷貝發生在frame從ring buffer傳遞到內核控制的計算機內存里)。
網卡工作在數據鏈路層,數據量鏈路層,會做一些校驗,封裝成幀。我們可以查看校驗是否出錯,確定傳輸是否存在問題。然後從軟體層面,是否因為緩沖區太小丟包。
一台機器經常收到丟包的報警,先看看最底層的有沒有問題:
(1) 查看工作模式是否正常
(2) 查看檢驗是否正常
Speed,Duplex,CRC 之類的都沒問題,基本可以排除物理層面的干擾。
Why rx_crc_errors incrementing in the receive counter of ethtool -S output?
Check ethtool -S output and find where are the drops and errors.
Check the numbers corresponding to rx_crc_errors .
顯示了p1p1 的介面類型,連接模式,速率等等信息,以及當前是否連接了網線(如果是網線Supported ports 就是TP,如果是光纖則顯示Fiber),這里例舉下3個重要關鍵詞
Supported ports: [ FIBRE ]
Speed: 10000Mb/s
Link detected: yes
ethtool
Counters Troubleshooting for Linux Driver
Why do I see rx_crc_errors in ethtool output?
ping請求錯誤分析
ifconfig 命令詳解
ethtool 命令詳解
ethtool 解決網卡丟包嚴重和網卡原理