Computer Science/OS

๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐ 3์žฅ. ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋Ÿฌ

์ฑ”๐Ÿป 2024. 1. 29. 09:11

์ถœ์ฒ˜: ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐ

๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐ - ์˜ˆ์Šค24
์„ ๋ฐฐ๊ฐ€ ์˜†์—์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์•Œ๋ ค์ฃผ๋“ฏ ์นœ์ ˆํžˆ ์„ค๋ช…ํ•ด์ฃผ๋Š”์‹ค์Šต๊ณผ ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ์ง€์‹์˜ ๋ชจ๋“  ๊ฒƒ * Go ์–ธ์–ด์™€ Python, Bash ์Šคํฌ๋ฆฝํŠธ ์‹ค์Šต ์ฝ”๋“œ ์ œ๊ณต* ์ด ๋„์„œ๋Š” ใ€Ž์‹ค์Šต๊ณผ ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐใ€์˜ ๊ฐœ์ •ํŒ์ž…๋‹ˆ๋‹ค.๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์ฑ…์˜ ๋‘๊ป˜์™€ ๊นŠ์ด์— ...
https://www.yes24.com/Product/Goods/122109062

์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋Œ€๋ถ€๋ถ„ ์Šฌ๋ฆฝ ์ƒํƒœ

ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋Ÿฌ : ํ”„๋กœ์„ธ์Šค์— CPU ์ž์› ํ• ๋‹น์„ ๋‹ด๋‹นํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๊ธฐ๋Šฅ(์ดํ•˜ ์Šค์ผ€์ค„๋Ÿฌ)

  • ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ CPU๋Š” ๋™์‹œ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ฒ˜๋ฆฌ
  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ๋‹จ์œ„๋กœ ์ˆœ์„œ๋Œ€๋กœ CPU๋ฅผ ์‚ฌ์šฉ

p0, p1, p2 ํ”„๋กœ์„ธ์Šค

๊ธฐ๋ณธ ์ง€์‹: ๊ฒฝ๊ณผ ์‹œ๊ฐ„๊ณผ ์‚ฌ์šฉ ์‹œ๊ฐ„

๊ฒฝ๊ณผ ์‹œ๊ฐ„(real) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„

์‚ฌ์šฉ ์‹œ๊ฐ„(user+sys) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹ค์ œ๋กœ ๋…ผ๋ฆฌ CPU๋ฅผ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„

๊ฒฝ๊ณผ์‹œ๊ฐ„(real) โ‰’ ์‚ฌ์šฉ์‹œ๊ฐ„(user+sys)

time : ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ ๊ฒฝ๊ณผ์‹œ๊ฐ„๊ณผ ์‚ฌ์šฉ์‹œ๊ฐ„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

#!/usr/bin/python3

# ๋ถ€ํ•˜ ์ •๋„๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฐ’.
# time ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ช‡ ์ดˆ ์ •๋„์— ๋๋‚˜๋„๋ก ์กฐ์ ˆํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์ข‹์Œ
NLOOP=100000000

for _ in range(NLOOP):
    pass

CPU ์ž์›์„ ์†Œ๋ชจํ•˜๋Š” ์˜ˆ์ œ

real	0m1.523s # ๊ฒฝ๊ณผ์‹œ๊ฐ„
user	0m1.519s # ์‚ฌ์šฉ์‹œ๊ฐ„ : ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ๋™์ž‘ํ•œ ์‹œ๊ฐ„
sys	0m0.004s   # ์‚ฌ์šฉ์‹œ๊ฐ„ : ์‹œ์Šคํ…œ ์ฝœ๋กœ์ธํ•ด ๋Š˜์–ด๋‚œ ์ปค๋„์ด ๋™์ž‘ํ•œ ์‹œ๊ฐ„

sleep์€ CPU ๊ฑฐ์˜ ์‚ฌ์šฉ ์•ˆ ํ•จ

