์ถ์ฒ: ๊ทธ๋ฆผ์ผ๋ก ๋ฐฐ์ฐ๋ ๋ฆฌ๋ ์ค ๊ตฌ์กฐ

์์คํ
์ ์กด์ฌํ๋ ํ๋ก์ธ์ค๋ ๋๋ถ๋ถ ์ฌ๋ฆฝ ์ํ
ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ
: ํ๋ก์ธ์ค์ 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๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธ์์ ํจ๊ป ์ธ ๋ฒ ์คํํ๋ ๊ฒ์ ๋๋ค.๊ตฌ์ฒด์ ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ๋ถ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
for i in 1 2 3;
: ์ด ๋ถ๋ถ์ 1, 2 ๋ฐ 3๊ณผ ๊ฐ์ ์ซ์๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ณ์i
์ ํ ๋นํฉ๋๋ค.
do
: ๋ฃจํ์ ๋ณธ๋ฌธ์ด ์์๋จ์ ๋ํ๋ ๋๋ค.
./sched.py $i
:$i
๋ ๋ณ์i
์ ๊ฐ์ ๋ํ๋ ๋๋ค. ๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์์๋./sched.py 1
, ๋ ๋ฒ์งธ ๋ฐ๋ณต์์๋./sched.py 2
, ์ธ ๋ฒ์งธ ๋ฐ๋ณต์์๋./sched.py 3
๊ณผ ๊ฐ์ด./sched.py
์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
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 ์ ์ฒด ์ฑ๋ฅ์ ๋์ด์ฌ๋ฆฌ๋ ์ชฝ์ผ๋ก ๋ฐฉํฅ์ด ๋ฐ๋.
์ปค๋๋ ์ด๋ฐ ์๋ ํ๋ฆ์ ๋ง์ถฐ์ ์ฝ์ด ๊ฐ์๊ฐ ๋์ด๋ ๊ฒฝ์ฐ์ ํ์ฅ์ฑ
์ ํฅ์์์ผ ์๋ค๊ณ ํจ.
โํด์ฆ
ํด์ฆ: ํ๋ก์ธ์ค์ ์์คํ ์ค์ผ์ค๋ง
- ํ๋ก์ธ์ค์ ์ด๋ค ์ํ๋ ๋๋ถ๋ถ ์ด๋ค ์ํ์ธ๊ฐ?
a) ์คํ ์ํ
b) ๋๊ธฐ ์ํ
c) ์ฌ๋ฆฝ ์ํ
d) ์ค๋น ์ํ
- ๋
ผ๋ฆฌ CPU๋ ๋์์ ๋ช ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๊ฐ?
a) 1๊ฐ
b) 2๊ฐ
c) 4๊ฐ
d) 8๊ฐ
- ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ์ ์ฃผ์ ์ญํ ์ ๋ฌด์์ธ๊ฐ?
a) ํ์ผ ๊ด๋ฆฌ
b) ๋ฉ๋ชจ๋ฆฌ ํ ๋น
c) CPU ์์ ํ ๋น
d) ๋คํธ์ํฌ ๊ด๋ฆฌ
- ์ด๋ค ์๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์๋ถํฐ ์ข
๋ฃํ ๋๊น์ง ๊ฒฝ๊ณผํ ์๊ฐ์ ๋ํ๋ธ๋ค?
a) ์ฌ์ฉ ์๊ฐ
b) ์์คํ ์๊ฐ
c) ๊ฒฝ๊ณผ ์๊ฐ
d) ๋๊ธฐ ์๊ฐ
time
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋๊ฐ?
a) ์ฌ์ฉ์ ์ด๋ฆ
b) ํ์ผ ํฌ๊ธฐ
c) ๊ฒฝ๊ณผ์๊ฐ๊ณผ ์ฌ์ฉ์๊ฐ
d) ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ
- CPU ์์์ ์๋ชจํ๋ ์ฝ๋ ์์ ๊ฐ ์ฃผ์ด์ก์ ๋,
real
,user
,sys
์๊ฐ ์ค ์ด๋ค ์๊ฐ์ ์ฌ์ฉ์ ๊ณต๊ฐ์์ ๋์ํ ์๊ฐ์ ๋ํ๋ผ๊น?
a) real
b) user
c) sys
sleep
๋ช ๋ น์ด์ ํน์ง์ ๋ฌด์์ธ๊ฐ?
a) CPU ์์์ ๋ง์ด ์ฌ์ฉํจ
b) CPU ์์์ ์ ํ ์ฌ์ฉํ์ง ์์
c) ํ์ผ์ ์ญ์ ํ๋ ๋ช ๋ น์ด
d) ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ช ๋ น์ด
๋ต๋ณ์ ๊ธฐ๋ค๋ฆฝ๋๋ค!

