Działanie i możliwości komputerów z wieloma procesorami
Zadania takie jak konwersja wideo mogą zająć procesorowi komputera wiele godzin. Finalny czas ukończenia zadania zależy od wydajności procesora, częstotliwości i ilości rdzeni. Wiele zadań potrafi bez problemu wykorzystać wiele rdzeni procesora, ale sam procesor może pomieścić tylko ograniczoną ich ilość. Żeby móc przyśpieszyć pracę serwerów i stacji roboczych stosuje się w takich przypadkach komputery z wieloma wielordzeniowymi procesorami. Komplikuje to sposób działania komputera, ale też pozwala skalować się na znacznie większą ilość rdzeni. Sprawdźmy jak działają takie systemy i jak samemu można tanio poeksperymentować z takim systemem.
Celem tego artykułu jest przybliżenie sposobu działania systemów wieloprocesorowych oraz zaprezentowanie tanich starych serwerów i stacji roboczych LGA 1366 z dwoma cztero/sześcio-rdzeniowymi procesorami. Ze względu na popularyzację 6+ rdzeniowych procesorów względna wydajność starych maszyn roboczych spadła i obecnie nie ma zbyt wielu zastosowań dla jakich warto je jeszcze używać, niemniej niska cena może pozwolić na eksperymenty z architekturą NUMA, czy budżetowo-eksperymentalną maszynę do obrabiania klipów wideo i temu podobnych zadań.
![Dwuprocesorowy komputer w architekturze NUMA](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_cpu_numa_system.jpg)
Dwuprocesorowy komputer w architekturze NUMA
Platformy wieloprocesorowe
Obsługa wielu procesorów była zarezerwowana dla bardziej elitarnych procesorów AMD i Intela. Niebiescy oferowali taką możliwości dla swoich Xeonów, a czerwoni - Opteronów. W 2011 roku mimo iż AMD nie było królem wydajności byli w stanie zaoferować system z czterema 16-rdzeniowymi procesorami - 64 rdzeni sumarycznie. Gdy gracze używali czterordzeniowe procesory Sandy i Ivy Bridge serwery Intela mogły pochwalić się dwoma cztero lub sześcio-rdzeniowymi Xeonami o bardzo dobrej jak na owe czasy wydajności (nawet pojawiły konsumenckie sześciordzeniowe i7 Ivy Bridge bazujące na tych Xeonach, ale już bez wsparcia dla pracy wieloprocesorowej).
Procesor może pomieścić skończoną ilość rdzeni - czy to z powodu limitu rozmiaru układu krzemowego (im większy tym droższy w produkcji), czy z limitów danej architektury (wszystkie rdzenie muszą się móc ze sobą komunikować, operować na pamięci itd.). Zwiększając ilość procesorów pomijamy te ograniczenia zwiększając ilość dostępnych rdzeni. Niestety w rzeczywistości dodaje to kolejną warstwę skomplikowania - teraz każdy procesor musi jeszcze komunikować się z innymi procesorami. Na platformach Intela łącze do takiej komunikacji nazywało się QPI (QuickPath Interconnect), obecnie UPI - UltraPath Interconnect. Na platformach opartych o Opterony AMD rozwiązaniem było łącze HyperTransport, a obecnie w Threadripperach i Epyc - Infinity Fabric.
Nie dość że procesory muszą współpracować to muszą mieć też dostęp do pamięci operacyjnej. Dość szybko w historii rozwoju procesorów problemem okazała się właśnie wydajność tego połączenia. Dwu czy nawet czterokanałowa konfiguracja pamięci nawet dla jednego konsumenckiego procesora nie jest niczym nadzwyczajnym i wynika właśnie z potrzeby uzyskania wysokiej wydajności tego połączenia. W przypadku systemów wieloprocesorowych podłączenie wszystkich procesorów do jednego kontrolera pamięci okazało się nierealne i dość szybko powstała architektura NUMA - Niejednolity dostęp do pamięci (ang. Non-Uniform Memory Access). Po prostu każdy procesor ma własną pamięć RAM i może z niej korzystać tak jak robi to komputer z jednym procesorem. Dostęp do pamięci innego procesora jest możliwy poprzez złącze do komunikacji między procesorami ale oczywiście z ograniczoną wydajnością.
Mając komunikację między procesorami i architekturę NUMA dochodzimy do sedna klasycznych systemów wieloprocesorowych. Mimo iż komputer ma sumarycznie np. 64 rdzenie i 48 GB RAM (12 * 4) system operacyjny, tudzież nasza aplikacja musi mieć wiedzę jak je efektywnie wykorzystać. Nie można po prostu wrzucić danych do pamięci jednego procesora, a samą aplikację skalować na rdzeniach drugiego licząc że to będzie optymalne. Co więcej - każda platforma sprzętowa ma swoje unikalne zachowania i szczegóły implementacji. Nawet AMD Threadripper 2990WX z 32 rdzeniami mimo iż jest jednym procesorem to działa w architekturze NUMA, gdzie rdzenie na dwóch chipletach mają bezpośredni dostęp do pamięci RAM, a rdzenie na dwóch pozostałych chipletach już nie - to tworzy dwa typy procesorów w systemie i operacje bardziej zależne od dostępu do pamięci RAM powinny być wykonywane na tych pierwszych rdzeniach.
![Dwa procesory to więcej zużytej energii elektrycznej](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_power_draw.jpg)
Dwa procesory to więcej zużytej energii elektrycznej
System operacyjny w architekturze NUMA
Mając maszynę roboczą z dwoma lub więcej procesorami możemy zainstalować Windowsa (w odpowiedniej wersji), czy Linuksa i będzie działał bez widocznych gołym okiem różnic. Różnice pojawiają się w zachowaniu systemu operacyjnego, który staje się odpowiedzialny za rozdzielanie zadań pomiędzy procesorami w najbardziej optymalny sposób jaki może znaleźć. Oczywiście heurystyka systemu operacyjnego może nie być dobra dla naszego przypadku i wtedy możemy zacząć sterować tym ręcznie.
W architekturze NUMA poszczególne procesory (lub grupy rdzeni) nazywane są węzłami (Nodes) i ta terminologia jest stosowana w aplikacjach i w systemie operacyjnym. Możemy obserwować obciążenie poszczególnych węzłów, czy wskazywać jakie zadania powinny zostać wykonane na danym węźle. Każdy węzeł musi być połączony z resztą systemu łączem komunikacyjnym zapewniającym spójność pamięci podręcznych (QPI, Hypertransport, Infinity Fabric).
System operacyjny stara się wykonywać wątki na węzłach, w których znajduje się wykorzystywana przez nie pamięć, ale jeżeli zajdzie taka konieczność - przydzieli je do innych węzłów. Wykorzystanie interfejsów specyficznych dla danego systemu operacyjnego pozwala ręcznie sterować tym przydziałem bazując na dodatkowej wiedzy, której heurystyka systemu operacyjnego nie posiada.
Serwer może mieć wiele węzłów, a na wybranych np. przydzielony dostęp do kart graficznych. Cała struktura takiego systemu nazywana jest topologią.
![Topologia systemu z jednym czterordzeniowym procesorem](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_lstopo_single_core.png)
Topologia systemu z jednym czterordzeniowym procesorem
![Topologia dwóch czterordzeniowych procesorów](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_lstopo_dual_quad.png)
Topologia dwóch czterordzeniowych procesorów
![Topologia dwóch sześciordzeniowych procesorów](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_lstopo_six_cores.png)
Topologia dwóch sześciordzeniowych procesorów
MS Windows
W przypadku Windowsa 10 obsługę wielu procesorów posiada wersja Windows 10 Pro, a na wersji Home będziemy mieć obsługę tylko jednego procesora. Oprócz tego do dyspozycji są też serwerowe wersje tego systemu operacyjnego.
![Windows 10 Home vs Pro](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_xeon_windows_comparison.png)
Windows 10 Home vs Pro
Programista czy administrator odpowiedzialny za wykorzystanie danego serwera do przeprowadzenia obliczeń może wykorzystać interfejsy dostępne w Windowsie (lub Linuksie) do sterowania lub wspomagania rozkładem wątków po węzłach. Thread affinity (powinowactwo wątków) pozwala wymusić zakres rdzeni na jakich dany wątek ma działać. Zazwyczaj wskazuje się rdzenie jednego z procesorów. Zazwyczaj nie jest konieczne ustawianie tego parametru, gdyż można przeszkodzić heurystyce systemu operacyjnego - trzeba dokładnie znać specyfikę danej platformy, wykonywanych zadań i konieczności ich ręcznego rozpraszania po procesorach. Thread affinity można użyć też do np. testowania poszczególnych procesorów.
Nieco bardziej poręczne jest wskazanie thread ideal processor - wskazanie idealnego procesora do wykonania danego wątku. Nie gwarantuje to że zostanie on wybrany, ale stanowi wskazówkę dla schedulera systemu operacyjnego.
Więcej na:
- Prezentacja Systemy wieloprocesorowe
- docs.microsoft.com - systemy wieloprocesorowe
- docs.microsoft.com - obsługa NUMA
![MS Windows obciążenie procesora w trybie węzłów NUMA](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_windows_numa_node_stats.png)
MS Windows obciążenie procesora w trybie węzłów NUMA
Linux
Ogólne idee są podobne do tych opisanych dla Windowsa. Programiści pod Linuksem mają obsługę po stronie jądra systemu oraz w przestrzeni użytkownika bibliotekę libnuma
oraz narzędzie numactl
do sterowania powinowactwem wątków. lstopo
to graficzna aplikacja przedstawiająca topologię systemu. Standardowe polecenie top
wyświetlając listę działających procesów i obciążenie sumaryczne procesora potrafi też pokazać obciążenie poszczególnych węzłów - wystarczy użyć widoku dostępnego pod klawiszem 2
(1 - poszczególne rdzenie, 2 - węzły).
![Numatop](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_numatop.png)
Numatop
![top w trybie węzłów NUMA](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_top_numa_mode.png)
top w trybie węzłów NUMA
Komputery wieloprocesorowe dla zwykłych śmiertelników, graczy i twórców treści
Obecne generacje maszyn roboczych i serwerów z wieloma procesorami są drogie, to jest segment premium. Starsze generacje nie oferują już zadowalającej wydajności i praktycznie nie są już stosowane przez ten segment rynku. Stare serwery i maszyny robocze można kupić na Allegro, czy ebay za niewielkie pieniądze. Dwa 6-rdzeniowe procesory za 200-400 zł, płyta główna za 300-400zł i podstawa gotowa. Do tego używana tania serwerowa pamięć DDR3, dysk SATA i możemy stawiać pierwsze kroki z wieloprocesorową maszyną na podstawce LGA 1366 sprzed około ośmiu lat. Za bardziej nowocześniejszą LGA 2011 zapłacimy już więcej, np. 2000 - 2500 zł na Aliexpress za gotowy zestaw 2 x 8 rdzeni, RAM, płyta główna.
Zanim procesory o większej niż cztery ilości rdzeni stały się bardziej dostępne wielu amatorów podchodzących do YouTuba bardziej poważnie używała właśnie takich starszych stacji roboczych do przetwarzania wideo. Mimo iż nie oferowały najlepszej wydajności nadal była ona lepsza od jednego czterordzeniowego procesora.
Poniżej zaprezentuję trzy płyty główne z podstawką LGA 1366 dla procesorów Intel Xeon serii 5500 i 5600 (głównie Westmere), które testowałem. Na rynku wtórnym jest ich znacznie więcej i niekoniecznie trzeba szukać dokładnie tych modeli. To co koniecznie trzeba uwzględnić to przeznaczenie danej płyty głównej - wiele płyt serwerowych ma nietypowy kształt i nie jest kompatybilna ze zwykłymi zasilaczami ATX. Płyt z prostszych
serwerów i stacji roboczych powinny być już w bardziej standardowym formacie ATX lub eATX i powinny być kompatybilne z zasilaczami ATX - choć te będą musiały być dość potężne (zazwyczaj 1000W+ jest zalecane) i posiadać dwa złącza 8-pin na zasilanie CPU (coś co mają tylko wybrane). Sprawdź zdjęcie płyty głównej - czy widzisz złącza ATX, czy są one standardowe, znajdź dokumentację płyty głównej - jakie procesory dokładnie obsługuje, jaki typ pamięci i o jakim napięciu. Sprzęt serwerowy i stacji roboczych jest znacznie bardziej wybredny.
Rodzina procesorów Westmere Intela pozwala uzyskać 2 x 6 rdzeni. Oferta AMD z tamtego czasu 4 x 16 rdzeni Opteronów na podstawce G34. Niestety na rynku wtórnym jest bardzo mało płyt z tą podstawką w niskiej cenie, a same procesory, mimo iż kuszą - mają słabą wydajność jednego rdzenia i w znaczącej większości modeli - niskie częstotliwości taktowania rdzenia. Zaleta tylko w ich ilości.
Wydajność i kompatybilność
6-rdzeniowe Xeony serii 5600 Westmere to procesory bliźniacze do Sandy i Ivy Bridge. Na obecne czasy wydajność jednego rdzenia tych procesorów nie będzie imponująca - ale siła leży w ich ilości. Dodatkowo platforma ta nie posiada obsługi SATA III więc dyski SATA III będą działały wolniej - według limitów SATA II. Można dodać kontroler PCIe z SATA III lub NVMe, choć w przypadków NVMe nie ma opcji uruchamiania systemu - musi to nastąpić z dysku SATA.
![Adapter NVMe](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_xeon_nvme.jpg)
Adapter NVMe pozwala podłączyć dysk NVMe ale nie pozwala z niego bootować
Gry nie są w stanie skorzystać z zalet architektury NUMA, potencjalnie nawet mogą nie działać poprawnie. Należy też zwrócić uwagę na zegar procesora. Wiele Xeonów ma dość niskie zegary i takie procesory wypadną naprawdę słabo w zadaniach wymagających wysokiej wydajności jednego rdzenia, czy procesora. Raczej należy wybierać procesory z zegarem powyżej 3 GHz.
![Dłuższa karta graficzna nie wejdzie](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_big_gpu_wont_fit.jpg)
Dłuższa karta graficzna nie wejdzie
Na takim systemie możemy zainstalować raczej dowolną 64-bitową dystrybucję Linuksa lub także (choć nie oficjalnie) Windowsa 10. Dla obsługi wielu procesorów będziemy potrzebować wersji Pro. Oprócz tego potrzebna będzie karta graficzna - a te raczej powinny być krótkie, gdyż wiele komponentów na płycie głównej może wejść w konflikt ze standardowymi długimi kartami graficznymi (R9 Nano, Zotac GTX 1080 Ti Mini i temu podobne powinny mieścić się bez problemu). Obudowa powinna obsługiwać format naszej płyty głównej - ATX, eATX lub coś podobnego (modyfikacje mogą oznaczać się konieczne), a zasilacz musi mieć dwa złącza 8-pin CPU (nie mylić z 8-pin PCIe) oraz mieć dość sporą moc znamionową.
Jeżeli kupujemy gotowy zestaw może on przyjść z serwerowym chłodzeniem. Jeżeli ma wiatraki - będą bardzo głośne, a jeżeli tylko duże radiatory - oczekują serwerowej obudowy ze specjalnymi wiatrakami. Tego typu rozwiązania najlepiej zastąpić konsumenckimi układami chłodzenia dla 1366 - np. proste wieże. Raczej odradzam używanie całego serwera w obudowie rackowej - układ chłodzenia jest ekstremalnie głośny.
![Konsumencki układ chłodzenia na płycie serwerowej](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_aftermarket_cooler.jpg)
Konsumencki układ chłodzenia na płycie serwerowej
Gigabyte GA-7TESH2-RH
Płyta główna ze stacji roboczej Acera wyposażona w dwa czterordzeniowe procesory X5550. Oficjalnie nie obsługuje sześciordzeniowych procesorów Westmere serii 5600. Ta płyta działała bez problemów, choć szkoda braku obsługi nowszych procesorów.
- Userbenchmark 2 x X5550: Game 39%, Desk 49%, Work 49%
- 3DMark Time Spy 2 x X5550: 2 595 (2 408 GPU, 4 648 CPU)
- 3DMark PCMark 10 2 x X5550: 3 446
- Passmark 2 x X5550: 3 183
- CPU-Z 2 x X5550: 2722 (MT)
- Phoronix Linux benchmarks 2 x X5550 część 1
- Phoronix Linux benchmarks 2 x X5550 cześć 2
![Gigabyte GA-7TESH2-RH](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_gigabyte.jpg)
![Gigabyte GA-7TESH2-RH FLIR](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_gigabyte_flir.jpg)
![Gigabyte GA-7TESH2-RH FLIR](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_gigabyte_flir2.jpg)
Zdjęcie termiczne Gigabyte GA-7TESH2-RH
Supermicro X8DTE-F
Płyta serwerowa pod procesory 5500 i 5600. Sztuka, którą testowałem działała z procesorem serii 5500, ale nie chciała uruchomić się w żadnej konfiguracji z procesorem serii 5600. Aktualizacja BIOSu (była dość wczesna wersja), która trzeba wykonać pod DOSem (FreeDOS) nie pomogła mimo iż ta płyta główna powinna obsługiwać wspomniane procesory.
- Userbenchmark 1x L5520: Game 28%, Desk 32%, Work 24%
- Passmark 1 x L5520: 1 928
- 3DMark Time Spy 1 x L5520: 2 212 (2 387 GPU, 1 566 CPU)
- CPU-Z 1 x L5520: 825 (MT)
![Aktualizacja BIOSu pod FreeDOSem](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_supermicro_bios_update.jpg)
Aktualizacja BIOSu pod FreeDOSem
![Zamknięte i otwarte sloty x6 PCIe](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_supermicro_x6_pcie_slots.jpg)
Zamknięte i otwarte sloty x6 PCIe
Fujitsu D2618-C14 (Celsius R670)
Płyta ze stacji roboczej. Mimo niestandardowego złącza dodatkowego zasila CPU działa ze zwykłym zasilaczem ATX i obsługuje dwa 6-rdzeniowe procesory serii 5600. Proces bootowania jest dość długi.
![Superposition Benchmark - dwa procesory](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_superposition_x5675_dual.jpg)
Superposition Benchmark - dwa procesory
![Superposition Benchmark - jeden procesor](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_superposition_x5675_single.jpg)
Superposition Benchmark - jeden procesor
![Cinebench R15 - dwa procesory](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_x5675_dual_cpu.png)
Cinebench R15 - dwa procesory
![Cinebench R15 - jeden procesor](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_x5676_single_cpu.png)
Cinebench R15 - jeden procesor
- Userbenchmark 2 x X5675: Game 41%, Desk 55%, Work 65%
- Userbenchmark 1 x X5675: Game 39%, Desk 48%, Work 42%
- CPU-Z 2 x X5675: 4380 (MT)
- 3DMark Time Spy 2 x X5675: 2 639 (2 390 GPU, 6 459 CPU)
- 3DMark Time Spy 1 x X5675: 2 524 (2 385 GPU, 3 774 CPU)
![Fujitsu D2618-C14](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_fujitsu.jpg)
![Fujitsu D2618-C14](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_fujitsu2.jpg)
![Fujitsu D2618-C14](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_fujitsu_boot.jpg)
Brak wiatraka
![Fujitsu D2618-C14 niestandardowe złącze](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_fujitsu_custom_plug.jpg)
Fujitsu D2618-C14 niestandardowe złącze
Porównania wydajności
![Wielordzeniowa wydajność dwóch Xeonów X5675](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_cpu-z-dual-xeon.png)
Wielordzeniowa wydajność dwóch Xeonów X5675 nadal jest w miarę wysoka kosztem zużycia energii elektrycznej i skomplikowania systemu
![Blender, CPU benchmark](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_blender_cpu.png)
Blender, CPU benchmark
![Temperatury procesorów w trakcie testu](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_blender_cpu_temp.png)
Temperatury procesorów w trakcie testu
![Blender, CPU benchmark](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_blender_cpu2.png)
Blender, CPU benchmark
![Blender, CUDA benchmark](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_blender_cuda2.png)
Blender, CUDA benchmark
![Blender, OpenCL benchmark](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_blender_opencl2.png)
Blender, OpenCL benchmark
![Unigine Heaven benchmark](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_unigine_heaven_linux.png)
Unigine Heaven - wszystkie procesory radzą sobie z 1050 Ti
![Unigine Valley benchmark](https://rk.edu.pl/site_media/resources/hardware.rk.edu.pl/images/thumb_dual_unigine_valley_linux.png)
Unigine Valley - Xeony nieco w tyle
Podsumowanie
Sprzęt serwerowy z okolic roku 2011 nie zachwyca osiągami w porównaniu do współczesnych procesorów. Co prawda są gdzieniegdzie przebłyski przyzwoitych wyników niemniej podstawka LGA 1366 odchodzi w zapomnienie. Jeżeli chcesz poeksperymentować z klasyczną architekturą NUMA to taki system nadal może być użyteczny. Niektóre zadania skalujące na wiele rdzeni i procesorów nadal można im zlecać - o ile zużycie energii elektrycznej nie jest kluczowym parametrem. Nowsze LGA 2011, czy po prostu 8-12 (a może i zaraz 16 rdzeniowe) współczesne procesory nie są aż tak drogie i z punktu widzenia czystych osiągów i kompatybilności będą po prostu lepsze.
Gry niczego nie zyskują, a moga nawet tracić na słabej dość wydajności jednego rdzenia LGA 1366. Jedyna zaleta to możliwość rozproszenia gry, nagrywania i innych zadań pomiędzy procesory i rdzenie.
Comment article