๋…ผ๋ฆฌ CPU ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • multiload.sh
    #!/bin/bash
    
    MULTICPU=0
    PROGNAME=$0
    SCRIPT_DIR=$(cd $(dirname $0) && pwd)
    
    usage() {
        exec >&2
        echo "์‚ฌ์šฉ๋ฒ•: $PROGNAME [-m] <ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜>
        ์ผ์ • ์‹œ๊ฐ„ ๋™์ž‘ํ•˜๋Š” ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ <ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜>๋กœ ์ง€์ •ํ•œ ๋งŒํผ ๋™์ž‘์‹œ์ผœ์„œ ๋ชจ๋‘ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
        ๊ฐ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
        ๊ธฐ๋ณธ๊ฐ’์€ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ 1๊ฐœ์˜ ๋…ผ๋ฆฌ CPU์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    
    ์˜ต์…˜ ์„ค๋ช…:
        -m: ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ CPU์—์„œ ๋™์ž‘์‹œํ‚ต๋‹ˆ๋‹ค."
        exit 1
    }
    
    while getopts "m" OPT ; do
        case $OPT in
            m)
                MULTICPU=1
                ;;
            \?)
                usage
                ;;
        esac
    done
    
    shift $((OPTIND - 1))
    
    if [ $# -lt 1 ] ; then
        usage
    fi
    
    CONCURRENCY=$1
    
    if [ $MULTICPU -eq 0 ] ; then
        # ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ๋ฅผ CPU0์—์„œ๋งŒ ์‹คํ–‰์‹œํ‚ด
        taskset -p -c 0 $$ >/dev/null
    fi
    
    for ((i=0;i<CONCURRENCY;i++)) do
        time "${SCRIPT_DIR}/load.py" &
    done
    
    for ((i=0;i<CONCURRENCY;i++)) do
        wait
    done

ํ”„๋กœ์„ธ์Šค๋ฅผ 1๊ฐœ๋กœ ์ง€์ •ํ•ด์„œ ์‹คํ–‰ โ†’ load ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ฒฐ๊ณผ์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

๋™์‹œ ์‹คํ–‰์„ 2, 3์„ธ๊ฐœ๋กœ ๋Š˜๋ ธ์„ ๋•Œ๋Š”

์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ์ˆœ์„œ๋Œ€๋กœ CPU ์ž์›์„ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์‹คํ–‰ ์‹œ๊ฐ„์€ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜์— ๋น„๋ก€ํ•œ๋‹ค.

๋…ผ๋ฆฌ CPU ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

multiload.sh์— -m ์˜ต์…˜์„ ์ง€์ •ํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋“  ๋…ผ๋ฆฌ CPU์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•œ๋‹ค.

๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—์„œ real๊ณผ user+sys ๊ฐ’์ด ๊ฑฐ์˜ ๊ฐ™๋‹ค.

โ†’ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ๋…ผ๋ฆฌ CPU ์ž์›์„ ๋…์ ํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

real๋ณด๋‹ค user+sys๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ

real โ‰ฅ user + sys ์ผ ๊ฒƒ ๊ฐ™์ง€๋งŒ

์‹ค์ œ๋กœ๋Š” user + sys๊ฐ€ real ๊ฐ’๋ณด๋‹ค ์กฐ๊ธˆ ๋” ํฐ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

โ†’ ์ธก์ • ์ •๋ฐ€๋„๊ฐ€ ๊ทธ๋‹ค์ง€ ๋†’์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ์‹ ๊ฒฝ ์“ธ ํ•„์š” ใ„ดใ„ด

$ time ./multiload.sh -m 2

real	0m1.580s
user	0m1.576s
sys	0m0.004s

real	0m1.684s
user	0m1.683s
sys	0m0.000s

real	0m1.696s
user	0m3.266s
sys	0m0.011s

1, 2 : ๋ถ€ํ•˜์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ

3 : ํ”„๋กœ๊ทธ๋žจ ๊ทธ ์ž์ฒด์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ

time ๋ช…๋ น์–ด๋กœ ์–ป์€ user์™€ sys ๊ฐ’์€ ์ •๋ณด ํ™•์ธ ๋Œ€์ƒ์˜ ํ”„๋กœ์„ธ์Šค ๋ฐ ์ข…๋ฃŒ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’์ด๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋…ผ๋ฆฌ CPU์—์„œ ๋™์ž‘ํ•œ๋‹ค๋ฉด real๋ณด๋‹ค user+sys ๊ฐ’์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.

multiload.sh๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น.

ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค

ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค : CPU ์Šค์ผ€์ค„๋ง์—์„œ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ„์„ ๋‚˜๋ˆ„๋Š” ๋‹จ์œ„

  • sched.py
    #!/usr/bin/python3
    
    import sys
    import time
    import os
    import plot_sched
    
    def usage():
        print("""์‚ฌ์šฉ๋ฒ•: {} <ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜>
            * ๋…ผ๋ฆฌ CPU0์—์„œ <ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜>๋งŒํผ ๋™์‹œ์— 100๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ CPU ์ž์›์„ ์†Œ๋น„ํ•˜๋Š” ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋™ํ•˜๊ณ  ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
            * 'sched-<ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜>.jpg' ํŒŒ์ผ์— ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
            * ๊ทธ๋ž˜ํ”„ x์ถ•์€ ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ๊ณผ ์‹œ๊ฐ„[๋ฐ€๋ฆฌ์ดˆ], y์ถ•์€ ์ง„์ฒ™๋„[%]""".format(progname, file=sys.stderr))
        sys.exit(1)
    
    # ์‹คํ—˜์— ์•Œ๋งž๋Š” ๋ถ€ํ•˜ ์ •๋„๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ „์ฒ˜๋ฆฌ์— ๊ฑธ๋ฆฌ๋Š” ๋ถ€ํ•˜
    # ๋„ˆ๋ฌด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉด ๋” ์ž‘์€ ๊ฐ’์„ ์‚ฌ์šฉ
    # ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋๋‚˜๋ฉด ๋” ํฐ ๊ฐ’์„ ์‚ฌ์šฉ
    NLOOP_FOR_ESTIMATION=100000000
    nloop_per_msec = None
    progname = sys.argv[0]
    
    def estimate_loops_per_msec():
        before = time.perf_counter()
        for _ in  range(NLOOP_FOR_ESTIMATION):
            pass
        after = time.perf_counter()
        return int(NLOOP_FOR_ESTIMATION/(after-before)/1000)
    
    def child_fn(n):
        progress = 100*[None]
        for i in range(100):
            for j in range(nloop_per_msec):
                pass
            progress[i] = time.perf_counter()
        f = open("{}.data".format(n),"w")
        for i in range(100):
            f.write("{}\t{}\n".format((progress[i]-start)*1000,i))
        f.close()
        exit(0)
    
    if len(sys.argv) < 2:
        usage()
    
    concurrency = int(sys.argv[1])
    
    if concurrency < 1:
        print("<๋™์‹œ ์‹คํ–‰>์€ 1์ด์ƒ์˜ ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: {}".format(concurrency))
        usage()
    
    # ๊ฐ•์ œ๋กœ ๋…ผ๋ฆฌ CPU0์—์„œ ์‹คํ–‰
    os.sched_setaffinity(0, {0})
    
    nloop_per_msec = estimate_loops_per_msec()
    
    start = time.perf_counter()
    
    for i in range(concurrency):
        pid = os.fork()
        if (pid < 0):
            exit(1)
        elif pid == 0:
            child_fn(i)
    
    for i in range(concurrency):
        os.wait()
    
    plot_sched.plot_sched(concurrency)
  • plot_sched.py
    #!/usr/bin/python3
    
    import numpy as np
    from PIL import Image
    import matplotlib
    import os
    
    matplotlib.use('Agg')
    
    import matplotlib.pyplot as plt
    
    plt.rcParams['font.family'] = "NanumGothic"
    plt.rcParams['axes.unicode_minus'] = False
    
    def plot_sched(concurrency):
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1)
        for i in range(concurrency):
            x, y = np.loadtxt("{}.data".format(i), unpack=True)
            ax.scatter(x,y,s=1)
        ax.set_title("ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ๊ฐ€์‹œํ™”(๋™์‹œ ์‹คํ–‰={})".format(concurrency))
        ax.set_xlabel("๊ฒฝ๊ณผ ์‹œ๊ฐ„[๋ฐ€๋ฆฌ์ดˆ]")
        ax.set_xlim(0)
        ax.set_ylabel("์ง„์ฒ™๋„[%]")
        ax.set_ylim([0,100])
        legend = []
        for i in range(concurrency):
            legend.append("๋ถ€ํ•˜ ์ฒ˜๋ฆฌ"+str(i))
        ax.legend(legend)
    
        # Ubuntu 20.04์˜ matplotlib ๋ฒ„๊ทธ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ png ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ํ›„์— jpg๋กœ ๋ณ€ํ™˜
        # https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/1897283?comments=all
        pngfilename = "sched-{}.png".format(concurrency)
        jpgfilename = "sched-{}.jpg".format(concurrency)
        fig.savefig(pngfilename)
        Image.open(pngfilename).convert("RGB").save(jpgfilename)
        os.remove(pngfilename)
    
    def plot_avg_tat(max_nproc):
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1)
        x, y, _ = np.loadtxt("cpuperf.data", unpack=True)
        ax.scatter(x,y,s=1)
        ax.set_xlim([0, max_nproc+1])
        ax.set_xlabel("ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜")
        ax.set_ylim(0)
        ax.set_ylabel("ํ‰๊ท  ํ„ด์–ด๋ผ์šด๋“œ ํƒ€์ž„[์ดˆ]")
    
        # Ubuntu 20.04์˜ matplotlib ๋ฒ„๊ทธ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ png ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ํ›„์— jpg๋กœ ๋ณ€ํ™˜
        # https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/1897283?comments=all
        pngfilename = "avg-tat.png"
        jpgfilename = "avg-tat.jpg"
        fig.savefig(pngfilename)
        Image.open(pngfilename).convert("RGB").save(jpgfilename)
        os.remove(pngfilename)
    
    def plot_throughput(max_nproc):
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1)
        x, _, y = np.loadtxt("cpuperf.data", unpack=True)
        ax.scatter(x,y,s=1)
        ax.set_xlim([0, max_nproc+1])
        ax.set_xlabel("ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜")
        ax.set_ylim(0)
        ax.set_ylabel("์Šค๋ฃจํ’‹[ํ”„๋กœ์„ธ์Šค/์ดˆ]")
    
        # Ubuntu 20.04์˜ matplotlib ๋ฒ„๊ทธ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ png ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ํ›„์— jpg๋กœ ๋ณ€ํ™˜
        # https://bugs.launchpad.net/ubuntu/+source/matplotlib/+bug/1897283?comments=all
        pngfilename = "throughput.png"
        jpgfilename = "throughput.jpg"
        fig.savefig(pngfilename)
        Image.open(pngfilename).convert("RGB").save(jpgfilename)
        os.remove(pngfilename)

