בדיקת הביצועים של מכונה

בדף הזה נסביר על בדיקות ביצועים של מופעי 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.

  1. מפעילים את שרת fio בכל מכונות ה-VM של הלקוח. ‫Fio משתמש ביציאה 8765 לתקשורת, ולכן היציאה הזו צריכה להיות פתוחה במדיניות חומת האש.

    fio --server
    
  2. בוחרים מכונה וירטואלית אחת של לקוח שתתזמן את ההפעלה של 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
    
  3. יוצרים קובץ hosts.list שמכיל את כתובות ה-IP או את שמות ה-DNS של מכונות וירטואליות של לקוח fio:

    cat << EOL > /tmp/hosts.list
    <Client 1 IP/DNS>
    <Client 2 IP/DNS>
    ...
    <Client N IP/DNS>
    EOL
    
  4. יוצרים את מערך הנתונים הבא בספרייה זמנית במכונת הלקוח הווירטואלית שיצרתם עבור קובץ העבודה:

    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
    
  5. מריצים בדיקות ביצועים באמצעות מכונת ה-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
    
  6. אחרי שמסיימים את הבדיקה, מפסיקים את שרתי fio בכל המכונות הווירטואליות של הלקוח ומוחקים את הספרייה הזמנית שלהם:

    rm -rf ${TMP_DIR}