Ręczne wspomaganie planisty

Wpis dotyczy sztuczki, która może przydać się użytkownikom wieloprocesorowych komputerów pracujących pod kontrolą systemu Windows (oczywiście jest to możliwe również w systemach uniksowych, ale nie zajmowałem się tym).

Planista jest częścią jądra systemu operacyjnego, która odpowiada za rozplanowanie w czasie przydziału wykonujących się programów do procesora. Nie zagłębiając się w szczegóły techniczne, warto wiedzieć że we współczesnych komputerach w ciągu jednej sekundy takie przełączenia pomiędzy jednym wykonywanym programem a kolejnym liczy się w setkach albo nawet tysiącach. W tej tematyce szczególnie polecam dwie bardzo dobre książki: Uresh Vahalia “Jądro systemu Unix” oraz Abraham Silberschatz “Podstawy Systemów Operacyjnych

Również bez zagłębiania się w szczegóły techniczne, w miarę intuicyjne i oczywiste jest to, że jeżeli posiadamy komputer z wielordzeniowym procesorem to różne programy mogą wykonywać się równolegle. Jeżeli program obsługuje wielordzeniowy procesor (program jest wielowątkowy) to na takiej maszynie będzie wykonywał się tyle razy szybciej ile procesor ma rdzeni. Obserwując użycie procesora w komputerze z procesorem wielordzeniowym widać, że ten sam program może być wykonywany na wielu rdzeniach nawet jeśli nie jest wielowątkowy. Obciążenie rozkłada się wtedy równomiernie i sumaryczne obciążenie wszystkich rdzeni jest odwrotnie proporcjonalne do liczby rdzeni.

Pomysł z równomiernym rozkładaniem obciążenia z całą pewnością jest sensowny i nie mam zamiaru wnikać w techniczne powody dlaczego tak to zostało zrobione. Niemniej jednak zauważyłem, że zdarzają się sytuacje, gdy ta równomierność może być uciążliwa. W sytuacji, gdy wykonujemy jakąś intensywnie obliczeniowo aplikację typu kodowanie filmu, muzyki, zdjęć przez dłuższy czas i jednocześnie chcemy np. korzystać z przeglądarki internetowej to widać, że działa ona znacznie wolniej ponieważ “dzieli” procesor z “żarłoczną” aplikacją do kodowania. W takiej sytuacji warto zmusić system operacyjny, aby konkretna aplikacja wykonywała się tylko na konkretnym jednym rdzeniu procesora. Dzięki temu chociaż nasze kodowanie potrwa dłużej (ale zazwyczaj nie ma dla nas znaczenia czy jest to 10 czy 15 minut), ale znacznie polepszy się responsywność tej drugiej aplikacji na której chcemy działać cały czas - np. przeglądarki internetowej. Z obserwacji widzę, że działa ona mniej więcej tak sprawnie jakby w tle nie wykonywała się żadna intensywna operacja typu kodowanie. W systemie Windows takiego przydziału programu do rdzenia procesora dokonuje się np. przy użyciu darmowego narzędzia firmy Sysinternals (która jest obecnie częścią Microsoftu) - Proces Explorer’a. Klikamy prawym przyciskiem myszki na proces (proces - to wykonujący się program) i wybieramy opcję ‘Set affinity’. Moim zdaniem warto poeksperymentować z przydzielaniem procesów tylko do pojedynczych rdzeni - można uzyskać ciekawe zwiększenie responsywności systemu podczas wykonywania wielu różnych nietypowych programów.

PS1. Warto wiedzieć, że Sysinternals udostępnia wszystkie swoje narzędzia w postaci współdzielonego folderu przez protokół SMB pod adresem live.sysinternals.com - należy wpisać ten adres w polu ‘adres’ dowolnego okna eksploratora Windows lub w poleceniu Start/Uruchom.

PS2. Chcąc zautomatyzować uruchamianie programu tylko na konkretnym rdzeniu można użyć darmowego konsolowego narzędzia RunFirst, które uruchamia wskazany program zawsze na pierwszym rdzeniu procesora.

Hello World :)

Witam na moim blogu technicznym poświęconym głównie tematyce związanej z informatyką oraz użytkowymi aspektami komputerów i Internetu. Jako „użytkowe aspekty” rozumiem takie, które są sprytne i prowadzą do tego, że różne czynności możemy wykonać szybciej i prościej czyli po prostu ułatwić sobie życie - bo właśnie do tego moim zdaniem powinny służyć komputery. Ponieważ zdaję sobie sprawę, że blogów o tematyce IT jest już sporo, przy tworzeniu wpisów będę starał się uwzględniać:

  • Aby treść wpisu nie była powieleniem żadnego newsa znalezionego na innym blogu (sam nie lubię gdy w kilku serwisach czytam dokładnie o tym samym) - nie mam zamiaru zajmować się śledzeniem newsów - od tego są inne blogi i serwisy (np. osnews.pl) którym całkiem nieźle to wychodzi.
  • Aby treść wpisu była oryginalna - w ten sposób że na opisywany pomysł wpadłem sam i pochodzi on ode mnie, a jeżeli nawet podobne rozwiązania już istnieją to moje w znaczący sposób się od nich różni
  • Aby wpisy nie były trywialne - nie będę opisywać faktu, że pojawiła się kolejna wersja systemu Windows, albo że dodano nową funkcję GMail’a z Google Labs.
  • Nie wykluczam również od czasu do czasu jakichś własnych komentarzy czy przemyśleń Uśmiech

Blog kieruję do średniozaawansowanych użytkowników, choć zawsze będę starał się opisywać różne rzeczy tak, aby Ci mniej zaawansowani ale ambitni i kreatywni również skorzystali z moich pomysłów.