
در میان موج پایانی وصلهها (Patch) پیش از انتشار نسخه پایدار کرنل لینوکس ۷.۳، وصلهای برای رفع توقفهای نادر در زمان بوت (Boot) سیستمها ارائه شده است. گزارشهای اولیه پراکنده و متفاوت بودند، اما در نهایت ریشه مشکل به تغییری در کد کرنل بازمیگشت که دو سال پیش اعمال شده بود.
ریشهیابی مشکل در کد کنسول غیرمسدودکننده
گزارشهای متعددی درباره توقف سیستمهای متقارن چندپردازنده (SMP) در هنگام بوت ثبت شده بود و در نهایت مشخص شد که عامل آن، کد کنسول غیرمسدودکننده (Non-Blocking Console) با نام اختصاری «NBCON» است. برای جلوگیری از این توقفها، زمان آغاز به کار رشتههای هستهای (KThread) مربوط به چاپ کنسول NBCON به مرحلهای دیرتر در فرآیند بوت منتقل شده است تا احتمال قفلشدن سیستم از میان برود.
توضیح مهندس لینوترونیکس درباره وصله نهایی
جان اوگنس (John Ogness)، مهندس شرکت لینوترونیکس (Linutronix)، در توضیح این وصله که اکنون ادغام شده است، گفت: «گزارشهای گوناگونی درباره توقف سیستمهای SMP در زمان بوت وجود داشته است. این گزارشها متفاوتاند، اما به نظر میرسد در یک نکته با هم همپوشانی دارند: از دست رفتن وقفههای بینپردازندهای (IPI) در جریان راهاندازی SMP. این گزارشها همچنین نشان میدهد که بازگرداندن (Revert) استفاده از کنسول NBCON باعث از میان رفتن این باگها میشود.»
جزئیات فنی وصله و زمانبندی جدید
به گفته او، رشتههای هستهای NBCON مسئول چاپ کنسول، بسیار زود و از طریق فراخوانی early_initcall() در جریان بوت آغاز به کار میکنند. از آنجا که این رشتههای هستهای بهصورت ناهمگام (Asynchronous) در مراحل ابتدایی بوت وقفهها را فعال و غیرفعال میکنند، ممکن است در برخی بسترهای سختافزاری با راهاندازی اولیه SMP تداخل پیدا کنند.
- آغاز دیرهنگامتر رشتههای هستهای چاپ کنسول، توقف سیستم را در سختافزارهایی که پیشتر این مشکل را بازتولید میکردند، از میان میبرد.
- راهاندازی رشتههای هستهای تا پس از تکمیل تمام فراخوانیهای اولیه معماری (arch initcalls) به تعویق میافتد.
وصلهای برای کدی که از سپتامبر ۲۰۲۴ در کرنل حضور داشت
این تغییر بهعنوان وصلهای برای کد کرنل لینوکس در نظر گرفته میشود که از سپتامبر ۲۰۲۴ و همزمان با نخستین معرفی رشتههای هستهای چاپگر در کد printk() وارد شده بود. بنابراین انتظار میرود در روزهای آینده این وصله از کرنل لینوکس ۷.۳ به سایر شاخههای پشتیبانیشده کرنل نیز بازگردانی (Back-port) شود.