מדוע החלטתי ללכת על VMWare

אתמול פרסמתי בבלוג שבמסגרת העסק של מכירת שרתי VPS, אני הולך להשתמש ב-VMWare. לא חשבתי שזה ישנה להרבה, עד שפתחתי בבוקר את תיבת ה-GMAIL שלי לגלות לא פחות מ-15 מיילים של אנשים שנדהמו שאני משתמש בכלי ה"משוקץ" הזה במקום להשתמש בפייבוריט של כולם: XEN.

אני כותב את הפוסט הזה בשביל להבהיר ספציפית ובאופן כללי את היחס שלי אישית לגבי הכלים הללו.

אתחיל מדוגמא פשוטה: לקוח מחר שירצה לשכור את שרותיי, להרים 200 מכונות וירטואליות בחברה שלו וישאל אותי על איזו טכנולוגיה להשתמש, רוב הסיכויים שאומר לו ללכת על XEN, ואם הוא ירצה לשכור את שרותיי להרים את השרתים הללו, אקים אותם בשמחה. הקמתי לא שרת אחד ולא שתיים של XEN ואני מכיר את השטיקים פחות או יותר (אם כי עדיין לא "חרשתי" על גירסה 4, אבל זה בדרך. אני צריך פה בבית 2 מחשבים נוספים דחוף)

אז מדוע בעצם הלכתי על VMWare?

הסיבות הן פשוטות וברשותכם אפרט:

  • להקים שרתי XEN לוקח זמן. כמה זמן? המון זמן. את קובץ הקונפיגורציה פר מכונה אפשר ליצור דרך סקריפט PHP פשוט עם ממשק וובי עם כמה כפתורים לבחור מה יהיה במכונה, ה-PHP יצור קובץ, ודרך פקודות xm (או virsh אם משתמשים ב-RedHat/CentOS) אפשר להפעיל את המכונה, אבל אם אתה רוצה יותר (ואתה צריך יותר) דברים כמו Traffic Shaping (מה לעשות, לתת לילד בן 17 שרת VPS די מבטיח שהוא יחנוק לך את הקו ולא חשוב כמה תתן לו), או Load Balancing או שימוש באחסון (בין אם זה iSCSI או AoE וכמובן שצריך LVM לביצועים טובים) – הדברים האלו מצריכים זמן כדי לתכנן אותם בצורה יסודית, ועוד לא התחלתי לדבר על איזון בין השרתים הוירטואליים בתוך המכונה עצמה (XEN בהגדרות הרגילות שלו לא משהו בזה, במיוחד כשלא משייכים מכונה וירטואלית לליבה ספציפית. מנסיון!)
  • עלויות: אם יש משהו אחד שאתה לא יכול לעשות בביזנס, זה לשחק בלקוחות שלך, להרים להם מכונה, לשכוח הגדרה ולהוריד לו אותה ככה, מבלי לחטוף צעקות ואיומים מהלקוחות (הייתי בסרט הזה בעבר). אני יכול לשכור לשכור שרת עם 2 מעבדי XEON מרובעי ליבות עם 8 ג'יגה זכרון ב-350 דולר לחודש ואז לשחק, אבל אז גם בזבזתי 1400 שקל, וגם אני מפסיד כסף כי אני לא יכול באותו זמן לשרת לקוחות כפרילנסר, בזמן שאני "משחק" עם ההגדרות של XEN, מוסיף חוקי iptables, כותב סקריפטים מחדש, מחפש פאנל כלשהו (וגם זה בתשלום כמובן) עד שאני מגיע למשהו יציב שמאפשר להריץ לקוחות בצורה יציבה, כלומר ההפסד הוא גדול.
  • השקעה: אם היה לי איזה מיליונר שבא, נותן טפיחת שכם שפורקת את הכתף, שם צ'ק שמן של כמה עשרות אלפי דולרים ואומר לי "חץ, תרים לי הוסטינג!", אז בהחלט היה מקום להרים שרתי XEN, לקחת את הזמן ולעשות את כל העבודה הגדולה. במקרה שלי, זה חלום של כמה שנים לתת משהו יותר טוב מהאחרים עם מחירים שוברי שוק, רוחב פס מכובד ו"ברזלים" רציניים. את כל הדברים האלו אני צריך לממן מכיסי, ו-XEN כרגע, כמו שאמרתי מקודם, יכניס אותי להפסדים לפני שאקבל לקוח ראשון.