์ดํดํ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์๋์ 10๊ฐ์ ํด์ฆ ๋ฌธ์ ๋ฅผ ์ ์ํฉ๋๋ค:
- ์ปจํ ์คํธ ์ค์์น๋ ์ธ์ ๋ฐ์ํ๋๊ฐ?
- ์ปจํ ์คํธ ์ค์์น๋ ์ด๋ค ์ญํ ์ ํ๋๊ฐ?
- ์ปจํ ์คํธ ์ค์์น๊ฐ ๋ฐ์ํ ๋, ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ด๋ค ์ํ์ ์๋๊ฐ?
- ์ปจํ ์คํธ ์ค์์น๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋๋๊ฐ?
- ์ปจํ ์คํธ ์ค์์น๊ฐ ๋ฐ์ํ๋ ์ด์ ์ค ํ๋๋ ๋ฌด์์ธ๊ฐ?
- ํด์ด๋ผ์ด๋ ํ์์ด ๋ฌด์์ ์๋ฏธํ๋๊ฐ?
- ์ค๋ฃจํ์ด๋ ๋ฌด์์ธ๊ฐ?
- ํ๋ก์ธ์ค ๊ฐ์๋ฅผ ๋๋ฆด ๋ ์ค๋ฃจํ๊ณผ ํ๊ท ํด์ด๋ผ์ด๋ ํ์์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋๊ฐ?
- ๋ ผ๋ฆฌ CPU์ ๊ฐ์์ ํ๋ก์ธ์ค ๊ฐ์ ๊ฐ์ ๊ด๊ณ์ ๋ํ ์ด๋ค ๊ด์ฐฐ์ด ์๋?
- ์ CPU ์ฝ์ด ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ฑ๋ฅ ํฅ์์ ๋ ์ค์ํ๊ฐ?
์ด๋ฌํ ์ง๋ฌธ๋ค์ ์ฌ์ฉํ์ฌ ํด์ฆ๋ ํ ์คํธ๋ฅผ ๋ง๋ค์ด ๋ ์์ธํ ๋ค๋ฃจ์ค ์ ์์ต๋๋ค.
๋ฌผ๋ก , ๋ ๋ง์ ํด์ฆ๋ฅผ ์ ๊ณตํด ๋๋ฆฌ๊ฒ ์ต๋๋ค:
- ์ปจํ ์คํธ ์ค์์น์ ์ฒ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ์ญ์์ค.
- ํ๋ก์ธ์ค ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉด ์ด๋ป๊ฒ ์ปจํ ์คํธ ์ค์์น๊ฐ ์ํฅ์ ๋ฏธ์น๋๊ฐ?
- ์ปจํ ์คํธ ์ค์์น์ ์๋ต ์ฑ๋ฅ ๊ฐ์ ๊ด๋ จ์ฑ์ ์ค๋ช ํ์ญ์์ค.
- ๋ ผ๋ฆฌ CPU์ ๋ฌผ๋ฆฌ CPU์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ?
- ํ๋ก์ธ์ค ๊ฐ์๊ฐ ๋ ผ๋ฆฌ CPU ๊ฐ์์ ๊ฐ์ ๋, ์ด๋ค ํ์์ด ๊ด์ฐฐ๋๋๊ฐ?
- ์ค๋ฃจํ์ด ์ด๋ป๊ฒ ์ธก์ ๋๋๊ฐ?
- ํ๋ก์ธ์ค ๊ฐ์๋ฅผ ๋๋ฆด ๋ ์ค๋ฃจํ์ด ์ ๊ฐ์ํ๋์ง ์ค๋ช ํ์ญ์์ค.
- ์ค๋ฃจํ์ด ๊ฐ์ ๋์ง ์์ ๋ ์ด๋ป๊ฒ ์์คํ ์ ์ต์ ํํ ์ ์๋๊ฐ?
- CPU ์ฝ์ด ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ ๋ ผ๋ฆฌ CPU์ ์ฑ๋ฅ ํฅ์๋ณด๋ค ์ค์ํ๊ฐ?
- ์ปค๋์ด ์ฝ์ด ๊ฐ์๋ฅผ ๋๋ฆฐ ๊ฒฝ์ฐ์ ํ์ฅ์ฑ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ?
์ด๋ฌํ ์ง๋ฌธ์ ์ฌ์ฉํ์ฌ ์ปจํ ์คํธ ์ค์์น์ ์ฒ๋ฆฌ ์ฑ๋ฅ, CPU ์ฑ๋ฅ ๋ฐ ์์คํ ์ต์ ํ ๊ด๋ จ ์ง์์ ํ ์คํธํ ์ ์์ต๋๋ค.
Uploaded by N2T