RkBlog

Hardware, programming and astronomy tutorials and reviews.

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

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

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

Topologia systemu z jednym czterordzeniowym procesorem

Topologia dwóch czterordzeniowych procesorów

Topologia dwóch czterordzeniowych procesorów

Topologia dwóch sześciordzeniowych procesorów

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

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:

MS Windows obciążenie procesora w trybie węzłów NUMA

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

Numatop

top w trybie węzłów NUMA

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

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

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

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.

Gigabyte GA-7TESH2-RH
Gigabyte GA-7TESH2-RH FLIR
Gigabyte GA-7TESH2-RH FLIR

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.

Aktualizacja BIOSu pod FreeDOSem

Aktualizacja BIOSu pod FreeDOSem

Zamknięte i otwarte sloty x6 PCIe

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

Superposition Benchmark - dwa procesory

Superposition Benchmark - jeden procesor

Superposition Benchmark - jeden procesor

Cinebench R15 - dwa procesory

Cinebench R15 - dwa procesory

Cinebench R15 - jeden procesor

Cinebench R15 - jeden procesor

Fujitsu D2618-C14
Fujitsu D2618-C14
Fujitsu D2618-C14

Brak wiatraka

Fujitsu D2618-C14 niestandardowe złącze

Fujitsu D2618-C14 niestandardowe złącze

Porównania wydajności

Wielordzeniowa wydajność dwóch Xeonów X5675

Wielordzeniowa wydajność dwóch Xeonów X5675 nadal jest w miarę wysoka kosztem zużycia energii elektrycznej i skomplikowania systemu

Blender, CPU benchmark

Blender, CPU benchmark

Temperatury procesorów w trakcie testu

Temperatury procesorów w trakcie testu

Blender, CPU benchmark

Blender, CPU benchmark

Blender, CUDA benchmark

Blender, CUDA benchmark

Blender, OpenCL benchmark

Blender, OpenCL benchmark

Unigine Heaven benchmark

Unigine Heaven - wszystkie procesory radzą sobie z 1050 Ti

Unigine Valley benchmark

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.

RkBlog

Komputery PC, 3 January 2019, Piotr Maliński

Comment article