ëíìì íìì ëë (Amdahl's Law) ë ìë ë êí ìë
íì ìììí (3ì ìì)
- ëì: Amdahl's Lawë ëë ìííìì ìì ìì ì ëëíí ì ìë ëë(ìì ëë)ì ëìì ìì ìë íìì ìíìì êìíëë ëììë, ììë ìëë ëì ëëë ì ìì ëëëëì_SPEEDUPìë íêê ìë.
- êì: ì ëìì ìííë, ëíìì ììíìì ìë ììí effortsë ìëì ììíì íëì íëí ì ìë. ìì ëëì 10%ëï10.
- ìí: Amdahl's Lawë ìììì ìììë, ëìíëìì ìë ììí, ëì ììí ìê, GPU ìíí ë ëë ìëê íìí ëë ìììì íììì ìëì êëì ëë.
1. êì ë íìì
êë ë ìì
Amdahl's Lawë 1967ë Gene Amdahlì í ëë ìííìêëì íêë ìëíë ëììë. ì ëìì ëëë, ìì ìììì ììììëë ìëëìì íë ëëì ëìì fìê, ëë ìëê êëí ëëì ëìì (1-f)ì ë, Nêì ëìí ììë ëë ìëí êì ìëì ìë(Speedup)ì ëìê êì ííëë:
Speedup(N) 1 / (f + (1-f)/N)
ìêì:
- f: ìì ëëì ëì (0 f 1)
- (1-f): ëëí êëí ëëì ëì
- N: ìì ì
íì íìì Nì ëíëë ììë:
Speedup_max = 1 / f
ì, ììë ìëë ëì ëëë ìë íìì 1/fëë ëì ì ìë. ëì ìì ëëì 5%ìë, ììë ìëë ëì ëëë ìë 20ë(1/0.05)êìë ëëì ì ìë.
ì Amdahl's Lawê ììíê
ì ëìì ìííì ëíë, ëíìí íëìì íìë íêë ìëë ììíë ìëíê ëë. ìë ëì, ìì ëëì 30%ì íëêëì 4ìììì 8ììë ëëëê íì ìëê 2ë ëëìì ìëë. êìíëë:
- ìì ëë 30%, ëë ëë 70%
- 8ìì_SPEEDUP = 1 / (0.3 + 0.7/8) = 1 / (0.3 + 0.0875) = 1 / 0.3875 = 2.58ë
8ììë ìë 2.58ëìë, ìë ëìíê "8ììë ìëê 8ëê ë ì ììë"ë ìêê ëìì ëëëë.
[Amdahl's Law ìì ìë]
[ìì ëëì 5%ì êì]
f = 0.05, (1-f) = 0.95
N=1: ìë íì = 1.00ë ()
N=4: ìë íì = 1 / (0.05 + 0.95/4) = 3.48ë
N=8: ìë íì = 1 / (0.05 + 0.95/8) = 5.10ë
N=16: ìë íì = 1 / (0.05 + 0.95/16) = 7.02ë
N=100: ìë íì = 1 / (0.05 + 0.95/100) = 12.50ë
N: ìë íì = 1 / 0.05 = 20.00ë ()
[ìì ëëì 20%ì êì]
f = 0.20, (1-f) = 0.80
N=4: ìë íì = 1 / (0.20 + 0.80/4) = 2.50ë
N=8: ìë íì = 1 / (0.20 + 0.80/8) = 3.48ë
N=16: ìë íì = 1 / (0.20 + 0.80/16) = 4.35ë
N: ìë íì = 1 / 0.20 = 5.00ë (ìì 20%ì ìì)
[ëììêë íì] Amdahl's Lawë "ëì ëìíë" êì ìííê ìë. ìì 5%ê ëë ììì ìê(ìì ëë), ëëì 95%ê ë(ëë ëë)ìëë, ë ëëì ììí ì ììëëì íêë ìëë íìë(ìì ì ìê)ì ëìê ì ìë ëì ìì 95%ë ëë ì ìë. êêì íêê ìëë ììë ëì ììíë 5%ì êêì ìí ëì ìë.
- ìì ëì: Amdahl's Lawë "ë ëëê ìê"ê êë. ëìíë êì 4ëì ëìì í ì ììë(ëë ëë), ìëì ëê êë ìêì 1ìë í ì ìë(ìì ëë). ìë 100ëì ìëìë ëëë(ìì ì ìê) ìëì 1êëìëëëì ëëë ìì ìêììëì ëëìë ììëë.
2. ìííì ë íì ìë
Amdahl's Lawì ìíì ìë
Amdahl's Lawë ëì êìíì ìëëë:
- ìì ìì ì fëìì ììììëë ìë êë
- ëëì (1-f)ëìì Nêì ëì ììë ëë ìë êë
- ê ììì ìëì ëì
ìì ìì ìê Tsë Nêì ììë ëííì ìëíë:
- ìì ëëì ììëë ìê: f Ts
- ëë ëëì ììëë ìê: (1-f) Ts / N
- ì ìì ìê: T(N) = f Ts + (1-f) Ts / N
ëë ìë íì:
Speedup(N) = Ts / T(N) = Ts / (f Ts + (1-f) Ts / N)
= 1 / (f + (1-f)/N)
Gustafson's Law (ëëíì ìì íê)
Amdahl's Lawê êìë ëì íêììì ìë íìì ëëë ëë, Gustafson's Lawë ëì íêê ëëí ìëì ëë ëíë ìì ìíì ëëë. ìì ììììë ëìí íêê ìêíë ëë ëëì ë ëëê ìêíë êíì ììëë, Gustafson's Lawë íììì ììì ìêíë:
Speedup_ìì(N) = f + N (1-f)
ì êìì ëëë, ëì íêê íê ìêíë ìì ìì ëëíì ìëê íìë ì ìë.
ëëí íìê íìì
| ìì ì (N) | ìë íì (f=0.1) | íì (Speedup/N 100) | ìë íì (f=0.2) | íì |
|---|---|---|---|---|
| 1 | 1.00ë | 100% | 1.00ë | 100% |
| 2 | 1.82ë | 91% | 1.67ë | 83% |
| 4 | 3.08ë | 77% | 2.44ë | 61% |
| 8 | 4.71ë | 59% | 3.27ë | 41% |
| 16 | 6.40ë | 40% | 4.00ë | 25% |
| 32 | 7.84ë | 24% | 4.52ë | 14% |
| 64 | 8.76ë | 14% | 4.81ë | 8% |
| 128 | 9.31ë | 7% | 4.91ë | 4% |
[íìì êëí]
íì(%)
100|*
| *
80| *
| *
60| *
| *
40| *
| *
20| *
| *
0|______________________________*_________> ìì ì(N)
1 2 4 8 16 32 64 128
f=0.1 (ìì ëë 10%)
f=0.2 (ìì ëë 20%)
ììê ëìììë íìì ëììë"íì ìí" íìì êìë
[ëììêë íì] íìì êëíìì ëìë, ìì ìê ìêíìë ê ììê ìêíë íê íêë êìíë. 128ìììì ìì ëëì 10%ë ëìë íìì 7%ì ëêíë. ìë 128êì ììê ììë ììëë 9ê ìì ìëì íêë ëííëë ëìë. ìëí"íììì íê"ë ëë ììíë, íëìì íì ëë íêë ìíí êìí ì ìë.
Amdahl's Lawì ìë ë êíì êê
ëíìì ììíìì ìì ëëì ìì ìì ì íëë"ë êí(Lock Contention)"ìë. ìë ììê êì ììì ìêíëë ëì íìíê, ëì íëíëê ëêíë ìêì ììê ëììë ìêíë. ìêì ëëí ìì ëëìë, Amdahl's Lawì fêì ìêìíë.
- ìì ëì: Amdahl's Lawë "ëë ìì íì"ê êë. 4ììì 8ìììë íìíë, ìë êêì 2ìììëë íêí ì ìë êìëê ììë(ìì ëë), ìì êêìíê íê ìì ìë 4ììì ëëëë.
3. ìí ëê ë ëêë ëì
Amdahl's Law vs Gustafson's Law
| ëê íë | Amdahl's Law | Gustafson's Law |
|---|---|---|
| ìì | ëì íê êì | ëì íê ìê êë |
| íì ìë | "êìë ììì ëë ëëëë?" | "ë í ììì êì ìêì ìëíëë?" |
| ìì ìì | ìëëë, ììê ììí | ëìí ëì, êí ìíí |
| ìì ì ìê ì ìì | ìë íì ìí ìì | ëëíì ìë íì êë |
[ìì ìëëì]
[Amdahl's Law ìì: êìë ëìíëìì ìë]
- 1ì êëë ìë
- ìì ëë 15% (ìë íì, ììí)
- 8ììë ëëí: 1 / (0.15 + 0.85/8) = 4.0ë
- ìì ìë: 0.25ì
[Gustafson's Law ìì: ëìí íê ìê]
- 1ì êëë ìë
- ìì ëë 15%
- ëìí 8ë ìê -> ìë ìê 1ì ììíëë
- ìê ìë: 8ë
- ìì êë?: f + N(1-f) = 0.15 + 80.85 = 6.95ë
- ììí 8ëìë ë ëììë ìëí ìì
[ëììêë íì] Amdahl's Lawë"ëë ê" êììì, Gustafson's Lawë"ëì ê" êììì ëë. ëìíëìì ìëìë ìì íêê êìë êìì Amdahl's Lawê ìííê, ëêë ëìí ìëìë ëì íêê ìêíë êììë Gustafson's Lawê íìììë.
ëíìì ëë ëì ëê
| ëê | ìì ëì | íì |
|---|---|---|
| perf sched | ìììë ìì, ìíìí ììì | CPUë ìììë ìë ëë íì |
| perf lock | ë ëê ìê, íë ìë íì | ìë ëë ë êí ëì |
| perf stat | CPI(íëë ëëì ì) | ìììì CPU íì íì |
| BPF/bpftrace | ëì ë ìì | ëíììì ë êí ììê ëì |
- ìì ëì: Amdahl's Lawë "ìë ìê ììíì êí"ê êë. ìë ëì ìëìê ëìì ìëíëëë, ëë ìëìê í ìë ììë ì ììë(ë êí) ìë ìëê íìëì ìëë. ê ìëìëë ëëìì ìëëë ìêíì ëëì ëëíì íêê êëíëë.
4. ìë ìì ë êììì íë
ìë ìëëì: ì ìëì ëíìì íìë ììí
ìí:ë ì ìëìê 16ìì ìëìì ììëëë, CPU ììëì ìì íêììë ëì ììëë ìì ìë ìëê êëì ëìì ëíê ììë.
ëì:
perf sched latencyë ìììë ìì ìì -> íê 5msì ìììë ëê ëìperf lock recordë ë êí ëì -> Accept_mutex(.accept ììí ìì ëíì)ìì êí ëê- ì ëì ìì ëëì íë -> Amdahl's Law êì:
- ìì ëë ìì: 5ms/(5ms+íê ìë 10ms) = 33%
- 16ìì ìë ìë: 1/(0.33+0.67/16) = 2.77ë
ëì:
- nginxì worker process ìë 16êë ìê -epoll/ ëììë Accept êí íí
- êêë: CPU ìì ììë êí êì, ìëë 40% íì
ëì ìíëìí
- ìì ëë ìë:
perfëbpftraceë íìíì íëêëì ëëí êë ëëìëìíê, ìì ëëì ëì(f)ì ììíë. - ë êí ëëíë: ìë ëë ë(/proc/lock_stat ëë perf lock)ìë ìì ëì ëê ìêì ëëíëíë.
- íìì ëí íìì ìì: Amdahl's Lawë ìì ì ìêì ëë êë ìë íìì êìíê, íì ëë íìì íêíë.
ìííí
-
"ììë ëì ëìë ëëìë"ë ëì: ìì ëëì íë ììë ìëë ëì ëìë íêê ìë. ëì ìì ëëì ììë êììë.
-
ëì ííê ìí êëíê ëë: êëí ìëë/íëììë ëëíëìì ìëíëì ëêí ëìì ìêíì, ëëë ìì ëëìëë ëìì ìì ì ìë.
-
ìì ëì: Amdahl's Lawë " ììì íê"ì êë. êììë ìëë ëì ëìë, ìë êìì 1ëì êêë í ì ììë(ìì ëë) ìì ìì ìëë ê êêì ìëìëë. ëëì êì ëì íì í ìì"ê êìì ìë êêë ëíí ì ìëê"ë ëìíë êìë.
5. êëíê ë êë
ìë/ìì êëíê
| êë | ìì ëë ììí ìì | ìì ëë 20%->5% êì |
|---|---|---|
| 16ìì ìë íì | 4.35ë | 12.86ë |
| 4ìì ìë íì | 2.44ë | 3.64ë |
| íëìì íì ëë íê | ëì | ëì |
ëë ìë
CPU ìì ìê êì ìêíë ìììì(16->32->64->128...), ìì ëëì ììë ëìcriticalíìê ìë. ëí íëìëìì"ìì ì vs ìë"ì ëìëìë ììíìê ìë.
ìê íì
-
Gene Amdahl (1967): "Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities"
-
John Gustafson (1988): "Reevaluating Amdahl's Law"
-
ìì ëì: Amdahl's Lawë " íëìíì ëë"ê êë. 10ë êë íëìíìì,ëë íêíë, 1ëì ëìí êìììì ëìë ìíì íë. ìëë ëì ìêìë,"1ì
êë êë ë
| êë ëì | êê ë ìëì ìë |
|---|---|
| Gustafson's Law | ëì íêê ìêíë ìì ìíìì ëëíì íêë ììíë ëììë, Amdahl's Lawëëìíë. |
| ë êí (Lock Contention) | ëíìììì êì ììì ëí ë ëê ìêì ìì ëëììêìì, Amdahl's Lawì fêì íê ëëë. |
| ìíìí ììì ìëíë | ìëë/íëììê ììëë ììì ìêì ìì ëëììêìíë. |
| CPI (Cycles Per Instruction) | CPUê ëëì íëë ìííëë íìí íë ììí ìë, ëëí êë ëëìêìììë íìíë ìíìë. |
ìëìë ìí 3ì ëì ìë
- Amdahl's Lawë "" êìëë.5êììì""1ë êë5ìêëëì íëë.
- 100""1ìì1êì.
- ""ìëë ëëêë""ìíëìììëë!