for i in 1 2 3; do ./sched.py $i; done
  • ํ•ด์„

    ํ•ด๋‹น ๋ช…๋ น์–ด๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋ช…๋ น์–ด ๋ฃจํ”„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž 1, 2, 3์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณ€์ˆ˜ i์— ํ• ๋‹นํ•˜๊ณ , ./sched.py ์Šคํฌ๋ฆฝํŠธ์— ์ด ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ์ ์€ ./sched.py ์Šคํฌ๋ฆฝํŠธ๋ฅผ 1, 2 ๋ฐ 3๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ธ์ˆ˜์™€ ํ•จ๊ป˜ ์„ธ ๋ฒˆ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    ๊ตฌ์ฒด์ ์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ๋ถ„์„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    1. for i in 1 2 3; : ์ด ๋ถ€๋ถ„์€ 1, 2 ๋ฐ 3๊ณผ ๊ฐ™์€ ์ˆซ์ž๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณ€์ˆ˜ i์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
    1. do : ๋ฃจํ”„์˜ ๋ณธ๋ฌธ์ด ์‹œ์ž‘๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    1. ./sched.py $i : $i๋Š” ๋ณ€์ˆ˜ i์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ๋Š” ./sched.py 1, ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ๋Š” ./sched.py 2, ์„ธ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ๋Š” ./sched.py 3๊ณผ ๊ฐ™์ด ./sched.py ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    1. done : ๋ฃจํ”„๊ฐ€ ์ข…๋ฃŒ๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ์ด ๋ช…๋ น์–ด๋Š” ./sched.py ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆซ์ž 1, 2 ๋ฐ 3๊ณผ ํ•จ๊ป˜ ์„ธ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” ์Šคํฌ๋ฆฝํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<์‹คํ–‰ ๊ฒฐ๊ณผ>

