watchdog timer چیست؟

watchdog timer یا WDT شمارنده‌ای است که از مقدار preset به صفر با نرخ ثابت شمارش معکوس می‌کند. می‌توانید WDT را طوری پیکربندی کنید که وقتی به صفر می‌رسد یک وقفه (interrupt) یا ریست (reset) ایجاد کند. ایده این است که برنامه اصلی شما باید به طور دوره‌ای WDT را قبل از انقضا، با نوشتن یک مقدار خاص در یک ثبات یا فراخوانی یک تابع، ریست کند. به این ترتیب،  WDT  به عنوان یک ناظر بررسی می‌کند آیا برنامه مطابق انتظار اجرا می‌شود یا خیر.


چرا از watchdog timer استفاده کنیم؟

watchdog timer می‌تواند به شما کمک کند خرابی‌های سیستم را که ممکن است به دلایل مختلفی مانند نقص سخت‌افزار، باگ‌های نرم‌افزار، تداخل خارجی، نوسانات برق، یا خطاهای کاربر رخ دهد، شناسایی و بازیابی کنید. به عنوان مثال، اگر برنامه شما وارد یک حلقه بی نهایت، یک deadlock یا یک وضعیت خراب (corrupted) شود، WDT منقضی و بسته به نحوه تنظیم آن، یک وقفه یا ریست ایجاد می‌‎کند که امکان می‌دهد برخی از اقدامات اصلاحی مانند ذخیره داده‌های حیاتی، ثبت خطا یا راه اندازی مجدد سیستم را انجام دهید.


چگونه یک watchdog timer راه اندازی کنیم؟

مراحل راه‌اندازی watchdog timer بسته به نوع و مدل میکروکنترلر شما متفاوت است، بنابراین برای دستورالعمل‌های خاص‌تر مراجعه به دیتاشیت و کتابچه راهنمای مرجع مهم است. به طور کلی، باید ماژول WDT را فعال و clock source و prescaler را برای شمارنده انتخاب کنید. همچنین باید مقدار وقفه و اقدامی را که باید هنگام انقضای WDT انجام دهید، مانند وقفه یا ریست، انتخاب کنید. علاوه بر این، باید کدی بنویسید تا WDT را به صورت دوره ای در برنامه اصلی خود بازنشانی کنید و در صورت استفاده از آن گزینه، وقفه WDT را مدیریت کنید. در نهایت، حتما کد خود را تست و دیباگ کنید تا مطمئن شوید که WDT همانطور که در نظر گرفته شده است کار می کند.

چگونه یک watchdog timer را ریست کنیم؟

ریست watchdog timer بستگی به میکروکنترلر و ماژول WDT دارد، اما روش‌های رایجی مانند نوشتن یک مقدار یا دنباله‌ای از مقادیر در یک ثبات کنترل WDT، فراخوانی یک تابع از پیش تعریف‌شده، یا استفاده از یک دستورالعمل اختصاصی وجود دارد. مهم است که WDT را در فواصل منظم در برنامه اصلی ریست کنید، مانند پایان یک حلقه، پس از تکمیل یک کار یا قبل از ورود به یک بخش مهم. این اطمینان حاصل می کند که برنامه به درستی کار می کند.

چگونه با وقفه watchdog timer برخورد کنیم؟

اگر WDT را طوری پیکربندی کرده‌اید که به‌جای ریست در زمان منقضی شدن آن، وقفه ایجاد کند، باید یک ineinterrupt service routine(ISR) بنویسید تا آن را مدیریت کند. ISR باید اقداماتی را برای بازیابی از خرابی انجام دهد، مانند ذخیره داده‌های حیاتی، ثبت کد خطا و وضعیت سیستم، ریست یا ریستارت سیستم، غیرفعال کردن یا فعال کردن برخی تجهیزات جانبی یا ویژگی‌ها و تغییر حالت عملکرد یا پارامترهای سیستم. علاوه بر این، باید فلگ وقفه WDT را پاک و شمارنده WDT را در ISR ریست کنید، در غیر این صورت وقفه ادامه می‌دهد و سیستم به عملکرد عادی باز نمی‌گردد.