אז עשיתי את החישובים שלי והגעתי למסקנות:

  • VMWare נותן לי פתרון יציב ומהיר פה ועכשיו. איתו אני יכול להרים תוך מס' דקות מכונות ללקוחות וגם לתת Trial ללקוחות פוטנציאליים.
  • בניגוד לאחרים שמשתמשים ב-VMWare ומגלגלים את העלות העצומה שלו על הלקוח (לי פה בארץ לקחו פעם על מכונה מבוססת VMWARE עם 5 ג'יגה מקום מחיר של 60 דולר, וזה היה רק לפני 3 שנים), אני לא מגלגל כלום כי לי הרשיון של VMWare עולה … 0 (לא, לא גירסה פרוצה ולא עם שימוש ב-Keygen, חוקי לחלוטין). ככה זה שמכירים את המייסדים היהודיים של VMWare ושולחים להם "שנה טובה" כל שנה ואיחולים בחגים. יש יתרון בלהיות יהודי 🙂
  • VMWare נותן לי לעשות דברים ש-XEN לא נותן. עם שניהם ניתן להגדיל זכרון על מכונה "חיה" (בתקווה שה-Guest יכיר בכך: לינוקס מכיר, Windows 2003 לא), אבל מה עם הוספה של CPU? לקוח רוצה שאוסיף לו עוד ליבה מבלי שאעשה לו ריבוט, ב-VMWare לוקח 3 שניות לעשות את זה וה-Guest יכיר בכך (תחת מגבלות, שוב, Windows 2003 לא מכיר, Windows 2008 Data Center כן מכיר, לינוקס מכיר חופשי כל עוד יש לך קרנל די עדכני) ויש עוד עשרות פונקציות שאני יכול להציע ללקוחות שלי ללא תשלום נוסף שאותם אני לא יכול להציע עם XEN
  • מי שחושב שלהשתמש ב-XEN כתוכנה של קוד פתוח עוזר לתוכנה חופשית, עדיף שיזכר מי הבעלים של XEN.. סיטריקס, והם לא רד-האט שמשחררים קוד ברגע שיש להם מוצר שנרכש כמו Netscape Directory וכו'. לא מאמינים? תשוו בין הפתרון המסחרי של XenServer ל-Xen קוד פתוח.

לסיכום: יש יתרון ל-XEN ויש יתרונות ל-VMWare, אבל כשזה מגיע לביזנס, תעדוף הדברים שונה.

כשטכנולוגיה נופלת בין הכסאות

רוב הקוראים הטכניים כאן מכירים פתרונות וירטואליזציית PC כמו VMWare, Xen, KVM ועוד, ולמי שלא מכיר: הכוונה לתוכנה שמדמה 2 (או יותר) מחשבים שמריצים מערכות הפעלה דומות או שונות על המחשב המארח. מערכת ההפעלה המדומה נקראת Guest והמחשב המארח נקרא Host.

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

אינטל מכירה את הבעיה עוד ממזמן ומהנדסיה גם המציאו פתרון עוד ב-2006 לכך. הפתרון הוא מעין “תוספת” הנקראת VT-d (או איך שאינטל קוראים לזה: Intel® Virtualization Technology for Directed I/O) והוא ממומש ב-2 חלקים: ה-VT-d נמצא במעבד וה-VT-x נמצא בצ’יפ הגשר הצפוני (אפשר לקרוא על כך בהרחבה כאן)

הפתרון של אינטל, בקצרה, הוא שיטה של שימוש ב-DMA של המחשב על מנת למפות אזורי זכרון (ומכאן גם ציודים) למכונות הוירטואליות בגישה אקסלוסיבית למכונה הוירטואלית. דוגמא פשוטה: אם יש ברשותך 2 כרטיסי מסך, תוכל למפות את אחד הכרטיסים ישירות למכונה הוירטואלית, וכך תקבל ביצועים מקסימליים, תוכל להריץ משחקים, אפליקציות תלת מימדיות וכל דבר שחשקה בו נפשך מבלי להזדקק לאמולציה שתוכנת הוירטואליזציה תספק עבורך. דוגמא אחרת היא גישה אקסלוסיבית לפורטי Ethernet. כיום ההגבלה היא ברמה של תוכנת הוירטואליזציה, אבל עם VT-d ההגבלה היא ברמת ה”ברזלים”, כך שיוצא מכך שכשיש VT-d, אפשר לקבל ביצועים הרבה יותר גבוהים וגם למפות ציודי PCI וכו’ למכונות וירטואליות.

הכל טוב ויפה. ניקח מחשב רגיל (לא שרת) שנרכש בשנה, שנתיים האחרונות וניכנס ל-BIOS ונחפש את הפוקנציה הזו (היא אמורה להימצא בהגדרות של ה-North Bridge). רוב הסיכויים שאם תחפשו לא תמצאו את זה. זה קיים בחלק גדול מהלוחות שאינטל עצמה מייצרת, קיים בשרתים, קיים על מק פרו ומקבוק פרו, אבל על רוב הלוחות של שאר היצרנים זה לא נמצא. יותר גרוע: בתוכנות הוירטואליזציה גם שם התמיכה היא בעייתית, בלשון המעטה: ב-ESX (גירסאות 3.5 ומעלה) יש תמיכה ל-VT-d אבל לא ב-Workstation. ל-Xen יש תמיכה כלשהי (שמסובכת בטירוף, אגב) אבל לא ל-QEMU הרגיל. ב-Parallels יש תמיכה אך ורק בגירסא מיוחדת של התוכנה וגם אז זה רץ אך ורק על דגם מסוים של תחנת עבודה של HP. ב-KVM יש תמיכה אבל תצטרך לקמפל קרנל ולמפות ידנית את הציוד כדי “להסיר” אותו מהמכונה המארחת ולהפעיל אותו במכונה הוירטואלית.

ובכן, מדוע המצב כל כך גרוע עם VT-d? יצרני הלוחות מפנים אצבע מאשימה כלפי אינטל. כך לדוגמא חברת ASUS מדברת על כך שבשביל VT-d יש צורך ב-DMA Remappping (אותו מיפוי שכתבתי עליו פה בהתחלה) והטבלאות שאינטל מספקת ליצרני ה-BIOS וליצרנים אחרים הם בעייתיים בלשון המעטה, מה שאומר שיש לא מעט סיכוי שברגע שתפעיל את המכונה הוירטואלית, המחשב שלך כולו יתקע. אינטל מצידה דווקא לא הכניסה את טכנולוגיית ה-VT-d לכל המעבדים אלא רק למעבדי Core 2 Duo VPro ולמעבדי XEON לתחנות עבודה ושרתים. מדוע אינטל לא דחפה את הטכנולוגיה לכל המעבדי Mainstream שלה כמו שהם הכניסו את ה-VT? אה, שאלה טובה, מצוינת אפילו, אבל לאינטל אין תשובות. מצד שני, אם אתה תקנה היום מעבד כמו i7 אז הפעם זה כבר בפנים.

וכך נוצר מצב עצוב שבו יש טכנולוגיה עם פתרון לבעיות וירטואליזציה למשתמשים כבדים, אבל עקב תקלות באינטל הטכנולוגיה לא חדרה ממש לא ברמה של הסיליקון וכמעט שלא ברמה של הפתרונות וירטואליזציה הקיימים. אם אתה משתמש בתוכנה כמו VMWare Workstation או VirtualBox אז צר לי, אין תמיכה ב-VT-d כרגע, 4 שנים אחרי שאינטל המציאה (אההמ… “המציאה”.. החבר’ה ב-IBM נשפכים מצחוק) את הטכנולוגיה. אם זה לא היה עצוב, זה היה מצחיק..