Re: [PATCH v4 3/3] Doc/memory-barriers: Add Korean translation

From: SeongJae Park
Date: Thu Jul 07 2016 - 18:51:26 EST


2016-07-07 21:00 GMT+09:00 Byungchul Park <byungchul.park@xxxxxxx>:
> On Mon, Jul 04, 2016 at 08:27:08AM +0900, SeongJae Park wrote:
>> +===================================
>> +ì ëìë
>> +Documentation/memory-barriers.txt
>> +ì íê ëììëë.
>> +
>> +ììï ëìì <sj38.park@xxxxxxxxx>
>> +===================================
>> +
>> +
>> + =========================
>> + ëëì ìë ëëë ëëì
>> + =========================
>> +
>> +ìì: David Howells <dhowells@xxxxxxxxxx>
>> + Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
>> + Will Deacon <will.deacon@xxxxxxx>
>> + Peter Zijlstra <peterz@xxxxxxxxxxxxx>
>> +
>> +========
>> +ëììí
>> +========
>> +
>> +ì ëìë ëììê ìëëë; ì ëìë ìëíì ììë, êêìì ìí ìëë
>> +ëëë ìê, ìëíì ìììë ìëì ìí ììëëë êëí ëëë ììëë.
>
> I will add my opinion in korean.

Thank you for kind and faithful review. I agree with most of your opinions and
suggestions. Most of your suggestions looks much better than mine.

However, I also have some different opinion. I want to emphasize the fact that
(1) CPUs 'issue' memory operations to memory system as they want, (2) memory
system 'executes' those operations as they want, and (3) CPUs 'perceive' the
'effects' of the operation executions as they want. I want to emphasize the
fact in document because I think most confusion about memory ordering comes
from vague understanding about the relation. To my perspective, few of your
suggestions could enhance readability but could dim the point, too. I have
appended the opinion in Korean line by line, too. So, if you do not opposed
to, I will enhance the text again while keeping the point.

>
> êëí ëë -> ëììí ëë

ë, êê ë ìì ê êëì.

>
>> +ì ëìë ëëììì ìêíë ëìí ëëë ëëìëì ììíê ìí
>> +ìëììëëë ëê ììíë ììë (êëê ëì êëë) ìëì ëíëëëë.
>> +
>> +ëì ëíìë, ì ëìë ëëìê íëììì êëíë ìíì ëí ëììê
>> +ìëëë.
>> +
>> +ì ëìì ëìì ëêììëë:
>> +
>> + (1) ìë íì ëëìì ëí êëí ì ìë ììíì êëì ëìíê ìíì,
>> + êëê
>> +
>> + (2) ìì êëí ëëìëì ëí ìëê ììíì íëìì ëí ìëë ìêíê
>> + ìíì.
>> +
>> +ìë ìííìë íìí ëëìëì ëíìë ìêì ììêíë ììíì
>> +ìêìíëëë ëì êëì ìêí ìë ììëëë, ìêì ììêíë
>> +ìêìíëì ììíì ìë ìííìê ìëë ê ìííìê ìëë êìë ìì
>> +ììíìê ëëëë.
>
> ììíìê -> ììëìê

ë, ë ëì íí êëì.

>
>> +
>> +ëí, ìë ëëìë íì ìííìììë íë ìííìì ëì ëììë ìí
>> +ëìììë íë ëëìì ëìì ììì ëíìíì no-op ì ëìë ììì
>
> "ëìì" ìëë ëìë íëë...

ë

>
>> +ììíìê ëëëë.
>
> ììíìê -> ììëìê

ë, êê ëì ê êìëë.

>
>> +=======================
>> +ìì ëëë ììì ëë
>> +=======================
>> +
>> +ëìê êì ììíë ììí ëëì ìêí ëìë:
>> +
>> + : :
>> + : :
>> + : :
>> + +-------+ : +--------+ : +-------+
>> + | | : | | : | |
>> + | | : | | : | |
>> + | CPU 1 |<----->| Memory |<----->| CPU 2 |
>> + | | : | | : | |
>> + | | : | | : | |
>> + +-------+ : +--------+ : +-------+
>> + ^ : ^ : ^
>> + | : | : |
>> + | : | : |
>> + | : v : |
>> + | : +--------+ : |
>> + | : | | : |
>> + | : | | : |
>> + +---------->| Device |<----------+
>> + : | | :
>> + : | | :
>> + : +--------+ :
>> + : :
>> +
>> +ê CPU ë ëëë ììì ìíëììëì ëììíë íëêëì ìííëë.
>> +ììíë CPU ëëìì ëëë ìíëììëì ììë ëì ìíëì ìê, CPU ë
>> +íëêëì ìêêêë ìêì ìë ìíë êëëëê ëì ìë ìëë ëëë
>> +ìíëììëì ììì ìíë ìë ììëëë ìëìí ìíí ì ììëë.
>
> ììë ê ëìì ìì ììíë ê êìì. ëëì íêìë ëìì êììë
> ìêê ìë ìëì ìë ê êìëë. íìíë ìë ëì ìììë ëëíë
> êì ìì ê êìëë. ì ëìë ë ëììë ëëíë ê ë ìì ììêì?
>
>> +ëìíê, ìíìë ëí íëêëì ììì ëìì íìì ìë íë ëììë ìë
>> +ììëë ììì ìíë ëë ëëìëì ìëì í ì ììëë.
>> +
>> +ëëì ìì ëìêëìì í CPUê ìííë ëëë ìíëììì íêë
>> +ìíëììì CPU ì ììíì ëë ëëë ììì ìííìì (ìì) ë ìëê ë
>> +ììíì ëëì ëëëì ìíëëë.
>
> ëëì ìì ë*ì*ìêëìì í CPUê ìííë ëìë ìíëììì êêë
> ìíëììì CPUì ììíì ëë ëëë ììì ìííìì(ìì)ë ìë ë
> ììíì ëëì ëëëì ììí ì ìê ëëë.

