הקרמה באה בבעיטת סיבוב ואז היא הריצה Vdbench

ואוו איך הקרמה התפוצצה לי בפרצוף מהר הפעם.

זוכרים איך בפוסט הקודם דיברתי קצת על איך להתכונן  PoC, על החשיבות של תיאום ציפיות, של הכנה מוקדמת ועל כמה חשוב לשמור על אוירה חיובית? אז יצא שבדיוק שבוע לאחר מכן טסתי שוב להריץ PoC בהודו, הפעם בדלהי, וכל מה שיכל היה להשתבש, אכן השתבש.

נתחיל מהעובדה שבנתב"ג, אחרי שעמדתי 55 דקות בתור לביטחון ועוד 50 דקות בתור לצ'ק-אין למרות שעשיתי צ'ק-אין באתר של טורקיש ולכאורה אני אמור להגיע לאקספרס צ'ק-אין, הודיעו לי שאני לא יכול לעלות לטיסה לאיסטנבול. המטוס שאמור להגיע מאיסטנבול לקחת אותנו מאחר, הוא עדיין לא המריא מאיסטנבול ואין סיכוי שנספיק לעלות על טיסת ההמשך שלנו לדלהי. אחרי המתנה ארוכה ומעצבנת, סתם בעמידה מול דלפקי הצ'ק-אין, העבירו אותי לטיסת לופטהנזה לפרנקפורט. הקונקשן בפרנקפורט עוד יותר קצר ושדה התעופה עוד יותר גדול אז אחרי ריצה – נסיעה ברכבת הפנימית – ריצה – שיחה מתנשפת עם נציגת air india הספקתי לארגן לעצמי מקום ביציאת חירום לטיסת ההמשך הארוכה ואז הגיעה נקודת האור הכמעט יחידה בנסיעה הזו, הספקתי לאכול שתי נקניקיות ולשתות בירה אחת לפני שעליתי לטיסת ההמשך. אני מקצין קצת כי לא באמת הספקתי לשתות את הבירה אבל הרשו לי לעלות איתה לטיסה וככה זכיתי להיות מהאחרונים שעולים על 787 עמוס ולקבל מבטים של כל הנוסעים "הנה השיכור שבגללו אנחנו מתעכבים" למרות שלא היה עיכוב בכלל ועליתי בזמן תפסיקו להסתכל עלי don’t you judge me! אגב 787 אכן מטוס נחמד מאד וכשמטים את המשענת אחורה המושב מחליק טיפה קדימה, די קול.

ככה יצא שהגעתי לדלהי בתשע וחצי בבוקר במקום בארבע וחצי בבוקר אבל זה בסדר כי לא היה לקוח לעבוד איתו. בניגוד לתיאום הציפיות ולתכנון המקורי, הלקוח לא הכין שום דבר לעבודה, רק בשעה שתים בצהרים התחלנו לעבוד שוב על הצבת הדרישות וגם למחרת לא היה שום דבר מוכן ולא יצאתי מהמלון כל היום כי כל שעתיים קבענו שעוד שעתיים ניסע לאתר ואז גילינו שלא השתנה כלום אז דחינו בעוד שעתיים וכתבתי למעלה שכל מה שיכל היה להשתבש אכן השתבש? אז גם המלון היה בשיפוצים ככה שלא היה איפה לבלות את הזמן המיותר הזה, לא בריכה ולא לאונג' ולא נעליים. בחדר.

למחרת, היום השלישי, סוף סוף קיבלנו מהלקוח את המינימום הנדרש לעבודה, ואני ממש מתכוון למינימום הנדרש, שרת לינוקס וירטואלי יחיד, על hyper-v. זהו, בלי גישה לניהול מערכת האחסון עצמה, בלי גישה למערכת המוניטור, בלי גישה לממשק הניהול של hyper-v, כלום, רק טרמינל לתוך שרת CentOS אחד וזהו. וזה בעצם נושא הפוסט היום כי למדתי להשתמש ב Vdbench ואני מרשה לעצמי לנחש שלא כל הקוראים מכירים.

