[so2] spin-locks pe mai multe procesoare

Alexandru Preda alexandru.preda91 at gmail.com
Tue Jul 15 15:21:31 EEST 2014


2014-07-15 14:28 GMT+03:00 Alexandru Preda <alexandru.preda91 at gmail.com>:
> On Jul 15, 2014 12:22 PM, "Costash" <costashsrc at gmail.com> wrote:
>>
>> 2014-07-15 11:15 GMT+02:00 Catalin Vasile <catalinvasile92 at gmail.com>:
>> > Salut,
>> >
>> > Din documentatie nu reiese foarte clar daca 2 intreruperi, care ruleaza
>> > (sunt tratate) pe procesoare diferite (si folosesc un spin-lock comun),
>> > se
>> > vor executa intr-o ordine oarecare secventiala.
>> > Pana la urma un spin-lock imi asigura atomicitate si in cadru
>> > intreruperilor
>> > care se executa pe procesoare diferite?
>>
>> Din documentația de la [1] mie mi se pare că spune clar că e SMP safe.
>>
>> Citez o observație importantă:
>> "NOTE! The spin-lock is safe only when you _also_ use the lock itself
>>    to do locking across CPU's, which implies that EVERYTHING that
>>    touches a shared variable has to agree about the spinlock they want
>>    to use."
>
> Salut,
>
> Eu zic ca nu e suficient. Daca am inteles bine si vrea sa partajeze,
> ipotetic, date intre doua intre doua handlere, atunci vor trebui dezactivate
> si intreruperile (eg spin_lock_irqsave)) deoarece doar intreruperea curenta
> e mascata.

Cu scuzele de rigoare pentru spam, cred ca ar trebui sa clarific putin
ce voiam sa spun.

Da, intr-adevar, un spinlock asigura sincronizarea pentru cazul in
care ruleaza pe procesoare diferite. In schimb, dezactivarea
intreruperilor te-ar proteja de cazul in care intreruperile ar putea
fi imbricate (pe acelasi procesor). Din nou, conteaza cazul concret
(prioritatile celor doua intreruperi, daca va avea vreodata relevanta
sa faci asa ceva, etc).


More information about the so2 mailing list