بهترین روش ها و نکات برای استفاده از watchdog timer چیست؟

هنگام استفاده از WDT  در پروژه‌های میکروکنترلر، بهترین روشها و نکاتی وجود دارد که باید در نظر داشته باشید. انتخاب یک مقدار زمان مناسب برای WDT، بر اساس زمان اجرای مورد انتظار برنامه و بدترین سناریوی خرابی، مهم است. علاوه بر این، برای جلوگیری از تداخل عوامل خارجی یا خطاهای clock، توصیه می‌شود از یک clock source جداگانه برای WDT استفاده کنید، مانند یک نوسان ساز(oscillator) داخلی یا یک کریستال. علاوه بر این، روش‌های مختلف ریست WDT  باید در بخش‌های مختلف برنامه استفاده شود. با این حال، از ریست WDT در روتین‌های وقفه باید اجتناب شود، مگر اینکه آنها بخشی از منطق برنامه اصلی باشند. در نهایت، مهم است که کد خود را به طور کامل آزمایش و سناریوهای خرابی مختلف را شبیه سازی کنید تا بررسی شود سیستم شما چگونه پاسخ می‌دهد و WDT چگونه در هر مورد رفتار می‌کند.

 

Watchdog در لینوکس چیست؟

در دنیای لینوکس، Watchdog برای حفظ قابلیت اطمینان و ثبات سیستم ضروری است. watchdog یک قطعه سخت افزاری یا نرم افزاری است که عملکرد سیستم را پیگیری و در صورت مشاهده هرگونه رفتار یا نقص عجیب و غریب مداخله می‌کند. در ادامه به بررسی ایده Watchdog در لینوکس و همچنین ویژگی‌های آن، گزینه‌های خط فرمان، روش‌های تنظیم و منابع یادگیری می‌پردازیم.

برای بررسی اینکه آیا یک سیستم در حال اجرا است، از Linux kernel watchdog استفاده می‌شود. در نظر گرفته شده است که به طور خودکار سیستم‌هایی را که به دلیل نقص‌های غیرقابل جبران نرم افزاری گیر کرده‌اند، ریبوت کند. مخصوص سخت افزار یا چیپ مورد استفاده، ماژول watchdog است. کاربران کامپیوتر شخصی نیازی به watchdog ندارند زیرا ممکن است به صورت دستی سیستم را ریست کنند. با این حال، سیستم‌های حیاتی که به قابلیت self-rebooting بدون مداخله دستی نیاز دارند، می‌توانند از آن بهره ببرند. به عنوان مثال، سرورهای ریموت  یا تجهیزات جاسازی شده (embedded) در یک سفینه فضایی که نیاز به قابلیت ریست خودکار سخت افزار دارد.

در لینوکس، یک watchdog معمولا از طریق یک دیوایس کاراکتر موجود در dev/watchdog/ اکسپورت می‌شود. دستگاه را می توان برای فعال کردن Watchdog با استفاده از یک API ساده باز کرد. وقتی چیزی روی آن نوشته می‌شود، Watchdog راه‌اندازی می‌شود و اگر دستگاه به درستی بسته نشود، watchdog کامپیوتر را ریستارت می‌کند.

با این حال، یک API جدیدتر و غنی تر از ioctrl نیز وجود دارد. ما Watchdog-test، یک نمونه برنامه مختصر را پیشنهاد می‌دهیم. 
برنامه userspace به لطف تنظیمات پیکربندی کرنل WATCHDOG_NOWAYOUT هیچ وسیله ای برای خاموش کردن Watchdog ندارد. هنگامی که برنامه باز شد، Watchdog باید همیشه فعال شود. اگر برنامه بسته شود، Watchdog خاموش نخواهد شد، حتی اگر clean close با یک کاراکتر جادویی منتقل شده باشد.

Watchdog  در لینوکس