אז נכון שאנחנו מעדיפים באופן מובהק לעבוד עם עומסי עבודה אמיתיים ולא מחוללי ביצועים סינטטיים אבל אנחנו לא שוכחים את החיים עצמם והלקוח הזה שהיה אמור להכין שרתי oracle DB הכין שרת וירטאולי אחד, ריק מאפליקציות, ואני כבר בהודו יומיים ועוד לא עשינו כלום, אז לפעמים אתה מתפשר ומתפשר עד שאתה מקבל בדיוק מה שאתה רוצה (נדמה לי שזה ציטוט של נבון למרות שגוגל מראה לי עכשיו שזה של אשכול).

real workloads

Vdbench הוא כלי של אורקל שמיועד לבדיקות עומסים ותקינות של מערכות אחסון. מדובר בכלי פשוט מבוסס Java ולכן ירוץ כמעט על כל מערכת הפעלה שתתקלו בה כולל הפצות Windows, UX, AIX, לינוקס, Mac ואפילו RaspBerry Pi (למרות שקשה לי לראות מה המטרה להריץ עומסים מכלי כל כך קטן, אולי אם מריצים כמה במקביל).

אם הכלי הוא כלי Java אז צריך Java . אם קיבלתם שרת ריק, כמוני, ואם השרת שלכם הוא שרת ממשפחת הפדורה, כל מה שצריך לעשות זה להריץ yum install java. צריך הרשאות root לבצע את זה אז אם אתם ל root  ואני מקווה שאתם לא עובים עם root סתם אז תריצו sudo yum install java. השרת צריך גישה לאינטרנט כדי שהתהליך הזה יעבוד חלק, הוא יגש לrepository, יוריד לעצמו את כל מה שהוא צריך ואחרי כמה דקות ושני אישורים זה מה שאתם רוצים לראות:

Installed:

  java-1.8.0-openjdk.x86_64 1:1.8.0.141-1.b16.el7_3

Dependency Installed:

  copy-jdk-configs.noarch 0:1.2-1.el7                                  fontconfig.x86_64 0:

  fontpackages-filesystem.noarch 0:1.44-8.el7                          giflib.x86_64 0:4.1.

  java-1.8.0-openjdk-headless.x86_64 1:1.8.0.141-1.b16.el7_3           javapackages-tools.n

  libICE.x86_64 0:1.0.9-2.el7                                          libSM.x86_64 0:1.2.2

  libXcomposite.x86_64 0:0.4.4-4.1.el7                                 libXext.x86_64 0:1.3

  libXfont.x86_64 0:1.5.1-2.el7                                        libXi.x86_64 0:1.7.4

  libXrender.x86_64 0:0.9.8-2.1.el7                                    libXtst.x86_64 0:1.2

  libfontenc.x86_64 0:1.1.2-3.el7                                      libxslt.x86_64 0:1.1

  lksctp-tools.x86_64 0:1.0.17-2.el7                                   python-javapackages.

  python-lxml.x86_64 0:3.2.1-4.el7                                     ttmkfdir.x86_64 0:3.

  tzdata-java.noarch 0:2017b-1.el7                                     xorg-x11-font-utils.

  xorg-x11-fonts-Type1.noarch 0:7.5-9.el7

Dependency Updated:

  nspr.x86_64 0:4.13.1-1.0.el7_3          nss.x86_64 0:3.28.4-1.2.el7_3          nss-sysini

  nss-tools.x86_64 0:3.28.4-1.2.el7_3     nss-util.x86_64 0:3.28.4-1.0.el7_3

Complete!