โ†’ 1๊ฐœ์˜ ๋…ผ๋ฆฌ CPU์—์„œ ์—ฌ๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ๊ฐ์˜ ์ฒ˜๋ฆฌ๋Š” ์ˆ˜๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋กœ ์ชผ๊ฐœ์„œ CPU๋ฅผ ๊ต๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


Column) ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ๊ตฌ์กฐ

๋ฆฌ๋ˆ…์Šค ์Šค์ผ€์ค„๋Ÿฌ๋Š” sysctl์˜ kernel.sched_latency_ns์— ์ง€์ •ํ•œ ๋ชฉํ‘œ ๋ ˆ์ดํ„ด์‹œ ๊ฐ„๊ฒฉ์— ํ•œ ๋ฒˆ์”ฉ CPU ์‹œ๊ฐ„์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค = kernel.sched_latency_ns / <๋…ผ๋ฆฌ CPU์— ์‹คํ–‰ ์ค‘ ๋˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅ ์ƒํƒœ์ธ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜>

์–ด๋–ค ๋…ผ๋ฆฌ CPU์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ 2~4๊ฐœ์ผ ๋•Œ ๋ชฉํ‘œ ๋ ˆ์ดํ„ด์‹œ์™€ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ๊ด€๊ณ„

โ‡’ ์š”์ฆ˜ ์‚ฌ์šฉํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•จ.(์˜›๋‚ ์—๋Š” ๊ณ ์ •๊ฐ’์ด์—ˆ์Œ)

