معجزه ۲۰۰ خط کد

در این ستون معمولا از شرکت‌های بزرگ نوشته‌ام و تکنولوژی‌هایی که قرار است دنیا را تغییر بدهند اما این هفته می‌خواهم سراغ یک تغییر خیلی کوچک بروم. در مقایس برنامه‌نویسی؛ خیلی خیلی کوچک: یک وصله دویست خطی برای کرنل.

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

اما ظاهرا قرار است اینبار مساله فرق کند. این هفته یک وصله جدید برای کرنل منتشر شده و زیر تست شخص لینوس توروالدز -نویسنده اصلی لینوکس- است که ظاهرا در دسکتاپ معجزه می‌کند. از نظر فنی این پچ می‌تواند به شکل اتوماتیک تسک‌های هر TTY را گروه‌بندی کند. بازهم مثل پچ‌های قبلی کرنل،‌ اکثر کاربران این مفهوم را درک نمی‌کنند. اما آنطور که بسیاری از آزمایش کنندگان و خود لینوس با هیجان می‌گویند، اینکار تاثیر بسیار بسیار واضحی روی بازدهی کامپیوترهای دسکتاپ در وضعیتی که از پرازنده و حافظه‌شان کار زیادی کشیده می‌شود خواهد داشت. مارک گالبرایت نویسنده این وصله است که ایده اصلی اش از لینوس توروالدز بوده. این پچ در حال حاضر در نسخه سوم است و عجیبترین نکته درباره آن این است که تنها ۲۲۴ خط به کرنل اضافه و ۹ خط از آن حذف می‌کند. به عبارت دیگر، این وصله با تغییر تنها ۲۳۳ خط از کرنل، باعث پرواز کامپیوتر رومیزی در شرایط سخت می‌شود.

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

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