هنگام پیکربندی Watchdog روی یک سیستم برای اطمینان از عملکرد صحیح باید مراقب باشید. پیکربندی نادرست Watchdog می‌تواند مشکلاتی ایجاد کند و می‌تواند بر پایداری و قابلیت اطمینان سیستم تأثیر بگذارد. در ادامه چند نمونه از تنظیمات نادرست که ممکن است منجر به مشکلات شود را بیان می‌کنیم:

  • تنظیم نادرست Timeout: تایم اوت watchdog  فاصله بین ضربان قلب پیش بینی شده سیستم را ایجاد می‌کند. تنظیم یک بازه زمانی بسیار کوتاه می‌تواند باعث ریستارت مکرر سیستم شود، حتی زمانی که همه چیز همانطور که باید کار می‌کند. از سوی دیگر، تنظیم یک بازه زمانی بسیار طولانی ممکن است باعث شود که خرابی‌ها بعدا شناسایی شوند و اثربخشی watchdog  کاهش یابد.
  • مدیریت نامناسب سیگنال Keepalive: سیگنال Keepalive برای نشان دادن اینکه سیستم به درستی کار می‌کند استفاده می‌شود. در پی مدیریت نامناسب سیگنال Keepalive ممکن است watchdog سیگنال‌های مورد نظر را به دلیل کنترل یا پیکربندی نادرست دریافت نکرده وتشخیص خرابی داده و ریبوت بی دلیل را انجام دهد.
  • عدم رسیدگی به رویدادهای Watchdog: معمولا هنگامی که watchdog خرابی سیستم را تشخیص می‌دهد یا به timeout آن می‌رسد، ریبوت یا سایر مراحل بازیابی خاص را آغاز می‌کند. رفتارهای غیرقابل پیش‌بینی، مانند ریستارت مکرر، عدم بازیابی خطاها، یا وضعیت اشتباه سیستم، ممکن است ناشی از مدیریت نادرست این رویدادها باشد.
  • ماژول‌های سخت‌افزار یا کرنل پشتیبانی‌نشده: زمانی که از یک watchdog سخت‌افزار استفاده ‌شود، اگر از سخت‌افزار پشتیبانی‌نشده استفاده کنیم یا اگر ماژول‌های کرنل مورد نیاز بارگذاری نشده باشند، ممکن است آن‌طور که در نظر گرفته شده است عمل نکند. در نتیجه، watchdog ممکن است نتواند به اندازه کافی سیستم را مانیتور کرده یا در صورت خرابی، پاسخ های لازم را آغاز کند.
  • نادیده گرفتن نگهداری Watchdog: برای اطمینان از اینکه تنظیمات Watchdog مطابق با الزامات سیستم هستند، ممکن است نیاز به بررسی و به روز رسانی منظم داشته باشند. پیکربندی‌های Watchdog می‌توانند قدیمی، ناسازگار یا ناسازگار با سایر اجزای سیستم شوند، اگر به طور منظم نگهداری و بازبینی نشوند.

بسیار مهم است که به یاد داشته باشید که پیکربندی نادرست watchdog بسته به سیستم خاص و اهمیت آن می تواند تاثیرات مختلفی داشته باشد. در شرایط نادر، پیکربندی‌های نامناسب ممکن است منجر به ریبوت سیستم مکرر، خرابی غیرضروری یا ناتوانی در شناسایی و بازیابی خطاهای واقعی سیستم شود.

توصیه می شود که عملیات watchdog را به طور کامل درک کنید، به داکیومنت آن مراجعه کنید و از بهترین شیوه های توصیه شده توسط سازنده سیستم یا جامعه نرم افزار مربوطه پیروی نمائید تا از مشکلات ناشی از پیکربندی های نادرست جلوگیری کنید. عملکرد مناسب یک watchdog و جلوگیری از مشکلات احتمالی را می‌توان با آزمایش روتین، مانیتور و اعتبارسنجی رفتار watchdog تضمین کرد.


تست‌های دیمِن watchdog

در لینوکس، Watchdog daemon (watchdogd) تعدادی بررسی را برای پیگیری سلامت و پایداری سیستم انجام می‌‎دهد. این آزمایش‌ها به تشخیص رفتار غیرعادی یا نقص سیستم کمک می‌کنند و Watchdog را قادر می‌سازد تا اقدامات لازم را انجام دهد.

