לאחרונה נתקלתי בבעיה עיקשת וקשה לפיתרון:
השעון של אחד השרתים שאני אחראי אליהם החליט שדיוק זה לא הקטע שלו, ונדד משהו כמו ארבע שעות בכל יום.
סינכרון NTP יומי גרם לקפיצת זמן של 4-5 שעות בכל פעם, וברור היה שצריך לפתור את הבעיה האמיתית.
החשוד המיידי בבעיות שעון בדרך כלל הוא הBIOS או הסוללה של הCMOS, והפתרון הכי זריז אם זו אכן הבעיה היא להעביר את הדיסק של השרת למכונה אחרת.
חברת ההוסטינג עשתה את זה, והתברר שזה לא פתר את הבעיה.
כדי לעשות דברים יותר מעניינים, אני אוסיף ואגיד שיש בחווה ארבעה שרתים, חלקם עם חומרה כמעט זהה לזו של השרת המאחר והם לא סבלו מהבעיה.
בנוסף, כל השרתים הריצו דביאן Etch עם קרנל 2.6.18 סטנדרטי של דביאן (שהיא הגרסא הרשמית של דביאן Etch), בהבדל אחד: המכונה המאחרת הריצה קרנל של 64 ביט.
לא משהו שאמור לגרום לכזו בעיה, אבל בכל זאת הבדל.
השוואה של קבצי הקונפיגורציה של הקרנלים (בדיביאן קרנלים סטנדרטיים מגיעים עם קובץ הקונפיגורציה שאיתו קומפל הקרנל והוא יושב בספריית /boot) הראתה הבדל מעניין בין הקרנל המאחר לבין אלו שלא:
הקרנל המאחר לא קומפל עם GENERIC_TIME, והאחרים כן.
עדיין לא מוכיח כלום, אבל מעניין.
מסתבר שבלינוקס יש כמה מקורות לעדכון השעון הפנימי, חלקם מדוייקים יותר, חלקם מדוייקים הרבה פחות.
המקורות של הקרנל שרץ כרגע זמינים בקובץ
במכונה המאחרת היה זמין רק מקור אחד עם שם מוזר: jiffies
שהוא גם המקור הכי לא מדוייק שיש (למעשה הקרנל מעדכן איזה משתנה פנימי בקצב שאמור להיות תואם את המציאות, מה שלא ממש עובד)
במכונות האחרות היו זמינים כמה מקורות: acpi_pm jiffies tsc pit
ברגע שעידכנתי את הקרנלים בכל המכונות לגרסא 2.6.26, הבעיה נפתרה ולכל השרתים היו את אותם מקורות שעון.
רסיסים (RSS)
December 3rd, 2008 ב16:38
יפה.
December 3rd, 2008 ב19:34
http://en.wikipedia.org/wiki/Jiffy_(time)
בגדול, מדובר בהסתמכות על ניהול רישום הזמן של המעבד…
אם כך, שתי חלופות:
- או שאכן מדובר במספר האינטרפטים וזה משתנה לפי עומס במערכת.
- או שמדובר במונה פנימי של המעבד למספר ה-clocks שעברו מאז ה-boot, ואז זה רגיש למצבי חיסכון אנרגיה (בהם המעבד מאט את מהירות השעון הפנימי שלו – כמה גיגההרצ לשניה)
שתי הגרוש שלי…
December 3rd, 2008 ב20:22
כן.
ובכל מקרה זה לא אמין במיוחד, כמו שגיליתי על בשרי.
December 4th, 2008 ב00:37
לגבי NTP, לא הבנתי למה יש קפיצות?
כאשר משתמשים ב- NTPD הוא אמור לסנכרן את השעונים באופן הדרגתי ועדין.
יש כמה שיקוצים אסורים בדמות קרון שמריץ NTPDATE מדי איקס דקות.
December 4th, 2008 ב00:56
אורן,
שיקוצים אסורים בתחת שלי.
חוץ מזה, NTPD לא אוהב חריגות זמן יותר מדי גדולות, אז יש לי ספק רציני אם הוא היה מסתדר עם סטיה של 5 שעות ביום.
December 4th, 2008 ב09:03
אין לי מושג בתחום אם להודות על האמת, אבל נדמה לי שמהתיאור שלך נובעת שאלה מעניינת. אם הבנתי נכון הבעיה צצה לאחרונה ולא מייד עם התקנתו של השרת הנוסף, כלומר ה-jiffies עבד היטב לתקופה מסויימת. העובדה שהסתמכות על מקורות אחרים יכולה לפתור את בעיית האי-דיוק של השעון נשמעת משמחת אבח יכול להיות שהיא דווקא בעייתית. יכול להיות שאי-דיוק של השעון הוא סימפטום לבעיה עקרונית יותר עם הקרנל שמטואטאת אל מתחת לשטיח על-ידי פנייה למקורות אחרים.
מובן מאליו שאם הבנתי את התיאור לא נכון והבעיה קיימת מרגע ההתקנה של השרת כל מה שכתבתי אינו רלוונטי, אבל אם אכן הבנתי נכון נדמה לי שכדאי לנסות ולרדת קצת יותר לשורש הבעיה לפני שהיא תתגלה במקומות אחרים, אולי כואבים יותר.
December 4th, 2008 ב12:37
שחר,
השרת חדש (הותקן לפני חודש חודשיים), וכנראה הבעיה היתה קיימת שם מההתחלה.
אני חושב שזה מאוד ברור שהבעיה נובעת מפרמטרים לא נכונים בקימפול קרנל 2.6.18 AMD64 בדביאן.
December 7th, 2008 ב23:56
על איזה מעבד הקרנל רץ (אני מניח AMD?) והאם ה NTPD רץ ישירות על הברזל, או דרך איזה Virtual Machine ?
December 9th, 2008 ב10:50
אינטל, וישירות על הברזל.