2012-05-12 13 views
6

Eksperymentuję z SCHED_FIFO i widzę pewne nieoczekiwane zachowanie. Serwer, z którego korzystam ma 12 rdzeni z wyłączonym hyper-threadingiem. Wszystkie konfigurowalne przerwania zostały ustawione na procesor 0.Praktyczne wykorzystanie priorytetów planowania w czasie rzeczywistym Linuksa (SCHED_FIFO i SCHED_RR)?

Rozpoczęcie mojego programu tworzy wątek dla zadań o niższym priorytecie przy użyciu biblioteki pthreads bez zmiany strategii planowania z powinowactwem CPU ustawionym na rdzeń 0. Wątek rodzicielski następnie ustawia swój procesor powinowactwo do rdzenia 3 i jego własnej polityki szeregowania do SCHED_FIFO przy użyciu sched_setscheduler() z pid zero i priorytet 1, a następnie rozpoczyna się pętla nieblokująca.

Sam program działa dobrze. Jeśli jednak spróbuję zalogować się do serwera po raz drugi podczas działania programu, terminal przestaje odpowiadać, dopóki nie zatrzymam programu. To tak, jakby program planujący próbował uruchomić inne procesy w tym samym rdzeniu, co proces w czasie rzeczywistym.

  1. Czego mi brakuje?
  2. Czy program planujący nadal będzie próbował uruchamiać inne procesy w rdzeniu działającym w czasie rzeczywistym? Jeśli tak, czy istnieje sposób, aby temu zapobiec?
  3. Czy ustawienie zasady szeregowania z sched_setscheduler() w rodzicu zmieni zachowanie dziecka, które zostało utworzone wcześniej?

Z góry dziękuję.

Odpowiedz

5

sched_setscheduler ustawia harmonogram procesu , a nie wątku. Zobacz:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html

Jeśli chcesz ustawić harmonogram dla wątku, trzeba użyć funkcji pthread_attr_setschedpolicy i pthread_attr_setschedparam na obiekcie atrybut dla nowego wątku przed jej tworzenia.

Nie jestem pewien, jak conformant Linux jest uhonorowanie tych wymagań, ale należy przynajmniej zacząć od upewniając się, że kod jest poprawny do specyfikacji, a następnie ustawić go jako potrzebne ...

+0

Dzięki za Odpowiadać. Masz rację, dokumentacja mówi, że sched_setscheduler() ustawia politykę planowania dla procesu, a nie wątek. Jednak po przeczytaniu tej odpowiedzi uruchomiłem kilka testów za pomocą ps, a zasady są ustawione poprawnie dla wątków. To skłoniło mnie do uruchomienia dalszych testów. Jednym z najbardziej zauważalnych problemów jest to, że logowanie trwa długo, gdy program jest uruchomiony. Zdecydowanie wygląda na to, że sesja bash dla nowego logowania jest początkowo ustawiona na procesor działający w czasie rzeczywistym. – digby280

Powiązane problemy