تست Heartbeat:

یکی از آزمایش‌های اساسی که توسط دیمن Watchdog انجام می‌شود، تست Heartbeat است. ضربان قلب منظم سیستم را که یک رویداد یا سیگنالی است که توسط سیستم در فواصل زمانی معین داده می‌شود تا نشان دهد که طبق برنامه عمل می‌کند را پیگیری می‌کند. در یک دوره زمانی از پیش تعیین شده، Watchdog  پیش بینی می کند که این ضربان‌های قلب را دریافت کند. Watchdog  نقص سیستم را فرض می‌کند و اگر سیگنال ضربان قلب را در مدت زمان تعیین شده دریافت نکند، اقدام اصلاحی، معمولا ریبوت سیستم است را آغاز می‌کند.

تست File System:

برای تایید یکپارچگی و دسترسی به فایل‌ها یا دایرکتوری‌های مهم، دیمن Watchdog  ممکن است آزمایش‌های فایل سیستم را نیز انجام دهد. وجود، حقوق دسترسی و محتویات فایل‌ها یا دایرکتوری‌های خاصی را که برای عملکرد سیستم حیاتی هستند، بررسی می‌کند. Watchdog  می‌تواند اقدامات اصلاحی را شروع کند یا عملیات بازیابی سیستم را در صورت مشاهده هرگونه مشکل، مانند فایل های از دست رفته یا تنظیمات غیرمجاز، شروع کند.

تست میانگین لود:

میانگین لود سیستم را که تعداد معمولی فرآیندها در صف اجرای سیستم برای یک بازه زمانی خاص است، نگه می‌دارد. هنگامی که سیستم در حال پردازش کارهای زیادی است، ممکن است عملکرد آسیب ببیند یا منابع تمام شود. که  با میانگین لود  بالا نشان داده می‌شود. Watchdog  می‌تواند میانگین لود را به طور منظم بررسی و در صورتی که از سطح از پیش تعیین شده بالاتر رفت، اقدام کند. این ممکن است مستلزم توقف عملیاتی باشد که منابع فشرده هستند.

تست های ویژه اپلیکیشن:

دیمن Watchdog  می‌تواند علاوه بر آزمایش‌های عمومی، آزمایش‌های ویژه برنامه‌ای را اجرا کند که نیازهای سیستم را برآورده می‌کنند. که ممکن است مستلزم مانیتور بر رویه ها (procedures)، توابع (functions) یا سرویس‌های خاصی باشد که توسط سیستم ارائه می‌شود. به عنوان مثال، Watchdog  ممکن است دسترسی به سرویس شبکه، پاسخگویی برنامه‌های مهم یا عملکرد قطعات سخت افزاری را بررسی کند.

پایداری مداوم، پاسخگویی و عملکرد سیستم توسط این تست‌ها پشتیبانی می‌شود. watchdog daemon در حفظ قابلیت اطمینان سیستم و کاهش زمان خرابی بسیار مهم است زیرا به طور مداوم سلامت سیستم را ردیابی می کند و به دنبال بی نظمی است.

به یاد داشته باشید که آزمایش‌های انجام‌شده توسط watchdog daemon ممکن است بسته به تنظیمات سخت‌افزار یا نرم‌افزار مورد استفاده برای پیاده‌سازی آن و همچنین مشخصات سیستم تحت نظارت متفاوت باشد.

گزینه های خط فرمان Watchdog:

برنامه خط فرمان Watchdog تعدادی تنظیمات را ارائه می‌نماید که به کاربران امکان سفارشی سازی و مدیریت عملیات نگهبان را می‌دهد. رفتار Watchdog را می‌توان با استفاده از این تنظیمات برای رفع نیازهای سیستم تغییر داد. در ادامه چند آرگومان خط فرمان معمولی برای ابزار watchdog لینوکس آورده شده است:

-t, --timeout :

مدت زمان تایم اوت watchdog با استفاده از این گزینه تنظیم می‌شود. این عدد نشان‌دهنده طولانی‌ترین دوره زمانی است که می‌تواند بین heartbeats پیش‌بینی‌شده سیستمی بگذرد. برای مثال:


