Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-03-04 16:02:14

  Gryzon - Użytkownik

Gryzon
Użytkownik
Skąd: Trójmiasto
Zarejestrowany: 2007-06-23

Na jakim jądrze działa proces

Witam serdecznie,

mam dwa pytanie, dział Kernel wydaje mi się być najbardziej trafnym

1. czy jest szansa aby sprawdzić na którzy jądrze procesora działa dany proces? Jeżeli tak to w jaki sposób, jakich narzędzi użyć.
2. Jak najlepiej rozwiązać sprawę żąglowania procesami między jądrami. Wydaje mi się że właśnie ten moment powoduje u mnie problemy. Zastanawiam się w jaki sposób można statycznie definiować na którym jądrze ma działać dany proces.

Z góry bardzo dziękuje za wszelką pomoc.


"Nie ma rzeczy niemożliwych, są tylko takie, których człowiek nie nauczył się jeszcze robić"
A. Einstein

Offline

 

#2  2009-03-05 00:03:06

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Na jakim jądrze działa proces

wyswietlenie numeru procesora (rdzenie sa dal systemu widziane jako procesory) do ktorego jest przypisane i na ktorym sie wykonuje zadanie:

Kod:

ps -A -O psr,sgi_p

zobacz takze

Kod:

man 2 getcpu
man 3 sched_getcpu

"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#3  2009-03-05 10:52:52

  Gryzon - Użytkownik

Gryzon
Użytkownik
Skąd: Trójmiasto
Zarejestrowany: 2007-06-23

Re: Na jakim jądrze działa proces

Dziękuje bercik za odpowiedź, teraz już wiem jak odczytywać te informacje.

Niestety kernel przeżuca mi proces między procesorami jak szalony, a nie jest to dla mnie porządana sytuacja.

Chciałbym tak zmodyfikować kernel lub zrobić "coś" aby uruchomiony proces siedział od początku na jednym procesorze i aby nie ulegało to zmianie.

Z góry bardzo dziękuje za okazaną pomoc.


"Nie ma rzeczy niemożliwych, są tylko takie, których człowiek nie nauczył się jeszcze robić"
A. Einstein

Offline

 

#4  2009-03-05 13:48:16

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Na jakim jądrze działa proces

nie wiem czy jest jakis programik ktory to zalatwia, ale jest funkcja systemowa [tt]sched_setaffinity[/tt] (wiecej szczegulow w man) ... mozesz jej uzyc w swoim programie lub napisac jakiegos wrapperka co ja wykona i zrobi exec na wskazy program ... poczytaj tez podowiazywane strony man (np. o cpuset)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#5  2009-03-05 15:05:01

  Gryzon - Użytkownik

Gryzon
Użytkownik
Skąd: Trójmiasto
Zarejestrowany: 2007-06-23

Re: Na jakim jądrze działa proces

Troche inaczej sprawa teraz wygląda, niestety ustawienie procesu na odpowiednim rdzeniu nie do końca rozwiązuje mój problem.

Chciałem zmienić w pliku jądra kernel/sched.c następujące parametry:

#define MIN_TIMESLICE           (10000 * HZ / 1000)
#define MAX_TIMESLICE           (30000 * HZ / 1000)

#define DEF_TIMESLICE           (100 * HZ / 1000)

według informacji które wyczytałem w takiej konfiguracji schedule`r powinien żadziej "żąglować" procesami, niestety po kompilacji nadaj procesu latają jak szalone między procesorami. Możliwe że pozostawienie wartości DEF_TIMESLICE na domyślnej jest  problemem, za chwilę będe to testował.

Ale chętnie bym poznał opinię i wskazówki innych.


"Nie ma rzeczy niemożliwych, są tylko takie, których człowiek nie nauczył się jeszcze robić"
A. Einstein

Offline

 

#6  2009-03-05 15:09:37

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Na jakim jądrze działa proces

moze opisz dokladnie na czym polega ten problem - co to za proces jakie nieprawidlowe dzialanie jest spowodowane tym rzaglowaniem, i dlaczego ustawienie na odpowiednim rdzeniu nie rozwiazuje problemu (a wlasciwie jaki jest ten problem) ... bo na takim poziomie ogolnosci to trudno o jakies rady praktyczne jak zwalczyc ten problem ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#7  2009-03-05 15:32:37

  Gryzon - Użytkownik

Gryzon
Użytkownik
Skąd: Trójmiasto
Zarejestrowany: 2007-06-23

Re: Na jakim jądrze działa proces

Więc tak, dokładnie to chodzi o serwery gier.

W momencie gdy proces jest przerzucany miedzy procesorami, na serwerze gry pojawiają się skoki pingów, co nie jest lubiane przez graczy.

Chciałbym zmniejszyć częstotliwość tych przełączeń aby te skoki były rzadsze, dlatego próbowałem zmieniać parametry w kernel/sched.c

Niestety uruchomienie na konkretnym rdzeniu nie jest rozwiązaniem ponieważ musiał bym sam pilnować obciążenia procesorów, a przy ilości procesów liczonych w dziesiątkach nie bardzo jest to możliwe.

Pisanie programów do zarządzania też mija się z celem bo musiał bym napisać nowego scheduler`a, a po co skoro jeden już jest w kernelu.


