[so] [Tema4] [Linux] Problemă test round robin
Ionuț Mihalache
ipopescu46 at gmail.com
Fri May 3 01:13:10 EEST 2019
Nu mai contează. Noul checker a rezolvat problema asta.
În joi, 2 mai 2019 la 23:42, Ionuț Mihalache <ipopescu46 at gmail.com> a scris:
> Numărul de thread-uri din acest test este foarte mare? helgrind îmi spune
> că anumite thread-uri dau failed la pthread_create() sau poate este de la
> mine. Ideea este că testul durează foarte mult și am avut impresia că am
> deadlock însă dacă îl las să ruleze apare eroarea asta "Thread #300's call
> to pthread_create failed with error code 11 (EAGAIN: Try again)". 300 nu
> este relevant, doar am ales una dintre erori.
>
> În sâm., 27 apr. 2019 la 20:21, Paul Olaru via so <so at cursuri.cs.pub.ro>
> a scris:
>
>> Deci va trebui să fac join early, că join la final face Valgrind să
>> consume mai mult de 1.5 GB de memorie și deci să-și ia OOM kill...
>> Probabilistic.
>>
>> On Sat, Apr 27, 2019, 8:19 PM Razvan Crainea <razvan.crainea at gmail.com>
>> wrote:
>>
>>> On Sat, Apr 27, 2019 at 6:25 PM Paul Olaru via so <so at cursuri.cs.pub.ro>
>>> wrote:
>>> >
>>> > Îmi poate oferi cineva o idee prin care pot găsi motivul pentru care
>>> primesc mesajul de eroare „task was not preempted” la unele execuții? Sau
>>> ce să verific în codul meu? Test round robin.
>>> Eroarea "task was not preempted" o primești atunci când un task
>>> ruleaza mai mult decât cuanta maximă, și scheduler-ul tău nu îl
>>> preemptează ca să poată rula un alt thread cu aceeași prioritate.
>>> >
>>> >
>>> >
>>> > Când ar trebui să se facă preempția în so_signal, cea cauzată de
>>> expirarea cuantei? Înainte sau după semnalizare? Similar pentru so_fork:
>>> înainte sau după lansarea threadului? [la mine oricum inițializarea
>>> structurilor noului thread se întâmplă sincron cu apelul so_fork].
>>> so_signal() este în sine o instrucțiune, care consumă timp pe
>>> procesor. Instrucțiunile sunt considerate atomice, astfel încât cuanta
>>> de timp este considerată expirată după ce întreaga instrucțiune s-a
>>> executat. Așadar, preempția în so_signal() ar trebui să se facă după
>>> semnalizare. La fel și la so_fork, preempția se face după terminarea
>>> inițializării, dar înainte de a rula handler-ul.
>>> >
>>> >
>>> >
>>> > (bănuiesc că nu ar trebui să-mi încerc norocul pe VMchecker gen „tura
>>> asta merge”, dat fiind că problema apare la sub 10% din rulări).
>>> Nu, n-ar trebui să îți încerci norocul.
>>> >
>>> >
>>> >
>>> > (în urma discuției din alt thread, mașina virtuală de SO are 1.5GB pe
>>> sistemul meu în loc de cei 512MB pe care îi are by default).
>>> Recomandăm să nu modifici mașina virtuală, altfel vei avea diferențe
>>> între rularea pe mașina ta virtuală și mașina de pe vmchecker.
>>>
>>> Numai bine,
>>> Răzvan
>>>
>> _______________________________________________
>> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20190503/1e895704/attachment-0001.html>
More information about the so
mailing list