בדף הזה נסביר על בדיקות ביצועים של מופעי Filestore.
סקירה כללית
אם אתם משתמשים ב-Linux, אתם יכולים להשתמש בכלי Flexible IO Tester (fio) כדי להשוות את קצב העברת הנתונים לקריאה, קצב העברת הנתונים לכתיבה, פעולות הקלט/פלט לקריאה ופעולות הקלט/פלט לכתיבה, עבור מופעים בסיסיים, אזוריים, אזוריים ומופעים ברמת tier.
אפשר לבדוק את הביצועים של מופעים בסיסיים באמצעות מכונה וירטואלית אחת של לקוח. אנחנו לא ממליצים להשתמש במכונה וירטואלית אחת של לקוח כדי לבדוק מופעים אזוריים, מופעים של אזור או מופעים ארגוניים, כי רמות השירות של הרחבת הקיבולת מותאמות לביצועים של כמה מכונות וירטואליות של לקוח, ובדרך כלל לקוח יחיד לא יכול להשיג את המקסימום של פעולות קלט/פלט בשנייה או של קצב העברת הנתונים של האשכול.
מידע נוסף זמין במאמר בנושא ביצועים של מכונות וירטואליות של לקוחות יחידים ומרובים.
לפני שמתחילים
מבצעים Mount של שיתוף הקבצים ב-Filestore שרוצים לבדוק בכל מכונות ה-VM של הלקוח. יכולה להיות מכונת VM אחת או כמה מכונות VM של לקוח, בהתאם לרמת השירות. הוראות מפורטות ואפשרויות הרכבה מופיעות במאמר הרכבת שיתופי קבצים בלקוחות Compute Engine.
כדי לשפר את הביצועים של NFS, חשוב לציין את אפשרות הטעינה nconnect. במקרה של רמות שירות ספציפיות, מומלץ לציין את מספר החיבורים הבא בין הלקוח לשרת:
| רמה | קיבולת | מספר החיבורים |
|---|---|---|
| אזורי | 1-9.75 TiB | nconnect=2 |
| אזורי | 10-100 TiB | nconnect=7 |
| Enterprise | - | nconnect=2 |
| דיסק SSD לביצועים גבוהים | - | nconnect=7 |
כדי לשפר את קצב העברת הנתונים של קריאה ב-NFS, אפשר לשנות את ערך הפרמטר read_ahead_kb. מידע נוסף זמין במאמר בנושא אופטימיזציה של קצב העברת הנתונים לקריאה ב-NFS באמצעות הפרמטר read_ahead_kb.
בדיקת הביצועים באמצעות מכונת VM של לקוח יחיד
אפשר להשתמש בתרחישים הבאים כדי לבצע בדיקות במופעים בסיסיים. אפשר להריץ את הפקודות ישירות משורת הפקודה.
קצב העברת נתונים מקסימלי לכתיבה עבור מכונות בסיסיות קטנות מ-1 TiB:
fio --ioengine=libaio --filesize=4G --ramp_time=2s --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 --group_reporting --directory=/mnt/nfs --name=write --blocksize=1m --iodepth=64 --readwrite=writeתפוקת קריאה מקסימלית:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=read --blocksize=1m --iodepth=64 --readwrite=readתפוקת כתיבה מקסימלית:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=write --blocksize=1m --iodepth=64 --readwrite=writeמספר פעולות קלט/פלט מקסימלי לקריאה:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=randread --blocksize=4k --iodepth=256 --readwrite=randreadמספר פעולות קלט/פלט מקסימליות לכתיבה (IOPS):
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=randwrite --blocksize=4k --iodepth=256 --readwrite=randwrite
בדיקת הביצועים באמצעות כמה מכונות וירטואליות של לקוחות
כדי להשיג את הביצועים המקסימליים עבור מופעים אזוריים, מופעים של אזורים ומקרים של ארגונים, כדאי להשתמש בכמה מכונות וירטואליות של לקוחות.
מומלץ להשתמש ב-8 מכונות וירטואליות של לקוח לכל 1 TiB עבור מופעים בין 1 ל-9.75 TiB. למקרים שבהם נפח הנתונים הוא בין 10 ל-100 TiB, צריך להשתמש ב-8 מכונות וירטואליות של לקוח לכל 10 TiB.
מפעילים את שרת fio בכל מכונות ה-VM של הלקוח. Fio משתמש ביציאה
8765לתקשורת, ולכן היציאה הזו צריכה להיות פתוחה במדיניות חומת האש.fio --serverבוחרים מכונה וירטואלית אחת של לקוח שתתזמן את ההפעלה של fio. יוצרים קובץ של משימת fio במכונת הלקוח הווירטואלית:
cat << EOL > /tmp/fio_job.conf [global] ioengine=libaio ramp_time=2s runtime=3m time_based direct=1 verify=0 randrepeat=0 group_reporting buffer_compress_percentage=50 directory=\${TMP_DIR} create_only=\${CREATE_ONLY} [read-throughput] blocksize=1048576 numjobs=8 readwrite=read filesize=100M [write-throughput] blocksize=1048576 numjobs=8 readwrite=write filesize=100M [read-iops] blocksize=4k iodepth=64 readwrite=randread filesize=1GB [write-iops] blocksize=4k iodepth=64 readwrite=randwrite filesize=1GB EOLיוצרים קובץ
hosts.listשמכיל את כתובות ה-IP או את שמות ה-DNS של מכונות וירטואליות של לקוח fio:cat << EOL > /tmp/hosts.list <Client 1 IP/DNS> <Client 2 IP/DNS> ... <Client N IP/DNS> EOLיוצרים את מערך הנתונים הבא בספרייה זמנית במכונת הלקוח הווירטואלית שיצרתם עבור קובץ העבודה:
export TMP_DIR=$(mktemp -d MOUNT_POINT_DIRECTORY/XXXXX) chmod 777 ${TMP_DIR} export CREATE_ONLY=1 fio --client=/tmp/hosts.list \ --section=read-throughput --section=read-iops /tmp/fio_job.confמריצים בדיקות ביצועים באמצעות מכונת ה-VM של הלקוח שיצרתם עבורה את קובץ העבודה:
- תפוקת קריאה מקסימלית
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=read-throughput /tmp/fio_job.conf- תפוקת כתיבה מקסימלית
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=write-throughput /tmp/fio_job.conf- מספר פעולות הקלט/פלט לקריאה (IOPS)
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=read-iops /tmp/fio_job.conf- מקסימום IOPS של כתיבה
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=write-iops /tmp/fio_job.confאחרי שמסיימים את הבדיקה, מפסיקים את שרתי fio בכל המכונות הווירטואליות של הלקוח ומוחקים את הספרייה הזמנית שלהם:
rm -rf ${TMP_DIR}