ë, ìíê ììëì. ëìë ì ë ìììëì ê êìëë.

>
>> +
>> +
>> +ìë ëì, ëìì ìëì ìëíëì ìêí ëìë:
>> +
>> + CPU 1 CPU 2
>> + =============== ===============
>> + { A == 1; B == 2 }
>> + A = 3; x = B;
>> + B = 4; y = A;
>> +
>> +êëì êìë ììí ëëë ììíì ëììê ë ìììëì ëìì ì 24ê ìë
>> +ëë ìíìë ìêìë ì ììëë:
>
> êë êìëì ììí ëëë ììíì ëììê ëë ììì ìíì (...)

ë

>
>> +
>> + STORE A=3, STORE B=4, y=LOAD A->3, x=LOAD B->4
>> + STORE A=3, STORE B=4, x=LOAD B->4, y=LOAD A->3
>> + STORE A=3, y=LOAD A->3, STORE B=4, x=LOAD B->4
>> + STORE A=3, y=LOAD A->3, x=LOAD B->2, STORE B=4
>> + STORE A=3, x=LOAD B->2, STORE B=4, y=LOAD A->3
>> + STORE A=3, x=LOAD B->2, y=LOAD A->3, STORE B=4
>> + STORE B=4, STORE A=3, y=LOAD A->3, x=LOAD B->4
>> + STORE B=4, ...
>> + ...
>> +
>> +ëëì ëìì ëêì ìíì êêê ëì ì ììëë:
>
> (...) ìíì ëì ì ììëë.

ë

>
>> +
>> + x == 2, y == 1
>> + x == 2, y == 3
>> + x == 4, y == 1
>> + x == 4, y == 3
>> +
>> +
>> +ëìì, í CPU ì ìí ëëë ììíì ííì ìíì ìíëììëì ëë CPU ì
>> +ëë ìíëìì ëì ìíìê ííì ììì ëë ììë ìíì ì ììëë.
>
> íì ìê ìììê íìë, ììë ììì íì ìê ììí ëëìì ê ëì
> ìë ê êìëë. ìì ëíëëëë.

ì ë ìêì ëêìëë.

>
> (..) í CPUê ëëë ììíì ëìí ìíì ìíëììëì ëë CPUìì
> ëë ìíëììì ííì ììí ì ìëë, ì ë ìíìê ëìë ììëë
> ëììì ìì ì ììëë.
>
>> +
>> +
>> +ìë, ìëì ìëì ìëíëì ìêí ëìë:
>> +
>> + CPU 1 CPU 2
>> + =============== ===============
>> + { A == 1, B == 2, C == 3, P == &A, Q == &C }
>> + B = 4; Q = P;
>> + P = &B D = *Q;
>> +
>> +D ë ìíìë êì CPU 2 ìì P ëëí ìíì ììêì ììììê ëëì ìêì
>> +ëëí ëìí ìììì ììëë. ì ìëíëì ìí êêëë ìëì êêëì
>> +ëë ëíë ì ììëë:
>> +
>> + (Q == &A) and (D == 1)
>> + (Q == &B) and (D == 2)
>> + (Q == &B) and (D == 4)
>> +
>> +CPU 2 ë *Q ì ëëë ììíê ìì P ë Q ì ëê ëëì D ì C ë ììëë
>> +ìì ììì ììíìì.
>
> ììíìì -> ììëìì

ë

>
>> +
>> +
>> +ëëìì ìíëìì
>> +-------------------
>> +
>> +ìë ëëììëì ìì ìííììë ëëë ììì ìíìë ìêíëë, íë
>
> ìë ëëììëì ìì ìííììê ëëë ë ìë ììì ììíë ë, ìë íë
>
>> +ìíë ëììíì ìêíë ììë ëì ììíëë. ìë ëì, ìëëì íí
>
> ëì ììì êìì ìíë ëë ìì ìì ìííì ëìí ììì.

ë.

