Posty bez odpowiedzi | Aktywne tematy Dzisiaj jest wt 22 paź 2019, 21:49



Odpowiedz w temacie  [ Posty: 2 ] 
Wiele rdzeni vs starsze gry 
Autor Wiadomość

Rejestracja: czw 29 lip 2010, 13:45
Posty: 3
Lokalizacja: 41-600
Odpowiedz z cytatem
Post Wiele rdzeni vs starsze gry
Zasadniczo, jeśli wasz system operacyjny potrafi obsługiwać wiele procesorów (lub procesory wielordzeniowe), każda aplikacja na tym systemie jest uruchamiana w trybie wielu procesorów/rdzeni. Właśnie to bywa przyczyną dziwnego zachowania niektórych gier lub programów. Dla starszych aplikacji konieczne jest zatem kontrolowanie ustawienia koligacji procesorów. Koligacja to nic innego jak zmiana przyporządkowanego procesora/rdzenia do konkretnego procesu lub wątku. W naszym przypadku konieczne jest uruchomienie aplikacji tylko na jednym rdzeniu/procesorze, gdyż do takiego trybu starsze aplikacje są przystosowane. Koligację można ustawić ręcznie dla każdego uruchomionego procesu w menedżerze zadań (klikając interesującą pozycję na karcie procesu prawym przyciskiem -> ustaw koligację...). Jest to ustalenie jednorazowe, tylko dla tej konkretnej instancji programu, co zmusza do powtarzania tej czynności przy każdym uruchomieniu. Dodatkowo, ten sposób nie sprawdzi się w przypadku aplikacji wysypujących się zaraz na starcie, nie dających nawet szansy na dostanie się do menedżera zadań w czasie ich pracy. Istnieją na rynku narzędzia służące do zarządzania zasobami procesora w przypadku starszych aplikacji. Zazwyczaj mają postać usług lub programów działających w tle i uruchamianych wraz z systemem. Dla procesorów AMD jest to AMD Dual-Core Optimizer (Śmig!). Niestety, nie we wszystkich przypadkach narzędzia te spisują się dobrze (przykładem może być Black Dahlia, która mimo użycia dual-core optimizera wiesza się i wysypuje).

Aby temu zaradzić można użyć Windows NT Image Configuration Utility (Plask!). Narzędzie stworzone przez microsoft, a dostarczone wraz z 'Windows 2000 Server Resource Kit Supplement One'. Pozwala m.in. TRWALE ustalić koligację procesorów (lub rdzeni) dla określonej aplikacji. Trwałość tego przypisania polega na modyfikacji nagłówka wybranego pliku wykonywalnego i zapisaniu w nim informacji odnośnie przydziału zasobów procesora. Należy zatem przed edycją opornej aplikacji sporządzić jej kopię zapasową, gdyż proces nie jest odwracalny (tzn. nie da się wymazać przypisania poprzez program). Jest to o tyle istotne, że po takiej modyfikacji aplikacja może nie zostać rozpoznana przez różne oficjalne patche (rozmiar i zawartość pliku często muszą się zgadzać co do bajtu), które przez to mogą odmówić dalszych czynności patchujących ;).

Plik 'imagecfg.exe' dla wygody należałoby zapisać w folderze 'C:\windows\system32' umożliwiając korzystanie z niego w każdym folderze, nadając mu rangę polecenia systemowego. Składnia polecenia jest następująca:

Kod:
imagecfg -a 0x1 c:\program.exe

Wywołanie programu nastąpiło z parametrem '-a', który służy do ustalenia koligacji (a, od affinity). Argumentem jest 0x1, co oznacza pierwszy rdzeń (lub pierwszy fizyczny procesor). Analogicznie 0x2 oznaczałoby drugi itd. Na końcu podajemy tylko ścieżkę do problematycznego programu i po zabawie - aplikacja od tej pory będzie korzystać tylko z jednego rdzenia. Plik w takiej postaci można potem zarchiwizować, uznając go w pewnym sensie za spatchowany i zapisać gdzies na cd lub poratować nim kolegę z wyrwanymi włosami. Zasadniczo, koniec tematu.

