gat3way е прав. Това се нарича polling и е най - добрия начин при големи трафици. Обикновено той е пряко свързан с HZ (или по точно броя прекъсвания, които се генерират в сек.). Например в FreeBSD 7 се регистрира callout, който се вика през 10 подобни прекъсвания (ако са 5000 за сек. например се вика 500 пъти в сек., което не е много, тъй като аз съм писал рутер, който си издържа пакети от 5000 / sec и му остава доста процесорно време). Проблема на повечето операционни системи ("модерни"), е че вземат примерно 1 ключалка преди да почнат да poll-ват картите и ги poll-ват линейно, като друг процес неможе да ги poll-не (заради ключалката). По принцип това може много да се оптимизира като се стартират отделни thread-ове примерно за всеки процесор и те poll-ват карти, които не са заключени (не се poll-ват в момента). Ако OS има добре написан мрежови стек, той няма да зависи от 1 ключалка на пакет, а ще се използват други техники за паралелна обработка (естествено до колкото може) на пакетите приети от тези thread-ове. За жалост поне в FreeBSD, тъй като скоро не съм хвърлял око на линукс, това не е така, за това ми се наложи да си го направя. В крайна сметка подобно нещо прекарваше 7 gbps на 1 mpps (в посока, не сумарно) на 1 quad-core, който имаше на всеки core по 50 % idle. Друго много важно нещо, за което трябва да гледаш е counter наречен missed packets това са пакети, които адаптера не е успял да вземе. Много е важно дънната ти платка да има хубава шина, тъй като например с S5000V на интел PCIe не ти е за северния мост, а е за южния, което създава много проблеми над 5 gbps. Много добро дъно за големи трафици е S5000P серията. То има 2 PCIe за северния мост (на които примерно може да се закачат 2 4 портови сървърни интел адаптера).
По принцип се говори, че в Solaris мрежовия стек вече е доста оптимизиран за МП, но никога не съм гледал дали наистина е така или пак има някоя ключалка например на poll функцията, което е достатъчно да трябва да чакаш картите да се poll-ват 1 по 1.
Доста обещаващо звучи DragonFlyBSD, което има доста оптимизиран стек за МП и може би е най - близо до истината, но има доста други недостатъци.
Честно казано скоро в Линукс не съм гледал какво са правили, но при всички положения за голям трафик poll ти е най - добрия вариант просто всичко останало опира до настройка по колко пакета да взема на poll, колко пъти да poll-ва в сек. и други подобни.
Интересна тема
Поздрави.