ëìí ìììë (Disk Scheduling) ëì

íì ìììí (3ì ìì)

  1. ëì: ëìí ìììë(Disk Scheduling)ì ìì êì íëììê ëìì íëëìíì êê ëë ìì(ëë)ë êìëëê I/O ììì ëê ììë ë, ììììê ì ììëì í(Queue)ì ëì ë íëìì ëë(Head)ì ëëì ìë ëìì 1mmëë ìë ì ìëë ììë ìëì(Sorting)íë ìëì êíìë êììë.
  2. êì: êì ëêê ëìí êêì ëì 'íì ìê(Seek Time)'ì ììííê, ëëìë ìê ìì ëìíë ìì í ìë ëìíì ìì ìëë(Throughput)ê ììí êëëì êëííë êì ìì ìëì ëíë.
  3. ìí(íê): ëìí ëìë ìëëë êìì ìë ììì íì ëìëíë êì íì(Starvation)ì ëìíëë, ìì OSë íìì(ëì ììí)ê êíì(Fairness) ìììì ìíêë íë C-SCANìë CFQ êì íìëëë ìêëììë ìí ìííë.

. êì ë íìì (Context & Necessity)

  • êë: ììììì ëë I/O ëìì ììë I/O ìììëëë ìíêì ì ìë. ì 3êê ëë 10ë, ëë 1000ë, ëë 20ëì ììëëê íì ëìë. ëë(ëìí)ë ëìì ììëë 10ë -> 1000ë -> 20ë ììë ëëì ëëêíë ìëë. ìììëë ì ëëì êëìì 10ë -> 20ë -> 1000ë ììë ì ììëí ìë. ëëì í ëíìë ìëìíê ììíë ìì ìê ëëë ììí ëììë.

  • íìì: CPUë ëì ìëë êìì ëìê I/O ìì ìë êë 1ì ëì íì ëìëëë. íìë íëëìíë ëëì í ë ì~ íê ìììëë ëë 8ëëìê êëë. ëì ëëì 1ë íëê 1ë ë íëì íê ìë ìë êë íëë? ëë ìììë ëë ìêì ë êê, ìì ëìíë ìì ìëë ìêì 1%ë ì ëë 'ëìí ìëì(Disk Thrashing)' ììì íììë. "ìëêë ì ëìíê ëêì ìëìë(ëë)ê íêìíì ìê ëìì ìëíê ììì!"ëë ìëíì ìììëì ìì ììë.

  • ð ëì: ëìí ìììëì íë êìëì ìëí ëì ëí ìêì êë. êëê, ëìê, ìíêìì íë ìì ëììë 100ê ëììë. ìë êì(ìììë ìì)ë ìì ëìì ìê ììëë êë êëê ëì êëê ëì êë êë ëë ìì íëë íëì 10ê ëëíê ëìëëë(íì ìê ëë). ëíë êì(I/O ìììë)ë ììì ì 100êë ìëë ì íëê, êë -> ìí -> ëììë í ëì ì íê ìëêë ììì ëì(ìëëìí ìêëì)ì ìë. ëìì ìììë êëê(ìëíë)ì ìêìê íëì 100ê(Throughput)ì ë ìë ì ìë.

  • ëì ëê ë OSì ììë:

    1. FCFSì ìì: ëì ììí ë ëì ìëí ìëë ëìí ëëì êì() ìë ìì ìë ìëê ììëë.
    2. ëë ëìì íê: ëìí ëí ìë(RPM)ë ìëë ëë ëìê ìììëë íêê ëííë. íëìì ìíìì ëí.
    3. ìííììì ëì ìë: "íëììê ë ëëìë, ìííììê êì ëëíê ìëìì ëëë ììì"ë ììí ììì ìëì ììë.

        ìììë ìëì ëë ëìí ëë(Head) ëìì ëìí ìì ìêí 

                                                                         
 [ ìí: íì ëë ìì 50ë / ìì í: 90ë, 10ë, 80ë, 20ë ]         
                                                                         
  1. ìììë ìì (ëìì ììëë FCFS)                               
  ëì: 50 (ìëë 40) 90 (ìëë 80) 10                       
        (ìëë 70) 80 (ìëë 60) 20                          
  ð ì ëë ìë êë = 40 + 80 + 70 + 60 = 250 íë ìë!              
  (ëëì ìëìë ììíìë ëì ëì ëëë ììëë ë)              
                                                                         
  2. ëëí ëìí ìììë (êëì SSTF / ëíì SCAN)                 
  í ììë ëë! -> êêì êëí íê êì!                            
  ëì: 50 (ìëë 30) 80 (ìëë 10) 90                       
        (ìëë 70) 20 (ìëë 10) 10                          
   ì ëë ìë êë = 30 + 10 + 70 + 10 = 120 íë ìë!              
  (ìë êëê ìë ìì ììëë ëìí ìë ìëê 2ë ëëì ð)      