nice : ํ”„๋กœ์„ธ์Šค ์šฐ์„ ๋„ ๊ฐ’

๋ถ€ํ•˜์ฒ˜๋ฆฌ 0์ด ๋ถ€ํ•˜์ฒ˜๋ฆฌ 1๋ณด๋‹ค ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ฅผ ๋งŽ์ด ๊ฐ€์ ธ๊ฐ”๋‹ค.

%nice : nice ๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’ 0๋ณด๋‹ค ์ปค์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ์‹คํ–‰๋œ ์‹œ๊ฐ„

%user : nice๊ฐ’ 0์ธ ๊ฒฝ์šฐ

๐Ÿ’ก์Šค์ผ€์ค„๋Ÿฌ ๊ตฌํ˜„ ๋‚ด์šฉ์€ POSIX ์‚ฌ์–‘์œผ๋กœ ์ •ํ•ด์ง„ ๋‚ด์šฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ปค๋„ ๋ฒ„์ง„์ด ๋ฐ”๋€Œ๋ฉด ๋ณ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ex. kernel.sched_latency_ns ๊ธฐ๋ณธ๊ฐ’์€ ์ง€๊ธˆ๊นŒ์ง€ ๋ช‡ ๋ฒˆ์”ฉ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ํ•จ. ์•ž์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€”์ง€ ๋ชจ๋ฅด๋‹ˆ ์ฃผ์˜ํ•˜๊ธฐ

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ : ๋…ผ๋ฆฌ CPU์—์„œ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ „ํ™˜๋˜๋Š” ๊ฒƒ

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋“  ๊ฐ„์— ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฐœ์ƒ๋œ๋‹ค.