watchdog -t 10`


-k,


keepalive-- هنگامی که سیستم به‌خوبی کار می‌کند، به لطف گزینه -k یا -- keepalive ، watchdog سیگنال keep-alive را دریافت می‌کند. زمانی که کاربر میخواهد watchdog را از طریق ریبوت یا اقدام اصلاحی متوقف کند، این کار مفید است. برای مثال:


watchdog -k

-m، --magicclose:


با استفاده از گزینه -m یا --magicclose می‌توان ویژگی magic close را فعال یا غیرفعال کرد. ویژگی مجیک کلوز watchdog بلافاصله کامپیوتر را ریستارت می‌کند. از این تنظیم برای تصمیم گیری در مورد اینکه آیا وقتی watchdog device بسته است، سیستم باید ریستارت شود یا خیر، استفاده کنید. برای مثال:

watchdog -m on

-F، --force:

در هنگام استفاده از گزینه -F یا --force ، Watchdog باید فایل پیکربندی خود را ریستارت و رفرش کند. اگر پیکربندی Watchdog تغییر کرده باشد و برای اعمال تنظیمات جدید نیاز به ریستارت باشد، این کار مفید است. برای مثال:

watchdog -F

-s، --silent: خروجی کنسول استاندارد Watchdog توسط گزینه -s یا --silent سرکوب می‌شود. اگر  Watchdog در بک‌گراند یا در اسکریپتی استفاده شود که به سادگی نیاز به ارائه مهم‌ترین داده‌ها دارد، این کار سودمند است. برای مثال:

watchdog -s

-d، --debug:


حالت ریباگ، که خروجی دقیق تر و داده های تشخیصی بیشتری را ارائه می‌دهد، از طریق گزینه -d یا --debug فعال می‌شود. این می‌تواند به شناسایی هر گونه مشکل در watchdog  و به اشکال‌زدایی کمک کند. برای مثال:

watchdog -d

سرور مجازی یک ماشین مجازی کامل است که امکان دسترسی SSH طبق آموزش را به آن خواهید داشت.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.

پیکربندی Watchdog در لینوکس

برای اطمینان از عملکرد بهینه و نظارت بر سیستم، مراحل متعددی وجود دارد که باید هنگام پیکربندی watchdog  در لینوکس انجام دهید. یک راهنمای کلی برای راه اندازی watchdog در لینوکس در اینجا ارائه شده است:

  • بررسی سازگاری سخت افزار:

سازگاری سخت افزار را بررسی کنید تا ببینید آیا watchdog timer توسط سیستم شما پشتیبانی می‌شود یا خیر. برای تعیین اینکه آیا سخت افزار شما از قابلیت‌های Watchdog پشتیبانی می‌کند یا خیر، مشخصات سازنده یا مستندات سیستم را بررسی کنید. اگر نه، همچنان می‌توانید از watchdog  استفاده کنید که روی نرم‌افزار اجرا می‌شود.

  • نرم افزار Watchdog را نصب کنید:

در توزیع لینوکس خود، بسته نرم افزار Watchdog را نصب کنید. تعیین نام بسته به توزیع بستگی دارد. برای مثال، می‌توانید با استفاده از دستور زیر آن را روی اوبونتو نصب کنید:


 sudo apt install watchdog

  • پیکربندی تنظیمات Watchdog:

فایل پیکربندی Watchdog را ویرایش کنید تا تنظیمات و نحوه رفتار آن را تغییر دهید. بسته به توزیع، فایل پیکربندی ممکن است در مکان دیگری قرار داشته باشد، اگرچه معمولا در etc/watchdog.conf/ یا etc/watchdog.d/watchdog.conf/ قرار دارد. برای تغییر تنظیماتی مانند بازه زمانی  timeout ، سیگنال‌های keepalive و گزینه‌های مخصوص سخت‌افزار، فایل را ویرایش کنید. 

  • پیکربندی Watchdog Daemon:

برای شروع نظارت بر سیستم، دیمن Watchdog  را استارت کنید. شما می توانید دیمن Watchdog را در اکثر توزیع های لینوکس با اجرای دستور زیر راه اندازی کنید:

 sudo systemctl start watchdog

 

  • راه اندازی خودکار را فعال کنید:

مطمئن شوید که دیمن watchdog تنظیم شده است که به طور خودکار هنگام بوت شدن سیستم راه اندازی شود. سرویس Watchdog را می توان با دستور زیر فعال کرد:


 sudo systemctl enable watchdog

  • بررسی عملکرد Watchdog:

پس از راه‌اندازی و کارکرد Watchdog، عملکرد آن را بررسی کنید. مراقب پیام‌های مربوط به watchdog  در لاگ‌های سیستم باشید و بررسی کنید که watchdog به سیگنال‌های keepalive واکنش نشان داده و اقدامات مربوطه را در صورت لزوم انجام می‌دهد. برای اینکه Watchdog طبق انتظار عمل کند، خرابی های سیستم نیز می توانند شبیه سازی شوند.

بسیار مهم است که به یاد داشته باشید که بسته به توزیع لینوکس، اجرای نظارت و سخت افزار مورد استفاده، رویه های پیکربندی دقیق ممکن است تغییر کند. برای دستورالعمل‌های پیکربندی جامع، به اسناد و منابع موجود توسط سیستم و توزیع خود مراجعه کنید.


نتیجه

در اینجا نکات اصلی watchdogs لینوکس به طور خلاصه آورده شده است:

  • با نظارت بر سلامت سیستم و انجام اقدامات اصلاحی در صورت بروز بی‌نظمی یا خرابی، watchdogs در لینوکس به عنوان ابزارهای ضروری برای تضمین ثبات و قابلیت اطمینان سیستم عمل می‌کنند.
  • می توان از watchdog timers سخت افزاری مبتنی بر نرم افزار یا اختصاصی برای پیاده سازی watchdogs استفاده کرد.
  • watchdog timers سخت افزاری قطعات یکپارچه ای هستند که بدون کمک سیستم عامل، سیستم را زیر نظر دارند. آنها خواستار این هستند که ماژول های کرنل مناسب بارگذاری و راه اندازی شوند.
  • watchdog  نرم‌افزار از دیمن watchdog  (watchdogd) استفاده می‌کنند و می‌توان آن را با تنظیم زمان timeout ، سیگنال‌های keepalive و سایر تنظیمات از طریق یک فایل پیکربندی کنترل کرد.
  • به منظور یافتن خطاها یا رفتارهای عجیب، watchdog  اغلب آزمایش هایی از جمله تست ضربان قلب، بررسی فایل سیستم ، نظارت بر میانگین لود و تست‌های application-specific را اجرا می‌کنند.
  • Watchdogs می‌توانند عملیات بازیابی را شروع کنند، سیستم را ریبوت کنند، دستورالعمل‌های خاصی را اجرا کنند، یا فعالیت‌های دیگری را در صورت شناسایی خرابی یا بی‌نظمی انجام دهند.
  • پیکربندی مناسب Watchdogs بسیار مهم است، که شامل تنظیم اعداد timeout مناسب، مدیریت صحیح سیگنال‌های keepalive و پیکربندی تست‌های خاصی است که متناسب با نیازهای سیستم است.
  • برای تضمین عملکرد مناسب و پاسخگویی عملکرد Watchdogs ، نظارت و اعتبارسنجی منظم مورد نیاز است.
  • در زمینه‌های حیاتی، Watchdogs به حفظ قابلیت اطمینان سیستم، کاهش زمان خرابی و افزایش پایداری کلی سیستم کمک می‌کنند.
  • برای پیکربندی کامل و دستورالعمل‌های عیب‌یابی، ضروری است که به مستندات و منابعی که منحصر به‌فرد برای پیاده‌سازی و سخت‌افزار Watchdogs مورد استفاده هستند، مراجعه کنید.

سیستم‌های لینوکس می‌توانند از افزایش انعطاف‌پذیری، کاهش زمان خرابی و بهبود یکپارچگی کلی سیستم با پیکربندی مناسب و استفاده از Watchdogs سود ببرند.