Content deleted Content added
No edit summary Tags: Reverted Visual edit |
added reference to receive side scaling wiki page |
||
(35 intermediate revisions by 21 users not shown) | |||
Line 3:
{{Infobox Computer Hardware Generic
| name = Network interface
| image = Network card.jpg
| caption = A 1990s [[Ethernet]] network interface
| invent-date =
| invent-name =
Line 22:
| via2_3 = [[Fibre Channel]]
| via2_4 = [[Asynchronous Transfer Mode|ATM]]
| via2_5 = [[
| via2_6 = [[Token Ring]]
| via2_7 = [[ARCNET]]
Line 29:
| class2 = {{bulleted list|10 Mbit/s|100 Mbit/s|1 Gbit/s}}
| class3 = [[Full-duplex]]:<ref>{{Cite web|title=Port speed and duplex mode configuration|url=http://docs.ruckuswireless.com/fastiron/08.0.70/fastiron-08070-managementguide/GUID-EDD7D44C-A627-4B76-A9FE-D7657FFF62D3.html|access-date=2020-09-25|website=docs.ruckuswireless.com|language=en-US}}</ref><ref>{{Cite web|last=Admin|first=Arista|date=2020-04-23|title=Section 11.2: Ethernet Standards - Arista|url=https://www.arista.com/en/um-eos/eos-section-11-2-ethernet-standards|access-date=2020-09-28|website=Arista Networks|language=en-gb}}</ref>
| class4 = {{bulleted list|2.5 Gbit/s|5 Gbit/s|10 Gbit/s|up to {{nowrap|160 Gbit/s}}}}
| manuf1 = [[Intel]]
| manuf2 = [[Realtek]]
Line 39:
}}
A '''network interface
|url = http://www.windowsnetworking.com/articles_tutorials/networking-basics-part1.html
|title = Networking Basics: Part 1 - Networking Hardware
Line 49:
}}</ref>
Early network interface
Modern network interface
== Purpose ==
The network
The NIC allows computers to communicate over a computer network, either by using cables or wirelessly. The NIC is both a physical layer and data link layer device, as it provides physical access to a networking medium and, for [[IEEE 802]] and similar networks, provides a low-level addressing system through the use of [[MAC address]]es that are uniquely assigned to network interfaces.
Line 60:
== Implementation ==
[[File:12 early PC network cards.jpg|thumb|12 early ISA 8 bit and 16 bit PC network cards. The lower right-most card is an early wireless network card, and the central card with partial beige plastic cover is a PSTN [[modem]].]]
[[File:Intel Ophir 82571 Dual Port Gigabit Ethernet Controller Die Shot.png|thumb|Intel Ophir 82571 dual-port Gigabit Ethernet controller [[Die (integrated circuit)|die]]]]
Network
An Ethernet network
[[File:Qle3442-cu 10gbe nic.jpg|thumb|A [[Qlogic]] QLE3442-CU SFP+ dual-port NIC]]
Modular designs like [[Small
[[
▲[[Light-emitting diode|LEDs]] adjacent to or integrated into the network connector inform the user of whether the network is connected, and when data activity occurs.
The NIC may include [[ROM]] to store its factory-assigned [[MAC address]].<ref>{{cite web |url=https://www.itprotoday.com/cloud-computing/how-can-i-change-network-adapter-cards-mac-address |title=How can I change a network adapter card's MAC address? |author=John Savill |date=Nov 12, 2000 |access-date=2023-11-06}}</ref>
Line 90 ⟶ 89:
}}</ref>]]
'''Multiqueue NICs''' provide multiple transmit and receive [[Queue (abstract data type)|queues]], allowing packets received by the NIC to be assigned to one of its receive queues. The NIC may distribute incoming traffic between the receive queues using a [[hash function]]. Each receive queue is assigned to a separate [[interrupt]]; by routing each of those interrupts to different [[CPU]]s or [[Multi-core processor|CPU cores]], processing of the interrupt requests triggered by the network traffic received by a single NIC can be distributed improving performance.<ref name="linux-net-scaling">{{cite web
| url = https://www.kernel.org/doc/Documentation/networking/scaling.txt
| title = Linux kernel documentation: Documentation/networking/scaling.txt
Line 102 ⟶ 101:
| publisher = [[Intel]] }}</ref>
The hardware-based distribution of the interrupts, described above, is referred to as
| url = http://www.intel.com/content/dam/technology-provider/secure/us/en/documents/product-marketing-information/tst-grantley-launch-presentation-2014.pdf
| title = Intel Look Inside: Intel Ethernet
Line 110 ⟶ 109:
| archive-url = https://web.archive.org/web/20150326095816/http://www.intel.com/content/dam/technology-provider/secure/us/en/documents/product-marketing-information/tst-grantley-launch-presentation-2014.pdf
| archive-date = March 26, 2015
}}</ref>{{rp|82}} Purely software implementations also exist, such as the [[receive packet steering]] (RPS)
| url = https://www.kernel.org/doc/Documentation/networking/ixgbe.txt
| title = Linux kernel documentation: Documentation/networking/ixgbe.txt
Line 124 ⟶ 123:
| title = Introduction to Intel Ethernet Flow Director and Memcached Performance
| date = October 14, 2014 | access-date = October 11, 2015
| publisher = [[Intel]] }}</ref> Further performance improvements can be achieved by routing the interrupt requests to the CPUs or cores executing the applications that are the ultimate destinations for [[network packet]]s that generated the interrupts. This technique improves [[locality of reference]] and results in higher overall performance, reduced latency and better hardware utilization because of the higher utilization of [[CPU cache]]s and fewer required [[context switch]]es.
With multi-queue NICs, additional performance improvements can be achieved by distributing outgoing traffic among different transmit queues. By assigning different transmit queues to different CPUs or CPU cores, internal operating system contentions can be avoided. This approach is usually referred to as '''transmit packet steering''' (XPS).<ref name="linux-net-scaling" />
Some products feature '''NIC partitioning''' ('''NPAR''', also known as '''port partitioning''') that uses [[SR-IOV]] virtualization to divide a single 10 Gigabit Ethernet NIC into multiple discrete virtual NICs with dedicated bandwidth, which are presented to the firmware and operating system as separate [[PCI device function]]s.<ref name="Dell">{{cite web
| url = http://www.dell.com/downloads/global/products/pedge/en/Dell-Broadcom-NPAR-White-Paper.pdf
| title = Enhancing Scalability Through Network Interface Card Partitioning
Line 137 ⟶ 136:
| date = September 2011 | access-date = September 24, 2015
| author1 = Patrick Kutch | author2 = Brian Johnson | author3 = Greg Rose
| publisher = [[Intel]] }}</ref>
Some NICs provide a [[TCP offload engine]]
| url = https://lwn.net/Articles/243949/
| title = Large receive offload
Line 147 ⟶ 146:
{{Anchor|SOLARFLARE|OPENONLOAD|USER-LEVEL-NETWORKING}}
Some NICs offer integrated [[field-programmable gate array]]s (FPGAs) for user-programmable processing of network traffic before it reaches the host computer, allowing for significantly reduced [[Latency (engineering)|latencies]] in time-sensitive workloads.<ref>{{cite web|title=High Performance Solutions for Cyber Security|url=http://newwavedv.com/markets/defense/cyber-security/|website=New Wave Design & Verification|publisher=New Wave DV}}</ref> Moreover, some NICs offer complete low-latency [[TCP/IP stack]]s running on integrated FPGAs in combination with [[userspace]] libraries that intercept networking operations usually performed by the [[operating system kernel]]; Solarflare's open-source '''OpenOnload''' network stack that runs on [[Linux]] is an example. This kind of functionality is usually referred to as '''user-level networking'''.<ref>{{cite web
| url = https://www.theregister.co.uk/2012/02/08/solarflare_application_onload_engine/
| title = Solarflare turns network adapters into servers: When a CPU just isn't fast enough
|