Текущие сетевые стеки (и обычные операционные системы в целом) были разработаны на основе моделей, основанных на простых сетевых картах, которые постепенно загружают одноядерные процессоры. Когда многоядерные машины стали распространенными и масштабируемость программного стека стала серьезной проблемой, были предприняты значительные усилия для адаптации этих моделей для использования преимуществ нескольких ядер
Как и в случае любого другого жесткого правила кодирования в оборудовании NIC, основным недостаткомRSS заключается в том, что ОС практически не влияет на распределение очередей для потоков.
Недостатки RSS можно преодолеть, используя более гибкие фильтры NIC или пытаясь разумно назначать очереди потокам с помощью программного обеспечения, запеченного в системном операторе.
На следующем рисунке ASCII-рисунка описано, как кольцо можетпозаботьтесь о том, чтобы аппаратные средства получили два пакета и доставили ОС прерывание:
+--------------+ <----- OS Pointer
| Descriptor 0 |
+--------------+
| Descriptor 1 |
+--------------+ <----- Hardware Pointer
| Descriptor 2 |
+--------------+
| ... |
+--------------+
| Descriptor n |
+--------------+
Когда ОС получает прерывание, она считывает, где находится аппаратный указатель, и обрабатывает эти пакеты между указателем и аппаратным обеспечением. Как только это сделано, ему не нужно ничего делать, пока он не подготовит эти дескрипторы со свежими буферами. Как только это произойдет, он обновит свой указатель, записав на аппаратное обеспечение. Например, если ОС обработала эти первые два дескриптора, а затем обновила оборудование, кольцо будет выглядеть примерно так:
+--------------+
| Descriptor 0 |
+--------------+
| Descriptor 1 |
+--------------+ <----- Hardware Pointer, OS Pointer
| Descriptor 2 |
+--------------+
| ... |
+--------------+
| Descriptor n |
+--------------+
Когда вы отправляете пакеты, оно похоже. ОС заполняет дескрипторы, а затем уведомляет оборудование. После того, как оборудование отправило их по проводам, оно вводит прерывание и указывает, какие дескрипторы записаны в сеть, что позволяет ОС освободить связанную память.