בדף הזה מוסבר איך למדוד את ביצועי אמצעי האחסון.
מדידת ביצועים של נפח אחסון באמצעות Fio
משתמשים בכלי ליצירת קלט/פלט, Fio, כדי למדוד את ביצועי ה-Baseline.
שימוש ב-Fio
הכלי Fio מחיל עומס עבודה שאפשר לציין דרך ממשק שורת פקודה או קובץ תצורה. במהלך ההרצה, Fio מציג אינדיקטור התקדמות עם נתונים של קצב העברת הנתונים הנוכחי ונתוני קלט ופלט לשנייה (IOPS). אחרי שהשיחה מסתיימת, מוצג סיכום מפורט.
דוגמה לתוצאות של Fio
בדוגמאות הבאות מוצגת משימת כתיבה אקראית של 4k עם שרשור יחיד שפועלת במשך 60 שניות. זו דרך שימושית למדידת זמן האחזור הבסיסי. בפקודות הבאות, הפרמטר --directory מצביע על תיקייה עם שיתוף של NetApp Volumes שמוגדר כ-mounted:
$ FIO_COMMON_ARGS=--size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5
$ fio $FIO_COMMON_ARGS --directory=/netapp --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --name=nv
cvs: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.28
Starting 1 process
cvs: Laying out IO file (1 file / 10240MiB)
Jobs: 1 (f=1): [w(1)][100.0%][w=7856KiB/s][w=1964 IOPS][eta 00m:00s]
cvs: (groupid=0, jobs=1): err= 0: pid=1891: Wed Dec 21 14:56:37 2022
write: IOPS=1999, BW=7999KiB/s (8191kB/s)(469MiB/60001msec); 0 zone resets
slat (usec): min=4, max=417, avg=12.06, stdev= 5.71
clat (usec): min=366, max=27978, avg=483.59, stdev=91.34
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89
clat percentiles (usec):
| 1.00th=[ 408], 5.00th=[ 429], 10.00th=[ 437], 20.00th=[ 449],
| 30.00th=[ 461], 40.00th=[ 469], 50.00th=[ 482], 60.00th=[ 490],
| 70.00th=[ 498], 80.00th=[ 515], 90.00th=[ 529], 95.00th=[ 553],
| 99.00th=[ 611], 99.50th=[ 652], 99.90th=[ 807], 99.95th=[ 873],
| 99.99th=[ 1020]
bw ( KiB/s): min= 7408, max= 8336, per=100.00%, avg=8002.05, stdev=140.09, samples=120
iops : min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120
lat (usec) : 500=70.67%, 750=29.17%, 1000=0.15%
lat (msec) : 2=0.01%, 4=0.01%, 50=0.01%
cpu : usr=2.04%, sys=3.25%, ctx=120561, majf=0, minf=58
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,119984,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=7999KiB/s (8191kB/s), 7999KiB/s-7999KiB/s (8191kB/s-8191kB/s), io=469MiB (491MB), run=60001-60001msec
בשורות הבאות מפורטות תוצאות הביצועים:
זמן האחזור:
lat (usec): min=382, max=28001, avg=495.96, stdev=91.89זמן האחזור הממוצע הוא 495.96 מיקרו-שניות (µsec), בערך 0.5 אלפיות השנייה, שזה זמן אחזור אידיאלי.
IOPS:
min= 1852, max= 2084, avg=2000.45, stdev=35.06, samples=120בדוגמה שלמעלה מוצג ממוצע של 2,000 פעולות קלט/פלט בשנייה. זהו הערך הצפוי למשימה עם שרשור יחיד וזמן אחזור של 0.5 אלפיות השנייה (
IOPS = 1000 ms/0.5 ms = 2000).קצב העברת נתונים:
bw ( KiB/s): min= 7408, max=8336, per=100.00%, avg=8002.05, stdev=140.09התפוקה הממוצעת היא 8,002 KiBps, שזהו התוצאה הצפויה ל-2,000 IOPS עם גודל בלוק של 4 KiB (
2000 1/s * 4 KiB = 8,000 KiB/s).
מדידת זמן האחזור
זמן האחזור הוא מדד בסיסי לביצועים של נפח. התוצאה מושפעת מהיכולות של הלקוח והשרת, מהמרחק ביניהם (הנפח שלכם) ומהציוד שביניהם. המרכיב העיקרי של המדד הוא השהיה שנובעת מהמרחק.
אתם יכולים לבצע פינג לכתובת ה-IP של אמצעי האחסון כדי לקבל את זמן הלוך ושוב, שהוא הערכה גסה של זמן האחזור.
זמן האחזור מושפע מגודל הבלוק ומפעולות הקריאה או הכתיבה שאתם מבצעים. מומלץ להשתמש בפרמטרים הבאים כדי למדוד את זמן האחזור הבסיסי בין הלקוח לבין נפח האחסון:
Linux
fio --directory=/netapp \ --ioengine=libaio \ --rw=randwrite \ --bs=4k --iodepth=1 \ --size=10g \ --fallocate=none \ --direct=1 \ --runtime=60 \ --time_based \ --ramp_time=5 \ --name=latency
Windows
fio --directory=Z\:\ --ioengine=windowsaio --thread --rw=randwrite --bs=4k --iodepth=1 --size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5 --name=latency
מחליפים את הפרמטרים rw (read/write/randread/randwrite) ואת bs (גודל הבלוק) בהתאם לעומס העבודה. גדלים גדולים יותר של בלוקים מובילים לזמן אחזור גבוה יותר, שבו הקריאות מהירות יותר מהכתיבות. התוצאות יופיעו בשורה lat.
מדידת IOPS
ערכי ה-IOPS הם תוצאה ישירה של זמן האחזור והמקביליות. כדי למדוד את IOPS, משתמשים באחת מהכרטיסיות הבאות בהתאם לסוג הלקוח:
Linux
fio --directory=/netapp \ --ioengine=libaio \ --rw=randread \ --bs=4k \ --iodepth=32 \ --size=10g \ --fallocate=none \ --direct=1 \ --runtime=60 \ --time_based \ --ramp_time=5 \ --name=iops
Windows
fio --directory=Z\:\ --ioengine=windowsaio --thread --rw=randread --bs=4k --iodepth=32 --size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5 --numjobs=16 --name=iops
מחליפים את הפרמטרים rw (read/write/randread/randwrite), bs (blocksize) ו-iodepth (concurrency) בהתאם לעומס העבודה. התוצאות יופיעו בשורה iops.
מדידת התפוקה
התפוקה היא מכפלת ה-IOPS בגודל הבלוק. כדי למדוד את קצב העברת הנתונים, משתמשים באחת מהכרטיסיות הבאות בהתאם לסוג הלקוח:
Linux
fio --directory=/netapp \ --ioengine=libaio \ --rw=read \ --bs=64k \ --iodepth=32 \ --size=10g \ --fallocate=none \ --direct=1 \ --runtime=60 \ --time_based \ --ramp_time=5 \ --numjobs=16 \ --name=throughput
Windows
fio --directory=Z\:\ --ioengine=windowsaio --thread --rw=read --bs=64k --iodepth=32 --size=10g --fallocate=none --direct=1 --runtime=60 --time_based --ramp_time=5 --numjobs=16 --name=throughput
מחליפים את הפרמטרים rw (read/write/randread/randwrite), bs (blocksize) ו-iodepth (concurrency) בהתאם לעומס העבודה. אפשר להשיג תפוקה גבוהה רק באמצעות גדלי בלוקים של 64k ומעלה, וריבוי משימות בו-זמנית.
המאמרים הבאים
בודקים את נקודות ההשוואה של הביצועים.