[ëììêë íì] ì ëìí ììê ëìí ìììëì ìëíì 100% ìëíë. ëë ìë êëê 250ìì 120ìë ììëë êì, ìë ìê(Latency)ì 2ë ëëìê ëì ìêë ìëë(Throughput)ì 2ë ëìëëë ëìë. OSë ëì ëëë ëìì ììë 0.001ì ëì ëêì ëìë, êê ììì ëëì íìì êê ëíê ìììë.

  • ð ìì ìì ëì: ëíìì ìì ë ë, ìëê ììì êë ëìí(í) ììëë "ìì ìëê êê ìëê ëì ìì ìë ì ìì ìë" ìíë ìëìë ëê ëëë ê íììëë. êìë ìí ëê ìì ëìíë ì ëê "ìì ìë ì ëê, ìì ìë ì ëì"ë ìí ëì(ìììë)ì ìì 10ë ëì ìëêë ëëë ëìëë.

. ìííì ë íì ìë (Deep Dive)

ëìí ìììëì 2ë ìë ëí

ìììì ìììëë íì ëìëë ë ëë íëë ìëë.

  1. íì ìê(Seek Time) ììí = ìì ìëë(Throughput) êëí

    • ìë: êì ëëì ììì ê, ìê ë ëë ìììì ìì êêì ëëí ìì ìëíë ê ìì ìêë íìììë. ìë ëì ëëê ìì ìììë.
    • ëìì: êêì ëë ìêë ëë, 100ë ë íë êìì ìë ììì ìëë ìë êëëë íì ëëì ìì ìëë. ììí íìì ììë í ëì íëëì íëë.
  2. êíì (Fairness) ëì = êì ìí(Starvation) ëì

    • ìë: êìì ëíìë ëíë, ëë ìë êëë ëì ëìíëê ëìê êì ìëí ìì íë. ìë ìêì êë(Variance)ì ììë êìë.
    • ëìì: ì ëë ìë ë íë ìëíìêëê ëëì ëêë ëêì ìêì íë. ëëì ìëíë ìê ëì ëìíë ìë ëìíë ë í ëëëë ìì ììí íì(Throughput)ì ë ëììë.

ììëëì ìíê (Trade-off)

ëë ëìí ìììë ìêëì(FCFS, SSTF, SCAN ë)ì ììì ëìì ì 'íìì'ê 'êíì' ìììì ìì íë ìììê ëì ììë êëìë.

  • ëìì íì(êêì ê)ë ìêíë êìì ëìíê êì ìê(SSTFì ìí).

  • ëìì êííê ììëë íë ëëì ëë íëì ìëê ëë íìë(FCFSì ìí).

  • êê "ìëëìíìë í ëíìë ì íê ìëêë êííê ìëíë, ëíì ì êìì íìë ìêì!"ë ììì ííì(SCAN ìêëì)ì ëìíë ììì ìëíê ëë. (ëì íìëëìì ìì ìë).

  • ð ìì ìì ëì: ìêì ëëì(ëìí)ì 'êêì ì 10ê'ë ëì ëëíë ëëë(ìëë)ì ìêìë, ëëì 1ìê ìì ìí 1ìì ëì ë ëì íì íëì(êì ìí)ì êëëë. êëëê ëìê 'ìë ëìì ìì'ëë 1ìê ì ì 1ê êëê ëì ëëë ìë êìì 10ìì ë ëì íìëë. ì ëìê ìê ììì ììì ëëìë ìë ëë ì AIê ëë ëìí ìììëìëë.


. ìí ëê ë ëêë ëì

CPU ìììë vs ëìí I/O ìììë

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