Jeszcze garść informacji odnośnie działania programu. Imagecfg.exe został zaprojektowany dla starszych aplikacji, sprzed epoki wielordzeniowości. Muszą być to jednak aplikacje typu win32. Dosowe lub zaprojektowane dla windows 3.11. nie są obsługiwane przez program. Przy próbie użycia go na takowych otrzymacie komunikat:

Cytuj:
IMAGECFG: unable to modify DOS or Windows image file - program.exe

Dla plików dosowych, systemy operacyjne rodziny Windows NT (czyli od Windows 2000 wzwyż) zostały zaopatrzone w aplikację ntvdm.exe (NT Virtual Dos Machine, zlokalizowaną w c:\windows\system32), służącą do emulacji systemu MS-DOS na potrzeby starszych aplikacji. Ntdvm.exe uruchamiane jest zawsze, gdy pojawia się wywołanie dosowej aplikacji i wówczas również może się pojawiać problem obsługi wielu rdzeni/procesorów. Tutaj sprawa jest jeszcze prostsza - jako,że nie da się użyć imagecfg na dosowym programie, należy ustawić koligację dla ntvdm.exe (kopia zapasowa, żeby nie było płaczu). Wtedy każda uruchamiana przez ntvdm.exe aplikacja będzie od razu korzystać z jednego tylko rdzenia/procesora. Czyli:

Kod:
imagecfg -a 0x1 C:\WINDOWS\system32\ntvdm.exe

I starsze aplikacje mamy również załatwione. Inna sprawa - dla dosowych aplikacji polecam dosboxa (Łubudu!), dla którego problem wielordzeniowości nie istnieje.

Przy pierwszym użyciu na danej aplikacji, program imagecfg.exe zwróci komunikat (no chyba, że nie uruchamiacie go z wiersza poleceń - wtedy nie zdążycie zobaczyć co zwróci, bo mignie i zniknie):

Cytuj:
program.exe contains no configuration information
program.exe contains a Subsystem Version of 4.0
program.exe updated with the following configuration information:
Process Affinity Mask: 00000001

Oznacza to, że aplikacja wcześniej nie była modyfikowana pod tym kątem (nie zawiera danych konfiguracyjnych) oraz, że zauktualizowano dane konfiguracyjne i od tej pory koligacja została ustawiona na pierwszy rdzeń/procesor. Jest też informacja, że podsystem jest w wersji 4.0, cokolwiek to znaczy...

Po użyciu na tym samym pliku polecenia:

Kod:
imagecfg -a 0x2 c:\program.exe

dostaniemy następujący komunikat:

Cytuj:
program.exe contains the following configuration information:
Process Affinity Mask: 00000001
program.exe contains a Subsystem Version of 4.0
program.exe updated with the following configuration information:
Process Affinity Mask: 00000002

To z kolei, oznacza, że dla aplikacji ustalono wcześniej koligację na pierwszy rdzeń oraz, że po aktualizacji zmieniono ją na drugi. Tu znów pojawia się tajemnicza informacja o wersji podsystemu, która wprowadza nieco intrygi w całą sprawę.

Należałoby jeszcze dodać, że oprócz rozwiązywania problemu wielordzeniowości/wieloprocesorowości w starszych aplikacjach, program Imagecfg jest remedium także na intelowską technologię Hyper-Threading (źródło). Jak widać, to małe cacko jest bardzo wszechstronne. Na dowód podam znów przykład Black Dahlii, dla uruchomienia której użycie imagecfg.exe jest kluczowe..., ale odpaleniu tej gry należałoby poświęcić osobny temat.


pn 02 sie 2010, 00:48
Zgłoś ten post
Wyświetl profil
Awatar użytkownika

Rejestracja: pt 18 lut 2005, 19:52
Posty: 2349
Lokalizacja: Schwientochlowitz
Odpowiedz z cytatem
Post 
No tego się nie spodziewałem (prawie mi goosebumps po plecach przeszła z wrażenia ;)). Aż żałuję, że nie mam w tej chwili problemów z odpaleniem jakieś starszej przygodówki. Taki poradnik nie powinien się marnować. :)

A tak przy okazji, trochę odbiegając od tematu. Miło zobaczyć na forum jeszcze jednego Świętochłowiczanina. 8)


pn 02 sie 2010, 21:09
Zgłoś ten post
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 2 ] 

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości


Możesz tworzyć nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów

Szukaj:
Przejdź do:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.