2016-01-11 11 views
7

Na przykład mamy 1 procesor z 8 rdzeniami. Ile maksymalnie różnych rdzeni procesora można wykorzystać do przetwarzania jednego pakietu IP, gdy przechodzi on przez Eth0-> TCP/IP-> App (wyklucza przetwarzanie w aplikacji)?Ile maksymalnie różnych rdzeni procesora można wykorzystać do przetwarzania jednego pakietu IP?

Na przykład, może to być 3 CPU Cores:

  1. sprzętu Proces przerwania
  2. proces obliczania sumy kontrolnej
  3. proces kopiowania kernel-space -> user-space (którego wskaźnik został wysłany do gniazdo)

Jest to bardzo ważne dla wydajności, ponieważ każdy transfer danych między rdzeniami jest bardzo kosztowny.

+0

To bardzo interesujące pytanie. Nie jestem pewien co do twojego uzasadnienia, dlaczego jest to ważne, ale jest interesujące z perspektywy projektowania jądra. – Owen

+3

Wydaje mi się, że prostsze i bardziej owocne podejście do paralelizmu polegałoby na tym, że różne rdzenie pracują nad różnymi pakietami. I 2 i 3 mogą być odciążone i CPU. A jeśli możesz przetworzyć wiele pakietów na przerwanie, możesz zamortyzować koszt 1. –

+0

Większość sprzętu już obsługuje 2. 3 zależy od projektu systemu, ale trudno go uniknąć. Robi się to także w różnych częściach stosu. Zupełnie ignoruj ​​przetwarzanie pakietów odbywa się na różnych poziomach, a więc w różnych modułach. Przynajmniej ramki surowej sieci Ethernet zwykle nie są przenoszone do/z przestrzeni użytkownika. Ogólnie rzecz biorąc, kernal powinien zachować lokalność, ale to nie jest juist kwestia ramek Ethernetowych. – Olaf

Odpowiedz

3

Ogólnie rzecz ujmując, poradzisz sobie z przerwaniem na jednym rdzeniu, masz szansę, że rzeczywiste działanie jądra zaangażowane w przetwarzanie go stanie się na innym rdzeniu, i ostatecznie przekaże je do aplikacji działającej na trzecim rdzeniu. W niektórych systemach operacyjnych można ustawić powinowactwo procesów, a także powinowactwo obsługi przerwań, aby uniknąć odrzucania danych.

Powiązane problemy