<div dir="ltr">Salut,<div><br></div><div>Nu este nevoie de sincronizare intre comenzi tx, deoarece existe un xmit_lock care previne ndo_start_xmit sa se apeleze in paralel [1].</div><div><br></div><div>[1] <a href="http://lxr.free-electrons.com/source/net/core/dev.c?v=2.6.32#L1952">http://lxr.free-electrons.com/source/net/core/dev.c?v=2.6.32#L1952</a></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-25 18:36 GMT+02:00 Adrian Stanciu via so2 <span dir="ltr"><<a href="mailto:so2@cursuri.cs.pub.ro" target="_blank">so2@cursuri.cs.pub.ro</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">2017-03-25 18:14 GMT+02:00 Călin Cruceru <<a href="mailto:crucerucalincristian@gmail.com">crucerucalincristian@gmail.<wbr>com</a>>:<br>
> 2017-03-25 17:37 GMT+02:00 Adrian Stanciu via so2 <<a href="mailto:so2@cursuri.cs.pub.ro">so2@cursuri.cs.pub.ro</a>>:<br>
>> 2017-03-25 10:50 GMT+02:00 Iulian Matesica <<a href="mailto:iulian.matesica@gmail.com">iulian.matesica@gmail.com</a>>:<br>
>>> Pe 25 martie 2017, 06:50, Adrian Stanciu <<a href="mailto:adrian.stanciu.pub@gmail.com">adrian.stanciu.pub@gmail.com</a>> a scris:<br>
>>>> Dimensiunea ring-urilor și a elementelor componente. Să vezi pentru ce<br>
>>>> dimensiune ai cea mai mare viteză, să vezi de ce alocarea mai multor resurse<br>
>>>> nu ajută (locking-ul are un impact mai mare?).<br>
>>><br>
>>> Funcția nod_start_xmit() poate fi apelata concurent de către<br>
>>> subsistemul de networking, nu?<br>
>><br>
>> Nu cred că kernelul va apela ndo_start_xmit() pe același device în paralel.<br>
>> În sursa oficială sunt două lock-uri [1], unul pentru serializarea<br>
>> comenzilor și unul pentru CBL-ul partajat de comenzi Tx și non-Tx.<br>
>><br>
><br>
> De ce spui că cb_lock protejează CBL-ul de comenzi TX și non-TX și nu<br>
> ar proteja *și* comenzile TX de alte comenzi TX? Întreb pentru că<br>
> exprimarea ta lasă de înțeles că dacă ar exista doar comenzi TX,<br>
> atunci nu ar fi nevoie de acel lock, ceea ce ar însemna că răspunsul<br>
> la întrebarea lui Iulian este "Nu", însă nu ai argumentat de ce.<br>
><br>
<br>
</span>Ar fi necesar și în cazul în care ar fi doar comenzi Tx, pentru că e<br>
folosit și în [2] și în [3], unde avem comenzi Tx. Dar la noi nu se<br>
aplică [3] pentru că nu folosim NAPI.<br>
<br>
Am spus doar că nu cred că ar trebui să sincronizeze două apeluri<br>
ndo_start_xmit, iar acel "nu cred" este din cauză că nu am avut timp<br>
să analizez în detaliu dacă kernelul poate ajunge să apeleze<br>
ndo_start_xmit în paralel. Dacă am timp, revin cu mai multe<br>
explicații.<br>
<br>
[1] <a href="http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c?v=4.9#L61" rel="noreferrer" target="_blank">http://lxr.free-electrons.com/<wbr>source/drivers/net/ethernet/<wbr>intel/e100.c?v=4.9#L61</a><br>
[2] <a href="http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c?v=4.9#L872" rel="noreferrer" target="_blank">http://lxr.free-electrons.com/<wbr>source/drivers/net/ethernet/<wbr>intel/e100.c?v=4.9#L872</a><br>
[2] <a href="http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c?v=4.9#L1837" rel="noreferrer" target="_blank">http://lxr.free-electrons.com/<wbr>source/drivers/net/ethernet/<wbr>intel/e100.c?v=4.9#L1837</a><br>
<br>
<br>
Adrian<br>
______________________________<wbr>_________________<br>
<a href="http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii" rel="noreferrer" target="_blank">http://ocw.cs.pub.ro/courses/<wbr>so2/resurse/lista-discutii</a></blockquote></div><br></div>