Piszę kod programu działającego w czasie rzeczywistym w osadzonym systemie Linux. Ponieważ krytyczne jest to, że nie utkniemy nieprzewidywalnie na błędach stron, chciałbym przedostać się do stosu, aby region, którego używamy, był objęty rozmową mlockall()
.Jaki jest najlepszy sposób na przedostanie się do stosu w wątku pthreads?
Dla głównego wątku jest to dość proste; po prostu zrób kilka dużych alloca()
s i pamiętaj, aby pisać co kilka stron. Działa to, ponieważ przy uruchamianiu programu limit stosu jest znacznie większy niż potrzebna; w końcu przydzielamy dokładnie ile mamy naprzód.
Jednak w przypadku stosów pthread, czy będą one również przydzielane za pomocą MAP_GROWSDOWN
? Jeśli tak, to jaki jest najlepszy sposób na prefault je, biorąc pod uwagę, że:
- Nie wiemy, jaka część (znany) rozmiar stosu jest zużywana przez libc starcie
- Nie chcemy przeznaczyć więcej pamięci na stosie, niż jest to konieczne
Zdaję sobie sprawę, że mogę używać pthread_attr_setstack
przejść w ręcznie przydzielone stosie, ale to komplikuje sprzątania po wątku i tak wolałbym tego uniknąć Jeśli to możliwe.
Jaki jest najlepszy sposób wykonania tego uzupełnienia? Byłoby wystarczające, gdyby istniał łatwy sposób na sprawdzenie dolnej granicy stosu (tuż nad stroną strażnika); w tym momencie mógłbym po prostu napisać do każdej strony stamtąd do bieżącego wskaźnika stosu.
Należy pamiętać, że przenoszenie nie jest problemem; chcielibyśmy mieć rozwiązanie, które działa tylko pod x86-32 i Linux.
Czy w umowie dotyczącej API istnieje gwarancja, że 'pthread_attr_setstacksize' nie użyje rzeczy podobnych do' GROWSDOWN', tj. Że 'mlockall()' natychmiast zastosuje się do całego stosu w czasie przydzielania bez dodatkowego wstępnego ? – bdonlan
Stosy wątków są ograniczone do glibc nptl. Nie wiem od ręki, czy to część specyfikacji, ale podejrzewam, że tak jest. Szybki rzut oka pokazuje, że nptl również używa puli stosów, więc jeśli tworzysz/niszczycie wątki, twój kod nie powinien zawieść, jeśli otrzymasz "ciepły" stos. –
Dobrze, myślę, że to na razie wystarczająco dobre dla nas - mam nadzieję, że nie wejdziemy w sytuację, w której strony blokują i tak :) – bdonlan