ëê ìëCPU ìììë (ëê ìììë)ëìí I/O ìììë (ëë ëìì)
êë ëìëëì 0/1 ìííìì ìëë (ììêì êì êë)ëêê ëë êêì ëë ëë(Head)
ììì ëíìì ìëì(Response Time)ê êíì (íì íí)êêì ëì ëë ìì (Seek Time ììí)
ìì(Preemption)íë ì ëê ëì ìë 0.001ì ëì êì êëí ë ëë ìììê ììíë ìë ìì ëêë
ìì ìêëìRound-Robin, MLFQSCAN (ìëëìí), CFQ (ìì êí íì)

Page Cache (ëí)ìì êëí êì ìì

ëìí ìììë íììë ìëë ìì ìë í(Queue)ì ììì ë ê ììë ëì ììíë í ìê ìë.

  • íì 10ë, 5000ë ë êëì ììë ëìê ëëêë íì íë.
  • ëí ììì íë: OSì 'íìì ìì(Page Cache)'ê ëìì ëìíë êê ëìëë(ìì ìê).
  • 5ì ìë ê ìê ëìëë ëíì ìê ììì 1ë êë ììë!
  • ëí ììê ì 1ë êì ììì í ëì ëìí ìììë íë ììëëë(Flush).
  • ìììëë ì 1ë êì ëëí ìì í(Pool)ì êìê ìëíê ììí ìëëìí ëìì ìì, ëëì 1mm ììì ëëë ëìíë íêíë ììëë ìëìì I/O ìëíì ëìíë. I/O ìììëì ë ììì ëíë ëìê(Batching) ììë ìëí ì ìë ìììë.

 ìì íê   í(Queue) ìí  ìììëì êë  I/O ìëí êê     

 ëê ìëìë 1~2ê í ë   ìëí ê ìì ï ìì (ëë íë)   
 ìì íëëí 1ëê ê ì   ííëì ëìì ð ìì (ëë ì ì) 

[ëíëì íì] "ëì ëììì ëë ìëë." I/O ìììëì íìì í ìì ìì ëêíì êìì ìëíê ëëíë. ìíìê ëìì ìë êëë ììíê êë ì ìê ëëìë. ìêì ëë DB ìëëì ììíê êì ì ìê ëêë ë MB ëìë ëëíê ëìì(Bulk Insert) OSì ëììë íì ììë.

  • ð ìì ìì ëì: íë êì(ëìí ìììë)ê ëê ëë ëìì ìëëë, ëììì ëêì 1êìë ëëìë ìë êëê ëëìê êë êì ìë ë ìëì ììëë. ëì(ëí ìì)ê íë 1ë êë íëëì í ëì í ëëìì, êìê ëëëë ëìì êì ìëí 1ëí ëìì ìì íê ìêì 3ìê ëê ì ìë ìììëë.

. ìë ìì ë êììì íë (Strategy & Decision)

ìë ìëëì: SSD ìëì ëìí ìììë ëìë (Noopì ìë)

ìíí ììì êì ìëí "ìêëìì ìì" ìêìë.

  1. êêì ìê: 2010ë ìì íëëìí(HDD) ìì, ììëìëì ì I/O ëì(Seek Time)ì ììê ìí C-SCAN, Deadline, CFQ ë ìì ìì ëìí ìíì ìììë ìêëìì ëëì ëë. ì ìêëì íëê ìë ìëì 2ëì ìëë.
  2. SSDì íêì ëì:
    • ëë(Head)ë ìê ìíë ìë ëëì SSDê íìëìë.
    • 1ëìë 100ë ëìë ìê ìë ìëê 0.001msë 100% ëêë (Seek Time = 0).
  3. ìììëì ìí êê:
    • ëëì OSê ìë ëë ë ëëê SSD ìììë CFQ(ìëëìí) ìììëë ëëë.
    • ëìì ììì ëíììë ììê ì ìë(Sorting)íëë ììí CPU ììë íëê 0.1ì ëì ëëìë.
    • êëë ìì SSDë ììê ìëëë ëìëììë ìëê ëêìë! ìììëì ìë ëêëê ìëí **íìê(Overhead)**ê ëìëëë.
  4. ììëìì ìí (noop / none):
    • ìëìëì SSDê ëë ìëìì OS ëë ìììëë **noop (No Operation, ìë ìë ì íê ëìì ëë ìì ëê)**ìë ëêëëë.
    • ìë ììì ì íë CPUê ëëíìê, ììë IOPSê êëë SSDì êíë ëì ìëíë.
    • ëëì êê íì ìëì íë ìë íêìì êìì ëìí ìììëì 'ëì'ì ìë ê ìëì ëíê ìì ììë íì ììë.
  • ð ìì ìì ëì: ìí ìê(HDD)ìì ëíí ëê ììë ììì(ìììë) ììì ë íêíê ëëëë. íìë ìíë ëí ì(SSD)ì ëìëëë, êì ìì 1ë ëì ìëíí ëìì ëíììë ìì ìì ë(ìììë ìëíë) 1ëì ì ëíì ëëê íëë ëì ììì. ìì 1ë ëì ëìì ëëë(noop) ê ëìê ìëìëë.