>
>> +ëììí (A) ì ëìí íí ëììí (D) ë íí ìêëë ëë ëììí ìíì
>> +êë ìëë ìëë ìêí ëìë. ëëì 5ë ëììíë ììëë ëìì ìëê
>> +ììë ì ìì êëë:
>
> (...) ìê ìí ëì ìëê ììë ì ììëë:
>
>> +
>> + *A = 5;
>> + x = *D;
>> +
>> +íìë ìê ëìì ë ìí ì íëë ëìì ì ìì êëë:
>
> (...) ììëë:
>
>> +
>> + STORE *A = 5, x = LOAD *D
>> + x = LOAD *D, STORE *A = 5
>> +
>> +ëëì ìíì ëìíë ììì _íì_ ììë ììíëë, ìëë ëìì ììí
>> +êìëë.
>> +
>> +
>> +ëììí
>> +--------
>> +
>> +CPU ìê êëí ì ìë ììíì ëììí ëêìê ììëë:
>> +
>> + (*) ìë CPU ë, ìììì ììíë ëëë ìììëì íë CPU ìììê
>> + ìììë íë ìì êëë ììëëë. ì, ëìì ëíìë:
>
> ììëëë. -> ìíëëë.

CPU (ëë ëëìì) ë ëëë ìíëììì ëëë ììíì 'ìì'íê ëëë
ììíì ìí 'ìí'ë ìíëììì 'êê'ë 'ëêë' ëë CPU ê ììíì
ëëë ììíìì ìíë ìíëììì ìíì ëê ëë êìë, (1) CPU ê
ìëì ììë ëêì ììí ì ìê, (2) (ììë ííí) ëëë ììíì ììë
ìíëììëì ììì ììë ìíí ì ìê, (3) ëëë ììíì ìí êêë ê
CPU ê ììì ììë ë ì ìê ëë ë ìì ëëë ìì êìì êëìê,
ìëì êë ìë êë ëíìë ìííê ììëë.

ì êëë ëìíê 'ìííë'ê íê ëë ì ëëì íêëê í ìë ìì ê
êìì, êëí CPU ë 'ìì' íê ëëë ììíìëëí êêë 'ìëëëë'ë
ëëì ëì ììììë ììíëê ìëê ììëë.

ì ëìì êì êë 'ìì'íëê íëê ì ììí ê êìë, ëëë ììíìê
ììíëë ìì ì ë êìíë ììë ììíëë íêìëë.

>
>> +
>> + Q = READ_ONCE(P); smp_read_barrier_depends(); D = READ_ONCE(*Q);
>> +
>> + CPU ë ëìê êì ëëë ìíëììëì ììíëë:
>
> (...) ìë ëëë ìíëììì ìííëë:

ìì 'ìì'ì ëëì ìëëë íêìëë.

>
>> +
>> + Q = LOAD P, D = LOAD *Q
>> +
>> + êëê ê ììë íì ìììëë. ëëëì ììíìì
>> + smp_read_barrier_depends() ë ìëìë ìíìë DEC Alpha ììë
>> + ëìììë ììëìì íëë. ëíì êììë smp_read_barrier_depends()
>> + ë ìì ììíë ëì rcu_dereference() êì êëì ììíì íì
>> + ììíììì.
>
> ììíììì -> ììëìì.

ë.

>
>> +
>> + (*) íì CPU ëìì êìì ííìë ëëì ìíì ëì ê CPU ìììë ììê
>
> ëëë ììì êìë ëëì ìíìê í CPU ëìì ìíë êì, íë CPU
> ëìì ëìì ëì ê ììë ëëì ììëë. (...)

ìì 'ìì' ì ëëì ëêëë íêìëë.

>
>> + ëìì êìë ëíëëë. ì, ëìì ëíì:
>> +
>> + a = READ_ONCE(*X); WRITE_ONCE(*X, b);
>> +
>> + CPU ë ëìì ëëë ìíëìì ëìëì ëëëì ììí êìëë:
>
> ëì? ëë ëêìë ëìëì..

êëêì... ìê ìììì ìëìëëì ;)

>
> -> íë CPUë ìì ëì ììëë ëëë ìíëììì ìíí êìëë.

ìì 'ìì' ì ëëì ëêëë íêìëë.

>
>> +
>> + a = LOAD *X, STORE *X = b
>> +
>> + êëê ëìì ëíìë:
>> +
>> + WRITE_ONCE(*X, c); d = READ_ONCE(*X);
>> +
>> + CPU ë ìëì ëìì ëëëì ëëë:
>
> (...) ìëì ìë ììë ìííëë.

ìì 'ìì' ì ëëì ëêëë íêìëë.

>
>> +
>> + STORE *X = c, d = LOAD *X
>> +
>> + (ëëì ìíìë êìë ëëë ììì íêìë í ëì êììëë).
>
> ììëëë ììì ììí ììì..
>
> (ëëì ìíìê ìííêì íë ëëë ììì êìë êì, ëëì ìíìê
> êìëê ëíëë.)

íì ëêì.

>
> ---
>
> I think there are still many things literally translated. It makes it much
> harder to read.
>
> I think it's not the version with which I can add opinions line by line.
> Please review all sentences line by line carefully by yourself and make it
> more readable.
>
> I hope you don't hurry and spend more time to make it done. I believe you
> agree with it.

Ok, I agree with your opinion. Actually, I have reviewed all sentences line by
line for this version, too. However, it looks like it wasn't sufficient. I
will enhance it again.

>
> Thank you,
> Byungchul