ويندوز و سيستمعاملهاي ديگر چگونه از چند هسته در پردازنده استفاده ميكنند؟
پردازندههاي چندهستهاي از چندين سال پيش در انواع كامپيوترهاي شخصي ديده ميشوند و بهرهبرداري از آنها، موجب افزايش سرعت و كارايي سيستمها شده است. بهعنوان متخصص دنياي فناوري شايد اين سؤالها برايتان مطرح شده باشد: ويندوز يا ديگر سيستمعاملها چگونه از قابليت پردازندههاي چندهستهاي استفاده ميكنند؟ وقتي متخصصد چند هسته جزو خصوصيات سختافزاري محسوب ميشود، هستههاي چگونه اجراي اپليكيشنها را اولويتدهي و بين خود تقسيم ميكنند؟ ميتوان اپليكيشنها و سيستمعامل را بهگونهاي پيكربندي كرد كه استفادهي بهتر و بيشتري از هستههاي بيشتر داشته باشند؟ درادامهي اين مطلب اخبار تخصصي، علمي، تكنولوژيكي، فناوري مرجع متخصصين ايران، تا حدودي به اين پرسشها پاسخ ميدهيم.
زمانيكه كامپيوتر خود را روشن ميكنيد و پيش از اجراي سيستمعامل، پردازندهي اصلي و مادربرد باهم ارتباط برقرار ميكنند (اصطلاح Handshake). پردازندهي مركزي اطلاعات مشخصي دربارهي خصوصيات عملياتي خود به مادربرد و بخش UEFI ميفرستد. بخش مذكور از اطلاعات دريافتشده براي راهاندازي اوليهي مادربرد و بوتكردن سيستم استفاده ميكند.
پيش از اجراي سيستمعامل، پردازنده و مادربرد اطلاعاتي را براي تنظيمات ابتدايي ردوبدل ميكنند
در علوم كامپيوتر، رشته (Thread) به كوچكترين واحد اجرايي ميگوييند كه سيستم برنامهريز سيستمعامل اجرا ميكند. براي درك بهتر، رشته را ميتوان با مرحلهاي در خط مونتاژ شبيه دانست. يك سطح بالاتر از رشته، فرايند (Process) قرار دارد. فرايندها برنامههاي كامپيوتري هستند كه در يك يا چند رشته اجرا ميشوند. در مثال خطتوليد، فرايند را ميتوان كل مراحل توليد هر محصول دانست كه رشته هريك از وظايف در آن مراحل توليدي است.
تا اينجا ميدانيم پردازندهها تنها ميتوانند در هر لحظه، يك رشته را اجرا كنند. هر فرايند نيز حداقل به يك رشته نياز دارد. اكنون اين سؤال ايجاد ميشود: چگونه كارايي و قدرت كامپيوتر را افزايش دهيم؟ پاسخ در افزايش سرعت كلاك پردانده نهفته است. قانون مقياسدهي دنارد از دههها پيش بهعنوان راهكار عملي افزايش سرعت و كارايي در پردازندهها شناخته ميشد. اگرچه قانون مور مشخص كرد ميتوان ترانزيستورهاي بيشتري با گذشت زمان در فضاهاي كوچكتر جانمايي كرد، قانون دنارد بود كه باعث دستيابي به سرعت كلاك بيشتر در ولتاژ مصرفي كمتر شد.
اگر كامپيوتري بتواند با سرعت مناسبي وظايف خود را انجام دهد، ضعف احتمالي آن در مديريت بيش از يك رشته، آنچنان اشكالزا نخواهد بود. البته همه ميدانيم وظايف پردازشي در جهان وجود دارند كه حلكردن آنها در كامپيوتر كلاسيك به زماني حتي بيش از زمان حيات جهان هستي نياز دارد. بهجز آن موارد خاص، كامپيوترهاي سريع در حلكردن ساير وظايف اشكال خاصي ندارند؛ وظايفي كه كم هم نيستند.
با سريعترشدن كامپيوترها، توسعهدهندهها بهمرور نرمافزارهاي پيچيدهتري توليد كردند. همين روند نياز به پردازش در چند رشته را افزايش داد. در سادهترين شيوهي پردازش چندرشتهاي (موسوم به Coarse-Grained)، سيستمعامل بهجاي منتظرماندن براي نتيجهي يك حساب در يك رشته، از رشتهاي ديگر براي انجام وظيفه استفاده ميكند. چنين روندي در دههي ۱۹۸۰ مرسوم شد كه كلاك CPU و RAM در حال جداسازي از يكديگر بود. در آن دوران، سرعت حافظه و پهناي باند آن، هر دو با سرعتي بسيار آهستهتر از سرعت كلاك پردازنده رشد ميكردند. تولد حافظهي كش به اين معنا بود كه پردازندهها ميتونند مجموعههاي كوچك دستورالعمل را براي انجام حساب سريع و كوتاه، نزد خود نگه دارند. همچنين، پردازش چندرشتهاي مطمئن ميشد پردازندهها هميشه وظيفهاي براي انجامدادن داشته باشند.
توسعه و انتشار نرمافزارهاي پيچيدهتر، نياز به پردازندههاي چندهستهاي را بهوجود آورد
فراموش نكنيد توضيحات مذكور همگي پردازش در پردازندهي تكهستهاي را شرح ميدهند. امروزه، اصطلاحهاي چندرشتهاي و چندپردازشي اغلب با معناي مشتركي بهكار ميروند. البته چنين معناي مشتركي هميشه استفاده نميشود و دو مفهوم جدا به نامهاي Symmetric Multiprocessing و Symmetric Multithreading داشتيم كه درادامه هركدام را شرح ميدهيم.
SMT: پردازنده ميتواند همزمان بيش از يك رشته را اجرا كند. اين فرايند با برنامهريزي رشتهي دوم بهصورتي انجام ميشود كه رشتهي مذكور بتواند از واحدهاي اجرايي خالي استفاده كند كه رشتهي اول اشغال نكرده است. اينتل فناوري مذكور را بهنام Hyper-Threading ميشناسد و AMD همان نام SMT را استفاده ميكند. درحالحاضر، هر دو تيم آبي و قرمز از SMT براي افزايش كارايي پردازنده استفاده ميكنند و روند استراتژيك خاص خود را براي پيادهسازي فناوري داشتند و آن را در محصولات خاصي ارائه ميكردند. امروزه، اكثر محصولات از اينتل و AMD به قابليت SMT مجهز هستند. پيادهسازي SMT در محصولات مصرفكننده، يعني پردازندههاي با تعداد دوبرابر رشته نسبت به هستهها داريم (مثلا پردازندهاي با هشت هسته و شانزده رشتهي پردازشي).
SMP: پردازنده بيش از يك هستهي پردازشي دارد يا از مادربردي چندسوكتي استفاده ميكند. هر هستهي پردازشي، تنها يك رشته را اجرا ميكند؛ درنتيجه تعداد رشتههايي كه در هر چرخهي كلاك اجرا ميشوند، به تعداد هستههاي شما محدود خواهد بود؛ مثلا پردازندههاي هشتهستهاي با هشت رشتهي پردازشي.
فرايندهاي چندرشتهاي در مفاهيم تكهستهاي به اين معنا بود كه پردازندهي شما با چه سرعتي ميتواند بين رشتهها جابهجا شود نه اينكه پردازندهي شما ميتواند بيش از يك رشته را در آن واحد اجرا كند يا خير.
بهينهسازي جريان كاري و نقش سيستمعامل
پردازندههاي مدرن حتي آنهايي كه بيست سال پيش با معماري x86 ساخته شدند، مفهومي بهنام Out of Order Execution يا OoOE را بهكار ميگيرند. تمامي هستههاي پردازندهي مدرن و قدرتمند، همچون هستههاي big در معماري big.LITTLE پردازندههاي موبايل هوشمند، طراحي OoOE دارند. اين پردازندهها دستورالعملهاي دريافتي را بهصورت آني در ساختار جديد مرتب ميكنند تا اجراي آنها بهينهسازي شود.
پردازندهي مركزي كدي را اجرا ميكند كه از سمت سيستمعامل ارسال شده است؛ اما سيستمعامل نقشي در اجراي دستورالعملها ندارد. وظيفهي مذكور بهصورت داخلي در پردازنده مديريت ميشود. پردازندههاي مدرن x86 هر دو از بازتنظيم ترتيب دستورالعملهاي دريافتي استفاده و دستورالعملهاي x86 را به فعاليتهاي كوچكتر سبك RISC تبديل ميكنند. اختراع OoOE باعث شد مهندسان بتوانند بدون وابستگي به توسعهدهندگان براي نوشتن كد عالي و بهينه، بهرهوري مناسب و مشخصي در پردازندهها تضمين كنند. اجازهدادن به پردازندهي مركزي براي مرتبكردن مجدد دستورالعملها، حتي در مفهوم تكهستهاي هم به افزايش بهرهوري سيستم چندرشتهاي هم ميانجامد. فراموش نكنيد پردازندهي مركزي هميشه درحال جابهجاشدن بين وظايف است؛ حتي اگر شما متوجه آن نشويد.
پردازندهي مركزي با وجود تمام قابليتهايي كه در سطح مهندسي دريافت ميكند، نقشي در برنامهريزي خودش ايفا نميكند و سيستمعامل اين وظيفه را برعهده دارد. ظهور پردازندههاي چندرشتهاي نيز اين مفهوم و ترتيب را تغيير نداد. وقتي اولين برد دوپردازندهاي مخصوص مصرفكننده (ABIT BP6) معرفي شد، علاقهمندان به پردازشهاي چندرشتهاي مجبور شدند از ويندوز NT يا ويندوز ۲۰۰۰ استفاده كنند. خانوادهي Win9X از پردازش چندهستهاي همراهي نميكرد.
همراهي از اجراي فرايندها در چند هستهي پردازنده به قابليتهايي اساسي در سيستمعامل نياز دارد. سيستمعامل بايد بتواند تمامي وظايف قبلي شامل مديريت حافظه و تخصيص منابع را انجام دهد كه از اختلال در سيستمعامل بهدست اپليكيشنها جلوگيري ميكرد. دراينميان، وظيفهاي جديد هم به آن اضافه ميشود تا هستههاي پردازنده را از ايجاد اختلال در فرايندهاي يكديگر منع كند.
پردازندههاي چندهستهاي مدرن لاخبار تخصصيا به «واحد برنامهريز مرجع» مجهز نيستند؛ واحدي كه بتواند وظيفهها را بين هستهها تقسيم يا بهنوعي جريان كاري توزيع كند. درنتيجه چنين وظيفهاي را سيستمعامل برعهده دارد.
ميتوان ويندوز را با هدف بهرهبرداري بهتر از هستهها پيكربندي كرد؟
بهطوركلي، پاسخ به اين پرسش منفي است. البته برخي اوقات براي بهرهبرداري از قابليتهاي جديد پردازندهاي چندهستهاي، به بهروزرساني ويندوز نياز است؛ اما چنين پيكربنديهايي در داخل مايكروسافت انجام ميشود و متخصص نهايي نقشي در بهينهسازيها ايفا نميكند. درنهايت، استثناهاي بسيار محدودي وجود دارد كه مطالعه آنها خالي از لطف نيست.
پردازنده AMD 2990WX بهنوعي استثنايي براي قانون مذكور محسوب ميشود. اين پردازنده عملكردي تقريبا ضعيف در ويندوز دارد؛ چون مايكروسافت وجود بيش از يك نود NUMA را در پردازنده تفسير نميكند و درنتيجه، از تمامي منابع 2990WX استفاده نميشود. در برخي موارد، راهكارهايي براي بهبود كارايي اين پردازنده در ويندوز وجود دارد كه به پيكربنديهاي دستي نياز دارد. البته همهي متخصص كارشناسان اين تغييرات دستي در رشتههاي پردازشي را تأييد نميكنند و آنها استفاده از لينوكس را براي پردازندهي مذكور پيشنهاد ميدهند.
پردازندهي 3990X استثناي بزرگتري در قانون تغيير پيكربندي براي بهرهوري بيشتر است. ويندوز ۱۰ گروههاي پردازنده را به ۶۴ رشته محدود ميكند؛ درنتيجه، نميتوانيد بيش از ۵۰ درصد از منابع اجرايي 3990X را به جريان كاري واحد اختصاص دهيد؛ مگر اينكه اپليكيشن مدانديشه متخصصين از برنامهريز اختصاصي استفاده كند. بهدليل همين محدوديتها، 3990X براي اكثر اپليكيشنها پيشنهاد نميشود و تنها در ابزارهاي رندر و ديگر اپليكيشنهاي حرفهاي متخصصد دارد كه از برنامهريز اختصاصي بهره ميبرد.
مثالهاي يادشده نشان داد تغيير دستي پيكربندي براي افزايش كارايي سيستمعامل در پردازندههاي چندهستهاي، به پردازندههايي محدود ميشود كه از بيشترين تعداد هسته برخوردار است. در حالت ديگر، متخصص امكان تغيير و بهينهسازي چندان زيادي نخواهد داشت؛ البته چنين محدوديتي بهنفع خود متخصص هم تمام ميشود. متخصص نهايي نبايد نگران اختصاصدادن رشتههاي پردازشي با هدف بهحداكثررساندن كارايي در پردازنده باشد؛ چون پيكربندي بهينه براساس وظايفي كه پردازنده در لحظه انجام ميدهد، بهصورت خودكار پيادهسازي ميشود. درنهايت، پيشرفتهاي آتي در دنياي كامپيوتر همگي به اين سمت پيش ميروند كه هماهنگي پردازنده و سيستمعامل به حداكثر برسد و اولويتدهي به وظايف سريعتر انجام شود.
هم انديشي ها