בעיית שעון בשרתי לינוקס

לאחרונה נתקלתי בבעיה עיקשת וקשה לפיתרון:
השעון של אחד השרתים שאני אחראי אליהם החליט שדיוק זה לא הקטע שלו, ונדד משהו כמו ארבע שעות בכל יום.
סינכרון NTP יומי גרם לקפיצת זמן של 4-5 שעות בכל פעם, וברור היה שצריך לפתור את הבעיה האמיתית.
החשוד המיידי בבעיות שעון בדרך כלל הוא הBIOS או הסוללה של הCMOS, והפתרון הכי זריז אם זו אכן הבעיה היא להעביר את הדיסק של השרת למכונה אחרת.
חברת ההוסטינג עשתה את זה, והתברר שזה לא פתר את הבעיה.
כדי לעשות דברים יותר מעניינים, אני אוסיף ואגיד שיש בחווה ארבעה שרתים, חלקם עם חומרה כמעט זהה לזו של השרת המאחר והם לא סבלו מהבעיה.
בנוסף, כל השרתים הריצו דביאן Etch עם קרנל 2.6.18 סטנדרטי של דביאן (שהיא הגרסא הרשמית של דביאן Etch), בהבדל אחד: המכונה המאחרת הריצה קרנל של 64 ביט.
לא משהו שאמור לגרום לכזו בעיה, אבל בכל זאת הבדל.
השוואה של קבצי הקונפיגורציה של הקרנלים (בדיביאן קרנלים סטנדרטיים מגיעים עם קובץ הקונפיגורציה שאיתו קומפל הקרנל והוא יושב בספריית /boot) הראתה הבדל מעניין בין הקרנל המאחר לבין אלו שלא:
הקרנל המאחר לא קומפל עם GENERIC_TIME, והאחרים כן.
עדיין לא מוכיח כלום, אבל מעניין.
מסתבר שבלינוקס יש כמה מקורות לעדכון השעון הפנימי, חלקם מדוייקים יותר, חלקם מדוייקים הרבה פחות.
המקורות של הקרנל שרץ כרגע זמינים בקובץ
[code]
/sys/devices/system/clocksource/clocksource0/available_clocksource
[/code]
במכונה המאחרת היה זמין רק מקור אחד עם שם מוזר: jiffies
שהוא גם המקור הכי לא מדוייק שיש (למעשה הקרנל מעדכן איזה משתנה פנימי בקצב שאמור להיות תואם את המציאות, מה שלא ממש עובד)

במכונות האחרות היו זמינים כמה מקורות: acpi_pm jiffies tsc pit

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

Facebook Comments

10 תגובות בנושא “בעיית שעון בשרתי לינוקס”

  1. http://en.wikipedia.org/wiki/Jiffy_(time)
    בגדול, מדובר בהסתמכות על ניהול רישום הזמן של המעבד…
    אם כך, שתי חלופות:
    – או שאכן מדובר במספר האינטרפטים וזה משתנה לפי עומס במערכת.
    – או שמדובר במונה פנימי של המעבד למספר ה-clocks שעברו מאז ה-boot, ואז זה רגיש למצבי חיסכון אנרגיה (בהם המעבד מאט את מהירות השעון הפנימי שלו – כמה גיגההרצ לשניה)
    שתי הגרוש שלי…

  2. לגבי NTP, לא הבנתי למה יש קפיצות?
    כאשר משתמשים ב- NTPD הוא אמור לסנכרן את השעונים באופן הדרגתי ועדין.

    יש כמה שיקוצים אסורים בדמות קרון שמריץ NTPDATE מדי איקס דקות.

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

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

  5. שחר,
    השרת חדש (הותקן לפני חודש חודשיים), וכנראה הבעיה היתה קיימת שם מההתחלה.
    אני חושב שזה מאוד ברור שהבעיה נובעת מפרמטרים לא נכונים בקימפול קרנל 2.6.18 AMD64 בדביאן.

  6. על איזה מעבד הקרנל רץ (אני מניח AMD?) והאם ה NTPD רץ ישירות על הברזל, או דרך איזה Virtual Machine ?

סגור לתגובות.