Witam.
Chciałbym się dowiedzieć czy istnieje możliwość (zakładam, że tak) rozdzielenia procesów między jądra/rdzenie procesora.
Posiadam maszynę z procesorem Intel(R) Xeon(R) CPU E3-1220 V2 @ 3.10GHz i pracuje w zasadzie tylko jeden.
Dodatkowo pytanie czy dałoby się rozgraniczyć, że konkretnymi tablicami iptables ma zajmować się konkretny rdzeń?
Będzie tam około 30 różnych tablic, ich sumaryczny ruch to około 800 Mb/s w jedną stronę, ruch ten ma być filtrowany tak jak obecny (obecnie tablic jest 6 i około 250 Mb/s ruchu), stąd też chciałem to rozłożyć jakoś ładnie po rdzeniach.
[+] Rozdzielanie procesów mi
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Jak dla mnie, to nie ma sensu ręcznie przydzielać procesów do poszczególnych rdzeni procesora. Tym zajmuje się scheduler jądra i robi to bardzo dobrze. U Ciebie występuje trochę inny problem. Sterownik karty sieciowej działa jednowątkowo. Scheduler, jeśli przydzieli już proces do danego rdzenia, to stara się go nie przenosić, jeśli nie ma takiej potrzeby - stąd obciążenie tylko jednego rdzenia. Zainteresuj się, czy Twoja karta sieciowa i jej sterownik wspierają NAPI (rx polling mode) - w uproszczeniu, mechanizm ten stara się jak najbardziej rozrzucić przerwania generowane przez sterownik po wszystkich rdzeniach, co skutkuje rozłożeniem obciążenia. Często dystrybucyjne sterowniki mają tą opcję wyłączoną i trzeba sobie samemu przekompilować sterownik.
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Zerknij pod hasłem:
lub:
Co nieco np. tutaj: http://nfsec.pl/root/3121
[Na trzepaku był temat poruszany, ale coś nie mogę znaleźć na szybko).
Edycja:
https://irqbalance.org/
Kod: Zaznacz cały
smp affinity
Kod: Zaznacz cały
irq affinity
[Na trzepaku był temat poruszany, ale coś nie mogę znaleźć na szybko).
Edycja:
https://irqbalance.org/
- LordRuthwen
- Moderator
- Posty: 2341
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Znalazłem rozwiązanie mojej bolączki. Nic nie muszę robić, wszystko jest i samo się robi.
Zainstalowałem:
irqbalance i po sprawie.
Dodane:
Drobna aktualizacja: zmieniłem maszynę (a przy okazji też i wersję systemu z Debiana 6 na Debiana 7) i irqbalance przestał działać jak trzeba, obciążył tylko dwa pierwsze rdzenie, dwa ostatnie się nudzą.
Rozwiązaniem, szytym na miarę, okazało się rozdzielenie przerwań na konkretne rdzenie za pomocą smp affinity - szybko łatwo i przyjemnie, bo mogę rx/tx każdego interfejsu przypisać konkretnemu rdzeniowi lub ich grupie, np. rdzeń 1, 2 i 3, a 0 nie.
Zmiana maszyny była spowodowana tym, że dostawała zadyszki przy ruchu powyżej 700 Mb/s, obecna jest delikatnie bardziej wydajna i 1,2 Gb/s nie robi na niej specjalnego wrażenia.
Zainstalowałem:
irqbalance i po sprawie.
Dodane:
Drobna aktualizacja: zmieniłem maszynę (a przy okazji też i wersję systemu z Debiana 6 na Debiana 7) i irqbalance przestał działać jak trzeba, obciążył tylko dwa pierwsze rdzenie, dwa ostatnie się nudzą.
Rozwiązaniem, szytym na miarę, okazało się rozdzielenie przerwań na konkretne rdzenie za pomocą smp affinity - szybko łatwo i przyjemnie, bo mogę rx/tx każdego interfejsu przypisać konkretnemu rdzeniowi lub ich grupie, np. rdzeń 1, 2 i 3, a 0 nie.
Zmiana maszyny była spowodowana tym, że dostawała zadyszki przy ruchu powyżej 700 Mb/s, obecna jest delikatnie bardziej wydajna i 1,2 Gb/s nie robi na niej specjalnego wrażenia.