Autor Wątek: wykrywanie liczby rdzeni cpu  (Przeczytany 4322 razy)

mangado

  • Nowy u
  • *
  • Wiadomości: 19
    • Zobacz profil
wykrywanie liczby rdzeni cpu
« dnia: Listopad 30, 2011, 23:16:56 »
Panowie i panie mam problem!
Problem pojawił się przy testach mojego "OS-a" na żywym intel core i3.
Otóż w tabelkach MP były dwa wpisy z danymi o CPU czyli podług tego komp ma 2 proce...
W tabelkach ACPI są już 4 wpisy o CPU!!!
Trampolina uruchamia 3 AP-y! Czyli BSP+ 3xAP = 4 proce!
Okazało sie też, że i3 ma jednak dwa rdzenie ale są one Hyper Threading czyli w tym wypadku po dwa "logiczne" procesory na jeden rdzeń czyli 4 logiczne proce!
Lepiej i7 ma chyba nawet po 4 logiczne proce na rdzeń!

To jak w końcu to wykrywać? Jakiś "canonical" algorytm?

Tu warto by było się orientować jaka para lapic id-ów przypada na każdy rdzeń!

Ale jak to zrobić?


Nevar

  • Administrator
  • Nowy u
  • *****
  • Wiadomości: 24
    • Zobacz profil
Odp: wykrywanie liczby rdzeni cpu
« Odpowiedź #1 dnia: Grudzień 08, 2011, 20:14:35 »
Wcześniej w swoim systemie też szukałem po tablicy MP ile mam procesorów itp. Doszedłem jednak do wniosku, że to nie ma za bardzo znaczenia. Teraz po prostu inicjuje system i budzę wszystkie procesory na raz. W miarę ich wstawania przypisuje im kolejno numer i zapisuje ich ID gdzieś tam w systemie. Nie interesuje mnie czy to logiczny czy fizyczny czy co tam jeszcze jest. Z mojego punktu widzenia ważne jest właściwie to, że może on wykonywać równolegle instrukcje.
Nie wiem czy ważne jest żeby przed startem systemu wiedzieć ile masz procesorów.

mangado

  • Nowy u
  • *
  • Wiadomości: 19
    • Zobacz profil
Odp: wykrywanie liczby rdzeni cpu
« Odpowiedź #2 dnia: Grudzień 09, 2011, 21:13:37 »
Oj chyba ważne!
Ponieważ po IPI-startup należy poczekać, aż wszystkie CPU się uruchomią!
Jeżeli nie będę wiedział ile mam "procesorów" to nie będę wiedział kiedy to już wszystkie będą wystartowane!!!
No chyba, że jednak nie trzeba szczekać?...
« Ostatnia zmiana: Grudzień 09, 2011, 21:19:01 wysłana przez mangado »

Nevar

  • Administrator
  • Nowy u
  • *****
  • Wiadomości: 24
    • Zobacz profil
Odp: wykrywanie liczby rdzeni cpu
« Odpowiedź #3 dnia: Grudzień 10, 2011, 01:08:27 »
Ja nie czekam. U mnie to wygląda tak:
  • 1. BSP po starcie przechodzi do LongMode i inicjuje jakieś podstawy systemu czyli pamięć, przerwania, scheduler.
  • 2. Potem ustawia wszystko co trzeba do startu innych procesorów. Wysyła odpowiednie przerwanie i startuje wszystkie pozostałe procesory AP.
  • 3a. BSP na nic nie czeka tylko skacze bezpośrednio do funkcji CPUInit
  • 3b. W tym samym czasie wszystkie AP przechodzą w LongMode i potem również skaczą do CPUInit.
  • 4. CPUInit ustawia wszystkie struktury procesora do pracy w systemie i przechodzi do oczekiwania na zadania w schedulerze.

Jeżeli mam w systemie jeden procesor czyli tylko BSP to tylko on będzie wykonywał zadania. A jeżeli mam 3 procesory to wszystkie zostaną obudzone i przejdą do wykonywania zadań.
To wszystko zależy jak się zaprojektuje budowę systemu. Ja mam jedną listę zadań w schedulerze. Każdy procesor jak nie ma co robić to bierze z niej najstarsze zadanie.