foo() ์งํ›„์— bar()๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ๋ณด์žฅ X

์ฒ˜๋ฆฌ์— ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๋•Œ, โ€˜์ฒ˜๋ฆฌ ์ž์ฒด์— ๋ฌด์Šจ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒŒ ๋ถ„๋ช…ํ•˜๋‹คโ€™๊ณ  ๋‹จ์ˆœํžˆ ๊ฒฐ๋ก  ๋‚ด๋ฆฌ๊ธฐ๋ณด๋‹ค๋Š” โ€˜์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค.โ€™๋ผ๋Š” ๊ด€์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜๋ฆฌ ์„ฑ๋Šฅ

ํ„ด์–ด๋ผ์šด๋“œ ํƒ€์ž„ : ์ฒ˜๋ฆฌ ์‹œ๊ฐ„. ์‹œ์Šคํ…œ์— ์ฒ˜๋ฆฌ๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

์Šค๋ฃจํ’‹ : ์ฒ˜๋ฆฌ๋Ÿ‰. ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ฒ˜๋ฆฌ๋ฅผ ๋๋‚ธ ๊ฐœ์ˆ˜.

๋…ผ๋ฆฌ CPU 1๊ฐœ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์ตœ๋Œ€ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ 8๋กœ ์ง€์ •ํ•ด์„œ ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰

  • ํ‰๊ท  ํ„ด์–ด๋ผ์šด๋“œ ํƒ€์ž„ : ๋ชจ๋“  ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ์˜ real ๊ฐ’์˜ ํ‰๊ท 
  • ์Šค๋ฃจํ’‹ : ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ multiload.sh ํ”„๋กœ๊ทธ๋žจ์˜ real๊ฐ’์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’
./cpuperf.sh 8

ํ‰๊ท  ํ„ด์–ด๋ผ์šด๋“œ ํƒ€์ž„ = ์ฒ˜๋ฆฌ์‹œ๊ฐ„

์Šค๋ฃจํ’‹ = ์ฒ˜๋ฆฌ๋Ÿ‰

ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜ โ†‘ โ†’ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋„ ๋งŽ์•„์ง โ†’ ํ‰๊ท  ์ฒ˜๋ฆฌ์‹œ๊ฐ„ โ†‘, ์Šค๋ฃจํ’‹์€ ๋–จ์–ด์ง โ†“

โ†’ CPU๋ฅผ ๋‹ค ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋งŒ ๋Š˜๋ฆฐ๋‹ค๊ณ  ์„ฑ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐ ์•ˆ๋จ(์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋•Œ๋ฌธ์—)

์‘๋‹ต ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์ด๋ผ๋ฉด ์Šค๋ฃจํ’‹์ด ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์— ๋น„ํ•ด์„œ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ธฐ๊ธฐ์˜ CPU ์‚ฌ์šฉ๋ฅ ์„ ์ ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”


์•„๋ž˜๋Š” ๋ชจ๋“  ๋…ผ๋ฆฌ CPU๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘.

๋…ผ๋ฆฌ CPU ๊ฐœ์ˆ˜ ํ™•์ธ : grep -c processor /proc/cpuinfo

./cpuperf.sh -m 8

ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๊ฐ€ ๋…ผ๋ฆฌ CPU๊ฐœ์ˆ˜(์—ฌ๊ธฐ์„œ๋Š” 4)์™€ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€๋Š” ํ‰๊ท  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ฒœ์ฒœํžˆ ๋Š˜์–ด๋‚˜์ง€๋งŒ โ†’ ํ•œ ๋…ผ๋ฆฌ CPU์— ํ•œ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค

๊ทธ ํ›„๋Š” ๊ฐ‘์ž๊ธฐ ๊ธธ์–ด์ง„๋‹ค. โ†’ ํ•œ ๋…ผ๋ฆฌ CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค ๋‹ด๋‹น