ואז מהגיע החלק הכייפי.  הכלי מוכן לפעולה. צריך להכין לו קובץ הגדרות וזה די נוח כי אפשר להעתיק את הקובץ, לשלוח ללקוח בדיוק מה להריץ, לערוך ב offline ובמקרה שלי לקבל פלט ממה שחברי הטוב איתי הריץ במעבדה כדי לבוא מוכן עם משהו סביר לעבודה.

מה הכוונה משהו סביר לעבודה? החלק החשוב בבדיקות כאלו הוא לדמות משהו ריאלי, אין הרבה טעם להריץ 100% read IO של בלוקים בגודל 2K. למה? כי אין הרבה אפליקציות שככה נראה הIO Pattern שלהן אז למרות שנקבל מספרים די מגניבים, אלו מספרים חסרי משמעות יישומית ללקוח. היות וניסינו לעבוד מסודר ועשינו את עבודת ההכנה ידענו איך נראה ה workload של הלקוח לשרת בודד וככה בנינו את קובץ ההגדרות שלנו ואז אפשר לשחק עם הקובץ, להריץ אותו לדמות שרת בודד, להריץ אותו לדמות כמה שרתים, להוריד את ה performance peak, להריץ רק את performance peak וכן הלאה. הסיבה להוריד את ה performance peak או להריץ רק את השיא היא שלפעמים יש שונות מאד גדולה בין מה שהשרת עושה במהלך רוב הזמן ומה שהוא עושה בשיא הביצועים, במקרה שלנו למשל, בשיא הפעילות השרת מריץ בלוקים פי 2 יותר גדולים בקריאה ופי 10 יותר גדולים בכתיבה (batch job) ולכן כדאי לראות כמה וריאציות שונות של היחס בין אלו לאלו.

קובץ הקונפיגורציה צריך לכלול על מה מריצים, את מה מריצים וכמה מריצים. בואו נסתכל על הדוגמא הבאה שמועתקת (עם קרדיט כמובן) ישירות מהדוגמאות המצורפות לחבילה ההורדה של Vdbench:

*

* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

*

 * Author: Henk Vandenbergh.

*

 *Example 1: Single run, one raw disk

 *SD:      Storage Definition

*WD:    Workload Definition

*RD:     Run Definition

*

sd=sd1,lun=/dev/rdsk/c0t0d0sx

wd=wd1,sd=sd1,xfersize=4096,rdpct=100

rd=run1,wd=wd1,iorate=100,elapsed=10,interval=1

 *Single raw disk, 100% random read of 4k records at i/o rate of 100 for 10 seconds

SD מגדיר את הדיסקים אליהם אנחנו רוצים לכתוב, במקרה הזה דיסק בודד שנמצא בנתיב /dev/rdsk/c0t0d0sx

WD מגדיר מה מרצים כלומר איך נראה ה workload, בדוגמה הזו מדובר על בלוקים בגודל 4K ואגב, אפשר פשוט לכתוב 4K במקום 4096 ומדובר כאן על 100% קריאה – rdpct=100 – read percent 100

RD מגדיר כמה מריצים וכאן מוגדר להריץ iorate=100 כלומר 100 פעמים מה שמוגדר ב WD.

לבדיקות ביצועים אמינות ויציבות כדאי להריץ לפני כן workload בסיסי של fillup שמטרתו די ברורה מהשם שלו, למלא את הדיסקים לפחות באופן חלקי. למה? כי כולנו יודעים שמערכת ריקה לא מתנהגת כמו מערכת מלאה או מלאה חלקית, אם היא ריקה אז אין תחרות על משאבים, תהליכי ה metadata פשוטים יותר, אין בעיות למצוא מקום פנוי לבצע תהליכי כתיבה, כל תהליכי הקריאה פשוטים, אין בשום מקום תהליכי scrub או תהליכי garbage collection, הכל נקי וחלק ופנוי ולא אמין.

ההרצה בפועל היא פקודה מאד פשוטה

./vdbench -f configfilename