"Nie ma rzeczy niemożliwych, są tylko takie, których człowiek nie nauczył się jeszcze robić"
A. Einstein

Offline

 

#8  2009-03-05 15:36:01

  lis6502 - Łowca lamerów

lis6502
Łowca lamerów
Skąd: Stalinogród
Zarejestrowany: 2008-12-04

Re: Na jakim jądrze działa proces

Nie jestem jakoś przekonany że akurat 'moment przerzucania' ma jakikolwiek wpływ na wydajność samego programu. Po to mamy kernel by nie musieć się martwić o takie rzeczy. Spróbuj zmniejszyć priorytet programowi gry, a najlepiej opisz co tam jeszcze chodzi na tym serwerze (jakiś apacz, ftp?)

Offline

 

#9  2009-03-05 15:39:57

  Gryzon - Użytkownik

Gryzon
Użytkownik
Skąd: Trójmiasto
Zarejestrowany: 2007-06-23

Re: Na jakim jądrze działa proces

Niestety gracze są bardzo marudnymi stworzeniami i skoki pingów o wartość kilku ms, jest dla nich już wielkim problemem.
Chodź nie zaobserwowałem aby miało to jakiś wpływ na samą gre, ale moje zdanie jest nie ważne.

Jestem niemal pewny że ma to związek z przerzucaniem między procesorami, jest to oparte na wielu obserwacjach.

Oprócz serwerów gier działa tam httpd oraz proftpd


"Nie ma rzeczy niemożliwych, są tylko takie, których człowiek nie nauczył się jeszcze robić"
A. Einstein

Offline

 

#10  2009-03-05 15:46:36

  lis6502 - Łowca lamerów

lis6502
Łowca lamerów
Skąd: Stalinogród
Zarejestrowany: 2008-12-04

Re: Na jakim jądrze działa proces

Wiem jacy są gracze bo ja umiem o 23 zadzwonić do isp narzekając na pingi powyżej 300 xD. Gdyby na prawdę rozdzielanie obciążenia między rdzenie miało obniżać wydajność danego programu, to jaki sens byłby kupować nrdzeniowe procesory? Z doświadczenia na kimsufich wiem ,że demon ftp potrafi zeżrzeć 100% cpu, wszystko zależy od prędkości i liczby połączeń. Zaloguj się tam na roota, odpal top'a, zmień odświeżanie (przycisk 's') na jakieś krótsze, np 0.2 s i popatrz co oprócz procesu gry ma taki apetyt na moc. jest jeszcze program [b]htop[/b], tylko że on pokazuje obciążenia poszczególnych rdzeni.

Offline

 

#11  2009-03-05 15:47:11

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Na jakim jądrze działa proces

nie napisales tez dlaczego sched_setaffinity nie rozwiazuje problemu skoro jest nim przerzucanie pomiedzy CPU

jezeli zwykle niceowanie takiego procesu nie pomaga moze sproboj dac mu priorytet czasu rzeczywistego ... w zasadzie jezeli nie jest to proces wielowatkowy to mozesz mu okreslic jedno CPU i jakis wysoki priorytet RT ... o priorytetach RT masz w http://www.opcode.eu.org/c_cpp/priorytety.c/


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#12  2009-03-05 15:53:37

  Gryzon - Użytkownik

Gryzon
Użytkownik
Skąd: Trójmiasto
Zarejestrowany: 2007-06-23

Re: Na jakim jądrze działa proces

kimsufich :) Nie przepadam :)

Co do zakupu wielordzeniowych procesorów to oczywiście jest sens, jeżeli uruchamiane aplikacje obsługują wiele procesorów, niestety serwery niektórych gier mają już po kilka lat i nie były pisane i kompilowane pod wiele procesorów.

Dziekuje za lekcie obsługi top`a, ale sprawdzanie za pomocą tego narzędzia mam już za sobą. :)
Daemon`y oczywiście potrafią zajmować 100% rdzenia, ale nie ma to tutaj żadnego znaczenia.

W temacie nie chodzi o zbyt duże obciążenie maszyn, ale o to aby kernel rzadziej dokonywał przełączeń między rdzeniami. Dokładnie chodzi o zwiększenie kwantu czasu jaki schedul`er daje wątkowi.

BTW. top też może pokazywać obciążenia poszczególnych rdzeni :)


"Nie ma rzeczy niemożliwych, są tylko takie, których człowiek nie nauczył się jeszcze robić"
A. Einstein

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00145 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.135.204.43' WHERE u.id=1
0.00063 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.135.204.43', 1732301856)
0.00046 SELECT * FROM punbb_online WHERE logged<1732301556
0.00046 SELECT topic_id FROM punbb_posts WHERE id=112909
0.00004 SELECT id FROM punbb_posts WHERE topic_id=13609 ORDER BY posted
0.00030 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=13609 AND t.moved_to IS NULL
0.00026 SELECT search_for, replace_with FROM punbb_censoring
0.00145 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=13609 ORDER BY p.id LIMIT 0,25
0.00118 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=13609
Total query time: 0.00636 s