. êëíê ë êë (Future & Standard)

ìë/ìì êëíê

êëëì
íëìì ìë(Wear) ììëììë íë ëëì êëì/êìêë ëê í ëíìë ëëëê íê ëëì, íëëìí ììììí ëíì ëëì ëëìì êììë êì
ìëë(Throughput) êëíëìíê êì ìííë Seek Time(8ms) ëëë ìëì íí 1ms ìíë ììíì ìë ìê/ìê ìëì ìë íììí
QoS (Quality of Service) ëìêíìì êëí ëëëì(Deadline) ìêëìì íí, êìì ëí íììëë 1ì ììë ëìê ìëì ëê íì ììí ëì ëì

êë ë ëë ìë

ëìí ìììë (Disk Scheduling)ì ìêê ëíí ìëìë(êê)ì íêë ëìê ìí, ìííììê ìêì ìê(ìëëìí ììì ë)ì ìëë êííì ëììì ëëêì ëìì ììë. "êêì ê ëì", "êë êì ìê" êì ìêí ìììì íë ííì ìëì í(Queue) êìë ëíëìì ë, ìíí ììí ììì ìëíì ëëìë íì ìëë êíì ìíëììë ìëíë. ëë ëë íëì(SSD)ì ìëê ëëíì "ëë ìë ììí"ëë ëëì ëìì ëëêì ìëë ìëìê none/noopì ê ìëë êììë, "ìëì ëëê ììì ììì ë êêì ëíì ëì ëí(Merge)íê ììì ììë ìë(Sort)íì íìì ëìë"ë I/O ìììëì ìë ìíì ëì ëíìí í ëìíìë íëìë ìíëì API ëëëëìì ìì ëììë ììí íìíì ììê êìë.

  • ð ìì ìì ëì: êíìê(I/O ìììë)ì ìêëìì ììíë êì ì(ëìí)ëì ììê ìëíì êí ììì íììë ìëí ìììììëë. íë íëì ëë íëì ì(SSD) ìëê ìì êìë ììê ìììê ìêì ììíìë, ìëì êëë êìì ìê íìíë ê 'êí íìì ìí'ì ìì íê êìí(ëíìí ìììë)ì êë ëëìë ììí ëê ë êê êìëë.

ð êë êë ë (Knowledge Graph)

  • íì ìê (Seek Time) | ëìí ìììëì ëìì êê ììëê íë, ëëì íëì ìì ììêëë ëìí ëëì ëëì
  • ìëì (Thrashing) | ìììëì êíìë íì ëëì ëëêíëë ëìí I/Oê 100%ë ìê CPUê êìíë ëë ìí
  • FCFS / SSTF / SCAN | ëì ììíì êíì ìììì ìíêë íë ëìí ì ëìí ìììëì êìì ìêëì íìë
  • noop / none ìììë | ìëìë ëëì ìë SSD íêìì, OSì ìëìë ìë ìëíëë ëê ìì íêìíë íë ìêì íëê
  • ëí ìì (Buffer Cache) | ìììëê ëì(ííëì)ì ììê ì ì ìëë ëì ëëì ëìíë ììê ëìëë ëëí ììì

ð ìëìë ìí 3ì ëì ìë

  1. ëìí ìììëì ëêì? ìëëê(ëìí ëë)ì 1ììì ìì, 5ììì ìê, 2ììì ëì êììì í ë, ìë(OS)ê ììì ëìì ììê ëì ìììë êìì.
  2. ìëê ìììëì? êë ëë ìì(1->5->2ì)ëë ìë êë íë ëëê ëëìëê, ìëê "1ì ìì -> 2ì ë -> 5ì ìê" ììë ìëëìí íê í ëì ìëêëì ì ìììê(ìììë) ììë ì êììì!
  3. êë ëê ìëì? ìëëê ëë(êê)ë ì ìíê, ëê ëìë ììë ëêêì êëëë ìê(ë)ì ììëê ìììë ëëí ëëìëëë!