ואם רוצים גם לקבל פלט תוצאות, נניח במקרה ואין לכם גישה למוניטור של הסביבה (סתם נניח,שמעתי זה קורה לפעמים), אז מריצים את אותה פקודה בתוספת -o outputfilename

וזו התוצאה הצפויה, הכלי מדווח שהוא יוצר את קובץ הפלט, שההתקנים מחוברים ושהוא מתחיל לעבוד על קובץ הקונפיגורציה שבחרתם. הפלט למטה מראה לנו בערך 6000 IOps של כתיבה בלבד בבלוקים של 256K, זה שלב ה fillup ובבלוקים כאלו גדולים גם זמן התגובה (latency) בהתאם

 

13:30:44.188 Created output directory '/home/vdbench50406/ outputfilename

13:30:44.202 input argument scanned: '- configfilename

13:30:44.202 input argument scanned: '- outputfilename

13:30:44.341 Starting slave: /home/vdbench50406/vdbench SlaveJvm -m localhost

13:30:44.865 All slaves are now connected

13:30:46.001 Starting RD=fillup; I/O rate: 15000; elapsed=30000; For loops: threads=32

Aug 02, 2017  interval        i/o   MB/sec   bytes   read     resp     read    write     re

                             rate  1024**2     i/o    pct     time     resp     resp      m

13:31:06.042         1    6073.95  1518.49  262144   0.00   51.710    0.000   51.710  107.9

13:31:26.049         2    6148.60  1537.15  262144   0.00   51.924    0.000   51.924  103.0

13:31:46.045         3    6184.25  1546.06  262144   0.00   51.756    0.000   51.756  106.2

 

כמובן שאפשר להריץ במקביל יותר מ workload אחד, יותר מגודל בלוק אחד לכל workload ולשחק ביחס בין ה workloads השונים, זה כלי די גמיש ונוח לשימוש אחרי שמתרגלים לקונספטים הבסיסיים שלו. אתם מוזמנים לדבר איתי אם יש לכם שאלות או צריכים עזרה בשכלול היכולות, אני רחוק מלהיות power user אבל אשמח לתת יד בכל מקרה.

כמובן שהנסיעה הזו לא היתה החמצה מוחלטת, הלקוח יצא די מרוצה ממה שכן הצלחנו הראות לו וקבענו מועדים להמשך פעילות כדי לכסות את מה שלא בוצע בפועל. בין לבין הצלחתי גם ללכת לראות את המבנה היפה הזה, אי שקט באמצע הברדק של דלהי, קברו של Safdar Jang, שליט מדינת אודה בהודו, שנבנה ב1754 . המבנה תחת שיפוץ כרגע, בכל רחבי המבנה והגן הסובב אותו זוגות צעירים מסתודדים, איש המכירות המקומי הסביר לי שהם בורחים לכאן כי באופן כללי מאד לא מקובל שזוגות לפני החתונה נפגשים לבד ומסתודדים ככה.

בפן הקולינרי של הנסיעה, מסעדת שודדי הגריל לא היתה מוצלחת במיוחד אבל הגימיק של להגיש מספר גדול של שיפודים לשולחן נחמד, הקינוחים היו מצויינים ושיפוד האננס היה מעולה! שימו לב שהלינק הוא לאתר הביקורות Zomato שמאד פופולרי בהודו ולכן, כך נאמר לי, אמין יותר מאפליקציות כמו trip advisor  וכאלו.

20170801_191543

זהו, יצא די ארוך הפעם, מקווה שיועיל למישהו.

אה, רגע, לסיום, בגלל שחזרתי עם טורקיש, הפעם בלי דחיות וביטולים, אז טסתי מעל אפגניסטן. חויה מוזרה לישראלי הנשוי לפרנואידית. סתם בונוס קטן.

20170803_082600

אל תהססו לספר לי מה דעתכם.

שלכם תמיד,

ניר מליק

 

מודעות פרסומת

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s