Obecnie studiuję na temat harmonogramu Linuksa. Jeśli chodzi o powinowactwo do rdzeni procesora, chciałbym wiedzieć, co następuje:W jaki sposób każdy proces jest przypięty do określonego rdzenia za pomocą programu szeregującego (Linux)
1) W jaki sposób każdy proces (wątek) jest przypięty do rdzenia?
Istnieje wywołanie systemowe sched_setaffinity
w celu zmiany powinowactwa głównego, w którym wykonywany jest proces. Ale wewnętrznie, kiedy generowany jest proces (lub wątek), w jaki sposób domyślny harmonogram linuksowy przypisuje proces (wątek) do określonego rdzenia? Zmodyfikowałem sched_setaffinity
wywołanie systemowe, aby zrzucić informacje o przenoszeniu zadania z jednego jądra do drugiego.
printk(KERN_INFO "%d %d %ld %lu %s\n", current->pid, current->tgid,
current->state, current->cpus_allowed,
current->comm);
Wygląda na to, że nie ma żadnego zrzutu powyższych informacji w /var/log/messages
. Domyślny harmonogram przypisuje każdy proces w inny sposób, ale nie wiem, jak to zrobić.
2) Czy można uzyskać identyfikator rdzenia za pomocą PID lub innych informacji?
To jest to, co chcę zaimplementować w jądrze Linuksa. W dokumencie task_struct
znajduje się element o nazwie cpus_allowed
. Ale jest to maska do ustawienia powinowactwa, a nie core ID. Chcę pobrać dane identyfikujące rdzeń, na którym działa określony proces.
Dzięki,
Dziękuję za odpowiedź. Ale to jest coś innego, czego chcę. Zastanawiam się, czy mój opis wprowadza w błąd ... Po pierwsze, nie używam wywołania systemowego 'sched_setaffinity' (nie sched_set_affinity, ale sched_setaffinity), ponieważ nie tworzę aplikacji działającej w przestrzeni użytkownika. – akry
Po drugie, pole 'cpus_allowed' (not cpu_allowed) nie jest wystarczającą informacją, aby zidentyfikować rdzeń procesora, na którym działa proces. cpus_allowed jest domyślnie ustawiony na 1, więc proces prawdopodobnie przeniesie wszystkie dostępne rdzenie. Jeśli istnieje jakieś pole/metoda informujące o miejscu, w którym proces jest uruchomiony, naprawdę to chcę wiedzieć. – akry
W każdym razie, dziękuję za odpowiedź na moje pytanie. – akry