من هم مطمئن هستم که اینبار برای به روز رسانی هسته بی‌تاب خواهم بود. مطمئنا هر هسته جدیدی که بیاید، اولین کار من خواندن فهرست تغییرات است و در صورت دیدن عبارت sched: automated per tty task groups در آن، محال است هیچ کاری قبل از به روز رسانی کرنل‌ام انجام دهم.

  • جادی جان توصیه می‌کنم ادامه داستان رو حتما بخونی. :)
    http://lkml.org/lkml/2010/11/16/392
    یه آقای دیگه‌ای با تغییرات خیلی کمتری و با یک کامند نتیجه بهتری گرفته! #گیک

  • Pingback: Tweets that mention معجزه ۲۰۰ خط کد -- Topsy.com()

  • پرهام

    جاید جان این 200 خط را کی یا چه کسانی نوشتند؟

  • کامیار اینانلو

    جادی جان توی کرنل مک که اصولا همچین مشکلی مدتهاست حل شده

  • سلام ایریکس،
    به نظرت این روشی که این آقای دیگه گفته روی N900 جواب میده؟

  • mahdi

    salam be nevisande mohtaram kybord azad . agha man kare vajeb andar vajeb ba shoma daram ke nemishe inja goft . age beshe id yahoo mano add konid mamn0on mahdii.ghaffari

  • فرود

    من خودم رو آرچ انجامش دادم، فکر میکردم دارن زیادی شلوغش میکنن! منتها باور کنید الان سی پی یو های سیستمم چسبیدن به سقف و من دارم کامنت مینویسم تو فایرفاکس انگار نه انگار!!!
    قبلا اصلا اینطوری نمیتونستم سوییچ کنم بین پنجره ها!
    اینم چگونگی انجام پچ روی آرچ : http://cyberrabbits.net/664/arch-custom-kernel-compile/#more-664

  • برای کسایی که این پچ رو ندارن: http://ck.kolivas.org/patches/bfs/ تغییر خیلی مهمیه. ولی اگه وصله BFS رو داشته باشید، تغییر شاید ۱۰-۱۵٪ بیشتر محسوس نیست. باید بگم که ظاهرا پایداری این وصله نسبت به BFS کمتره، چون موقع پخش TV آنلاین با کیفیت HD لپ تاپ من overload می‌شه و مجبور می‌شم دستی خاموشش کنم. روی 2.6.32 پارسیکس من و BFS این مشکل نیست. باید یکمی بیشتر باهاش ور برم ببینم چی میشه!

  • به نظرم این اتفاق خیلی چیزه عجیبی نیست . فقط سیستم را interactive تر می کنه. و کاربر این احساس بهش دست می ده که سیستم سریع تر شده .

  • فرود

    مفهوم این interactive به نظر شما چیه ؟ من دفعه اولی که هنوز این پچ نصب نبود، داشتم کرنل رو کامپایل میکردم که این پچ هم نصب کنم. وقت کامپایل که نزدیک ۱ ساعت هم طول کشید هیچ کاری نمیتونستم انجام بدم و کلا پاشده بودم از پشت سیستم. (یه آهنگ بود که مدام متوقف میشد جوری که قطعش کردم.)
    دفعه بعد، دوباره اومدم مراحل رو برم و یه تغییراتی هم بدم دوباره که تو وبلاگم بنویسم چی شد، همزمان با کامپایل فایرفاکس باز بود، کار انجام میدادم، پستم رو مینوشتم، داشتم رو یه add-on کار میکزدم و تغییرات توی کد میدادم و مدام فایرفاکس رو ریست میکردم. آهنگ هم گوش میکردم. (عمدا اینقدر داشتم شلوغ بازی در میاوردم و گرنه اصولا اینطوری نیستم!)
    این فقط یعنی اینکه سیستم خوش صحبت تر شده و بیشتر جوابمو میده؟؟ یعنی من احساس میکنم که دارم این کارها رو انجام میدم؟؟
    ببخشید نمیدونم شاید یه کم تند نوشتم، ولی واقعیت اینه که این interactive بودن هر چی که هست از دید شما، خیلی خیلی توی زمانی که سیستم درگیره خودشو نشون میده.در حالت عادی تفاوت خاصی به چشم نمیاد دست کم من احساس نکردم.

  • خوب با پچ جدید / کامپایل کرنل در همین حال که گفتید بیشتر طول می کشه ؟یا کمتر؟

  • فرود

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

  • Reith

    اگر بحث هنگ نکردن باشه که من تو جنتو یه سره دارم کمپایل می‌کنم سیستم به خوبی کار خودش رو می‌کنه…
    اگر بحث سریع تر شدن اجرای برنامه‌های باشه برای من خیلی سرعت تغییر نکرده (مسلما افزایش سرعت داشتم) ظاهرا تعییر رو سیستم‌هایی که سی‌پی‌یو زیاد دارن بیشتر به چشم می‌یاد. تو خبرها هم بیشتر به سایت Phoronix لینک دادن که اونجا روی سیستم چهارهسته‌ای core i7 تست شده.
    برای کارهای عادی احساس نمی‌کنم سی‌پی‌یو خیلی بیشتر فعال باشه.
    باید اون راه user mode که با چند خط اسکریپت Bash انجام می‌شه هم تست کنم.
    ولی یه این کرنل جدید (نسبت به ۳۳) یه جور دیگه خوشحالم کرد. یکی دکمه‌ی روشنایی لپتاپم را درست کرد (که قبلا اگر فریم بافر روشن بود کار نمی‌کرد) و دیگه صدای جک هدفونم که mute نمی‌شد. :)

  • مهدی صابری

    http://www.webupd8.org/2010/11/alternative-to-200-lines-kernel-patch.html
    این هم یه روش دیگست که البته به سادگی اجرای یک shell file هست ادعا شده پاسخ مشابه می ده و دیگه نیازی به recompile کرنل نیست. جدیدا نسخه ubuntu رو هم گذاشته