Введение
Контроллер сетевого интерфейса (NIC, также известный как сетевая карта) — это аппаратный компонент компьютера, который обеспечивает подключение к компьютерной сети. Первые контроллеры сетевого интерфейса обычно представляли собой платы расширения, подключаемые к компьютерной шине. Благодаря низкой стоимости и широкому распространению стандарта Ethernet, большинство современных компьютеров имеют сетевой интерфейс, встроенный в материнскую плату, или реализованный в виде USB-адаптера. Современные контроллеры сетевого интерфейса предлагают расширенные функции, такие как интерфейсы прерываний и DMA для центральных процессоров, поддержка нескольких очередей приема и передачи данных, разделение на несколько логических интерфейсов и обработку сетевого трафика непосредственно контроллером, например, разгрузку TCP.
A network interface controller (NIC, also known as a network interface card,) is a computer hardware component that connects a computer to a computer network. Early network interface controllers were commonly implemented on expansion cards that plugged into a computer bus. The low cost and ubiquity of the Ethernet standard means that most newer computers have a network interface built into the motherboard, or is contained into a USB connected dongle. Modern network interface controllers offer advanced features such as interrupt and DMA interfaces to the host processors, support for multiple receive and transmit queues, partitioning into multiple logical interfaces, and on controller network traffic processing such as the TCP offload engine.
Цель
Контроллер сети реализует электронные схемы, необходимые для связи с использованием конкретного физического уровня и стандарта канального уровня, такого как Ethernet или Wi-Fi. Это обеспечивает основу для полного стека сетевых протоколов, позволяя компьютерам взаимодействовать как в пределах одной локальной сети (LAN), так и в глобальных сетях посредством маршрутизируемых протоколов, таких как Интернет-протокол (IP). Сетевая карта (NIC) позволяет компьютерам обмениваться данными по компьютерной сети, используя как кабельное, так и беспроводное соединение. Сетевая карта (NIC) является устройством как физического, так и канального уровня, поскольку обеспечивает физический доступ к сетевой среде и, для сетей IEEE 802 и подобных, предоставляет систему адресации нижнего уровня посредством уникальных MAC-адресов, присваиваемых сетевым интерфейсам.
Производительность и расширенная функциональность
Многоочередные сетевые интерфейсные карты (NIC) обеспечивают несколько очередей передачи и приема, позволяя пакетам, полученным NIC, назначаться одной из его очередей приема. NIC может распределять входящий трафик между очередями приема с помощью хэш-функции. Каждой очереди приема назначается отдельный прерывание; маршрутизируя каждое из этих прерываний на разные процессоры или ядра процессоров, обработка запросов прерываний, вызванных сетевым трафиком, полученным одной NIC, может быть распределена, что повышает производительность. Аппаратное распределение прерываний, описанное выше, называется масштабированием на стороне приема (RSS). Существуют также чисто программные реализации, такие как управление пакетами приема (RPS) и управление потоком приема (RFS). Дальнейшее повышение производительности можно достичь, маршрутизируя запросы на прерывание на процессоры или ядра, выполняющие приложения, которые являются конечным пунктом назначения для сетевых пакетов, сгенерировавших эти прерывания. Этот метод улучшает локальность ссылок и приводит к более высокой общей производительности, снижению задержки и лучшему использованию аппаратных ресурсов за счет более эффективного использования кэшей процессора и уменьшения количества необходимых переключений контекста. При использовании многоочередных NIC дополнительное повышение производительности можно достичь, распределяя исходящий трафик между различными очередями передачи. Назначая разные очереди передачи разным процессорам или ядрам процессоров, можно избежать внутренних конфликтов в операционной системе. Этот подход обычно называют управлением пакетами передачи (XPS). Некоторые NIC предоставляют механизм выгрузки TCP для переноса обработки всего стека TCP/IP на сетевой контроллер. Он в основном используется с высокоскоростными сетевыми интерфейсами, такими как Gigabit Ethernet и 10 Gigabit Ethernet, для которых накладные расходы на обработку сетевого стека становятся значительными. Некоторые NIC предлагают интегрированные программируемые пользователем вентильные матрицы (FPGA) для обработки сетевого трафика до его достижения хост-компьютера, что позволяет значительно снизить задержки в рабочих нагрузках, критичных ко времени. Кроме того, некоторые NIC предлагают полные стеки TCP/IP с низкой задержкой, работающие на интегрированных FPGA в сочетании с библиотеками пользовательского пространства, которые перехватывают сетевые операции, обычно выполняемые ядром операционной системы; примером является OpenOnload, сетевой стек Solarflare с открытым исходным кодом, работающий на Linux. Этот тип функциональности обычно называют сетевым взаимодействием на уровне пользователя.