์Šค๋ฃจํ’‹์€ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜์™€ ๋…ผ๋ฆฌ CPU ๊ฐœ์ˆ˜์™€ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ํ–ฅ์ƒ๋˜์ง€๋งŒ ๊ทธ ํ›„์—๋Š” ํ•œํ’€ ๊บพ์ธ๋‹ค.

โœ…
<์ •๋ฆฌ>
  • ๋…ผ๋ฆฌ CPU๊ฐ€ ๋งŽ์ด ๋‚ด์žฅ๋œ ๊ฒฝ์šฐ๋ผ๋„ ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ๋น„๋กœ์†Œ ์Šค๋ฃจํ’‹์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • ๋ฌด์กฐ๊ฑด ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๋‹ค๊ณ  ์Šค๋ฃจํ’‹์€ ๊ฐœ์„ ๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ๋ณ‘๋ ฌ ์‹คํ–‰์˜ ์ค‘์š”์„ฑ

์ด์ œ๋Š” ๋” ์ด์ƒ ๋…ผ๋ฆฌ CPU๋‹น ์„ฑ๋Šฅ(์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์„ฑ๋Šฅ)์ด ํ–ฅ์ƒ๋˜๊ธฐ ์–ด๋ ค์šด ๋‹จ๊ณ„๊นŒ์ง€์˜ด.

โ†’ ๋Œ€์‹  CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ ค์„œ CPU ์ „์ฒด ์„ฑ๋Šฅ์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์ชฝ์œผ๋กœ ๋ฐฉํ–ฅ์ด ๋ฐ”๋€œ.

์ปค๋„๋„ ์ด๋Ÿฐ ์‹œ๋Œ€ ํ๋ฆ„์— ๋งž์ถฐ์„œ ์ฝ”์–ด ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ ๊ฒฝ์šฐ์˜ ํ™•์žฅ์„ฑ ์„ ํ–ฅ์ƒ์‹œ์ผœ ์™”๋‹ค๊ณ ํ•จ.

โ“ํ€ด์ฆˆ

ํ€ด์ฆˆ: ํ”„๋กœ์„ธ์Šค์™€ ์‹œ์Šคํ…œ ์Šค์ผ€์ค„๋ง

  1. ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋–ค ์ƒํƒœ๋Š” ๋Œ€๋ถ€๋ถ„ ์–ด๋–ค ์ƒํƒœ์ธ๊ฐ€?
    a) ์‹คํ–‰ ์ƒํƒœ
    b) ๋Œ€๊ธฐ ์ƒํƒœ
    c) ์Šฌ๋ฆฝ ์ƒํƒœ
    d) ์ค€๋น„ ์ƒํƒœ
  1. ๋…ผ๋ฆฌ CPU๋Š” ๋™์‹œ์— ๋ช‡ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
    a) 1๊ฐœ
    b) 2๊ฐœ
    c) 4๊ฐœ
    d) 8๊ฐœ
  1. ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ฃผ์š” ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€?
    a) ํŒŒ์ผ ๊ด€๋ฆฌ
    b) ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
    c) CPU ์ž์› ํ• ๋‹น
    d) ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ
  1. ์–ด๋–ค ์‹œ๊ฐ„์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค?
    a) ์‚ฌ์šฉ ์‹œ๊ฐ„
    b) ์‹œ์Šคํ…œ ์‹œ๊ฐ„
    c) ๊ฒฝ๊ณผ ์‹œ๊ฐ„
    d) ๋Œ€๊ธฐ ์‹œ๊ฐ„
  1. time ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
    a) ์‚ฌ์šฉ์ž ์ด๋ฆ„
    b) ํŒŒ์ผ ํฌ๊ธฐ
    c) ๊ฒฝ๊ณผ์‹œ๊ฐ„๊ณผ ์‚ฌ์šฉ์‹œ๊ฐ„
    d) ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ
  1. CPU ์ž์›์„ ์†Œ๋ชจํ•˜๋Š” ์ฝ”๋“œ ์˜ˆ์ œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, real, user, sys ์‹œ๊ฐ„ ์ค‘ ์–ด๋–ค ์‹œ๊ฐ„์€ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ๋™์ž‘ํ•œ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ผ๊นŒ?
    a) real
    b) user
    c) sys
  1. sleep ๋ช…๋ น์–ด์˜ ํŠน์ง•์€ ๋ฌด์—‡์ธ๊ฐ€?
    a) CPU ์ž์›์„ ๋งŽ์ด ์‚ฌ์šฉํ•จ
    b) CPU ์ž์›์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    c) ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด
    d) ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด

๋‹ต๋ณ€์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค!


์ดํ•ดํ•˜์‹  ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•„๋ž˜์˜ 10๊ฐœ์˜ ํ€ด์ฆˆ ๋ฌธ์ œ๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค:

  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋Š” ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?
  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋Š” ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”๊ฐ€?
  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋–ค ์ƒํƒœ์— ์žˆ๋Š”๊ฐ€?
  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”๊ฐ€?
  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฌด์—‡์ธ๊ฐ€?
  1. ํ„ด์–ด๋ผ์šด๋“œ ํƒ€์ž„์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€?
  1. ์Šค๋ฃจํ’‹์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  1. ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆด ๋•Œ ์Šค๋ฃจํ’‹๊ณผ ํ‰๊ท  ํ„ด์–ด๋ผ์šด๋“œ ํƒ€์ž„์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€?
  1. ๋…ผ๋ฆฌ CPU์˜ ๊ฐœ์ˆ˜์™€ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜ ๊ฐ„์˜ ๊ด€๊ณ„์— ๋Œ€ํ•œ ์–ด๋–ค ๊ด€์ฐฐ์ด ์žˆ๋‚˜?
  1. ์™œ CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋” ์ค‘์š”ํ•œ๊ฐ€?

์ด๋Ÿฌํ•œ ์งˆ๋ฌธ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ํ€ด์ฆˆ๋‚˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , ๋” ๋งŽ์€ ํ€ด์ฆˆ๋ฅผ ์ œ๊ณตํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค:

  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜์™€ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.
  1. ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ์–ด๋–ป๊ฒŒ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€?
  1. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜์™€ ์‘๋‹ต ์„ฑ๋Šฅ ๊ฐ„์˜ ๊ด€๋ จ์„ฑ์„ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.
  1. ๋…ผ๋ฆฌ CPU์™€ ๋ฌผ๋ฆฌ CPU์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?
  1. ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๊ฐ€ ๋…ผ๋ฆฌ CPU ๊ฐœ์ˆ˜์™€ ๊ฐ™์„ ๋•Œ, ์–ด๋–ค ํ˜„์ƒ์ด ๊ด€์ฐฐ๋˜๋Š”๊ฐ€?
  1. ์Šค๋ฃจํ’‹์ด ์–ด๋–ป๊ฒŒ ์ธก์ •๋˜๋Š”๊ฐ€?
  1. ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆด ๋•Œ ์Šค๋ฃจํ’‹์ด ์™œ ๊ฐ์†Œํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.
  1. ์Šค๋ฃจํ’‹์ด ๊ฐœ์„ ๋˜์ง€ ์•Š์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์‹œ์Šคํ…œ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  1. CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ์™œ ๋…ผ๋ฆฌ CPU์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ๋ณด๋‹ค ์ค‘์š”ํ•œ๊ฐ€?
  1. ์ปค๋„์ด ์ฝ”์–ด ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ ๊ฒฝ์šฐ์˜ ํ™•์žฅ์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€?

์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜์™€ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ, CPU ์„ฑ๋Šฅ ๋ฐ ์‹œ์Šคํ…œ ์ตœ์ ํ™” ๊ด€๋ จ ์ง€์‹์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Uploaded by N2T