7.3. تنظیم دقیق تعداد پردازندهها و کارها
نیکس دو تنظیم مرتبط در خصوص نحوه استفاده از هستههای پردازنده (CPU) شما دارد: cores و max-jobs. این فصل دربارهی ماهیت آنها، نحوه تعاملشان و مباحث مربوط به پیکربندی آنها بحث خواهد کرد.
max-jobs\ تعیین میکند چه تعداد درایویشن مجزا بهطور همزمان ساخته شوند. اگر این مقدار را روی صفر تنظیم کنید، ماشین محلی هیچ ساختی انجام نخواهد داد. با این حال، نیکس همچنان جایگزینی را از کشهای باینری انجام خواهد داد و در صورت پیکربندی سازندههای راه دور، بهصورت راه دور میسازد.cores\ پیشنهاد میکند که هر درایویشن باید از چند هسته استفاده کند. مشابهmake -j.
تنظیم cores مقدار NIX_BUILD_CORES را تعیین میکند. مقدار NIX_BUILD_CORES برابر با cores است، مگر اینکه cores برابر با 0 باشد؛ در این صورت NIX_BUILD_CORES برابر با تعداد کل هستههای موجود در سیستم خواهد بود.
حداکثر تعداد هستههای مصرفشده یک ضرب ساده است: max-jobs * NIX_BUILD_CORES.
تعادل در نحوه تنظیم این دو متغیر مستقل به بار کاری و سختافزار هر سازنده (builder) بستگی دارد. در ادامه چند سناریوی نمونه روی ماشینی با ۲۴ هسته آورده شده است:
max-jobs | cores | NIX_BUILD_CORES | فرآیندهای حداکثر | نتیجه |
|---|---|---|---|---|
| 1 | 24 | 24 | 24 | در هر لحظه یک درایویشن ساخته خواهد شد و هر کدام میتوانند از ۲۴ هسته استفاده کنند. اگر کاری نتواند از ۲۴ هسته استفاده کند، ظرفیت کمتر از حد معمول استفاده میشود. |
| 4 | 6 | 6 | 24 | چهار درایویشن به طور همزمان ساخته میشوند و به هر کدام دسترسی به شش هسته داده میشود. |
| 12 | 6 | 6 | 72 | ۱۲ درایویشن به طور همزمان ساخته میشوند و به هر کدام دسترسی به شش هسته داده میشود. این پیکربندی بیشازحد ظرفیت فروخته شده است (over-sold). اگر هر ۱۲ درایویشنی که به طور همزمان ساخته میشوند سعی کنند از هر شش هسته استفاده کنند، عملکرد ماشین به دلیل تعویض زمینه (context switching) گسترده بین ۱۲ ساخت، افت خواهد کرد. |
| 24 | 1 | 1 | 24 | ۲۴ درایویشن میتوانند همزمان ساخته شوند و هر کدام از یک هسته استفاده کنند. هرگز بیشازحد ظرفیت نیست، اما درایویشنهایی که به هستههای زیادی نیاز دارند، بسیار کند کامپایل خواهند شد. |
| 24 | 0 | 24 | 576 | ۲۴ درایویشن میتوانند همزمان ساخته شوند و هر کدام از تمام هستههای موجود ماشین استفاده کنند. بسیار محتمل است که بیشازحد ظرفیت باشد و بسیار محتمل است که از تعویضهای زمینه رنج ببرد. |
این بر عهده اسکریپت ساخت درایویشنها است که با پیروی از مقدار متغیر محیطی NIX_BUILD_CORES، به تعداد هستههای درخواستی هاست برای هر ساخت احترام بگذارد.
nix.dev/manual/nix/stable/advanced-topics/cores-vs-jobs.html