בדף הזה נסביר על בדיקות ביצועים של מופעי Filestore.
סקירה כללית
אם אתם משתמשים ב-Linux, אתם יכולים להשתמש בכלי Flexible IO Tester (fio) כדי להשוות את קצב העברת הנתונים לקריאה, קצב העברת הנתונים לכתיבה, מספר פעולות הקלט/פלט לקריאה ומספר פעולות הקלט/פלט לכתיבה, עבור מופעים בסיסיים, אזוריים, אזוריים וארגוניים ברמה.
אפשר לבדוק את הביצועים של מופעים בסיסיים באמצעות מכונה וירטואלית אחת של לקוח. אנחנו לא ממליצים להשתמש במכונה וירטואלית אחת של לקוח כדי לבדוק מופעים אזוריים, מופעים של אזור או מופעים ארגוניים, כי רמות השירות של הרחבת הקיבולת מותאמות לביצועים של כמה מכונות וירטואליות של לקוח, ובדרך כלל לקוח יחיד לא יכול להשיג את המקסימום של פעולות קלט/פלט בשנייה או של קצב העברת הנתונים של האשכול.
מידע נוסף זמין במאמר בנושא ביצועים של מכונות וירטואליות של לקוחות יחידים ומרובים.
לפני שמתחילים
מבצעים Mount של שיתוף הקבצים ב-Filestore שרוצים לבדוק בכל מכונות ה-VM של הלקוח. יכולה להיות מכונת VM אחת או כמה מכונות VM של לקוח, בהתאם לרמת השירות. הוראות מפורטות ואפשרויות הרכבה מופיעות במאמר הרכבת שיתופי קבצים בלקוחות Compute Engine.
כדי לשפר את הביצועים של NFS, חשוב לציין את אפשרות הטעינה nconnect. לרמות שירות ספציפיות, מומלץ לציין את מספר החיבורים הבא בין הלקוח לשרת:
| רמה | קיבולת | מספר החיבורים |
|---|---|---|
| אזורי | 1-9.75 TiB | nconnect=2 |
| אזורי | 10-100 TiB | nconnect=7 |
| SSD בסיסי | - | nconnect=7 |
| Enterprise | - | nconnect=2 |
| דיסק SSD לביצועים גבוהים | - | nconnect=7 |
אפשר לשנות את הערך של הפרמטר read_ahead_kb כדי לשפר את קצב העברת הנתונים של קריאה ב-NFS. מידע נוסף זמין במאמר בנושא אופטימיזציה של קצב העברת הנתונים לקריאה ב-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=writeIOPS מקסימלי לקריאה:
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}