.TH erl 1 "erts 17.0.6" "Ericsson AB" "Erlang Module Definition" .SH "نام (NAME)" erl \- راه‌اندازی سیستم زمان اجرای ارلنگ .SH "توضیحات (DESCRIPTION)" .PP برنامه \fIerl\fR یک سیستم زمان اجرای ارلنگ را راه‌اندازی می‌کند. جزئیات دقیق (به عنوان مثال، اینکه آیا \fIerl\fR یک اسکریپت است یا یک برنامه، و اینکه چه برنامه‌های دیگری را فراخوانی می‌کند) وابسته به سیستم است. .PP \fBنکته: \fRاگر در ویندوز از Erlang/OTP 25 یا نسخه‌های پیش از آن استفاده می‌کنید و می‌خواهید یک سیستم ارلنگ را با پشتیبانی کامل از شل راه‌اندازی کنید، باید از \fIwerl.exe\fR استفاده نمایید. برای جزئیات نحوه انجام این کار، به مستندات Erlang/OTP 25 مراجعه کنید. .SS "erl " .PP یک سیستم زمان اجرای ارلنگ را راه‌اندازی می‌کند. .PP آرگومان‌ها را می‌توان به \fIفلگ‌های شبیه‌ساز\fR، \fIفلگ‌ها\fR و \fIآرگومان‌های ساده\fR تقسیم کرد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP هر آرگومانی که با نویسه \fI+\fR آغاز شود به عنوان یک فلگ شبیه‌ساز تفسیر می‌شود. .PP همان‌طور که از نام آن مشخص است، فلگ‌های شبیه‌ساز رفتار شبیه‌ساز را کنترل می‌کنند. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP هر آرگومانی که با نویسه \fI-\fR (خط تیره) آغاز شود به عنوان یک فلگ تفسیر می‌شود که باید به بخش ارلنگ سیستم زمان اجرا، به طور مشخص به فرآیند سیستمی \fIinit\fR ارسال گردد؛ به \fIinit\fR مراجعه کنید. .PP فرآیند \fIinit\fR خود برخی از این فلگ‌ها را تفسیر می‌کند که \fIفلگ‌های init\fR نامیده می‌شوند. همچنین سایر فلگ‌های باقی‌مانده را ذخیره می‌کند که \fIفلگ‌های کاربر\fR نام دارند. مورد اخیر را می‌توان با فراخوانی \fIinit:get_argument/1\fR بازیابی کرد. .PP تعداد اندکی از فلگ‌های "-" وجود دارند که در واقع فلگ شبیه‌ساز هستند؛ به توضیحات زیر مراجعه نمایید. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP آرگومان‌های ساده به هیچ عنوان تفسیر نمی‌شوند. آنها نیز توسط فرآیند \fIinit\fR ذخیره شده و با فراخوانی \fIinit:get_plain_arguments/0\fR قابل بازیابی هستند. آرگومان‌های ساده می‌توانند پیش از اولین فلگ یا پس از فلگ \fI--\fR قرار گیرند. همچنین، فلگ \fI-extra\fR باعث می‌شود هر آنچه پس از آن می‌آید به آرگومان‌های ساده تبدیل شود. .RE .PP \fIمثال‌ها:\fR .IP .nf % erl +W w -sname arnie +S 2 -s my_init -extra +bertie (arnie@host)1> init:get_argument(sname). {ok,[["arnie"]]} (arnie@host)2> init:get_plain_arguments(). ["+bertie"] .fi .PP در اینجا \fI+W w\fR و \fI+S 2\fR فلگ‌های شبیه‌ساز هستند. \fI-s my_init\fR یک فلگ init است که توسط \fIinit\fR تفسیر می‌شود. \fI-sname arnie\fR یک فلگ کاربر است که توسط \fIinit\fR ذخیره می‌شود؛ این گزینه توسط Kernel خوانده شده و سبب توزیع‌شدن سیستم زمان اجرای ارلنگ می‌گردد. در پایان، هر آنچه پس از \fI-extra\fR بیاید (یعنی \fI+bertie\fR) به عنوان آرگومان‌های ساده تلقی می‌شود. .IP .nf % erl -myflag 1 1> init:get_argument(myflag). {ok,[["1"]]} 2> init:get_plain_arguments(). [] .fi .PP در اینجا فلگ کاربر \fI-myflag 1\fR به فرآیند \fIinit\fR تحویل داده شده و توسط آن ذخیره می‌شود. این یک فلگ تعریف‌شده توسط کاربر است که احتمالاً توسط برنامه‌ای از پیش تعریف‌شده توسط کاربر مورد استفاده قرار می‌گیرد. .SS "فلگ‌ها (Flags)" .PP در فهرست زیر، فلگ‌های init با "(init flag)" مشخص شده‌اند. مگر در مواردی که خلاف آن تصریح شده باشد، تمامی فلگ‌های دیگر از نوع فلگ‌های کاربر هستند که مقادیر آنها را می‌توان با فراخوانی \fIinit:get_argument/1\fR به دست آورد. توجه داشته باشید که فهرست فلگ‌های کاربر جامع نیست و ممکن است فلگ‌های اختصاصی برنامه‌های دیگری نیز وجود داشته باشد که در مستندات مربوط به همان برنامه‌ها شرح داده شده‌اند. -- (init flag) .RS 2 هر چیزی پس از \fI--\fR تا فلگ بعدی (\fI-flag\fR یا \fI+flag\fR) به عنوان آرگومان‌های ساده تلقی شده و می‌توان با استفاده از \fIinit:get_plain_arguments/0\fR آن را بازیابی کرد. .RE -Application Par Val .RS 2 پارامتر پیکربندی برنامه \fIPar\fR را روی مقدار \fIVal\fR برای برنامه \fIApplication\fR تنظیم می‌کند؛ به \fIapp(4)\fR و \fIapplication\fR مراجعه کنید. .RE -args_file FileName .RS 2 آرگومان‌های خط فرمان از فایل \fIFileName\fR خوانده می‌شوند. آرگومان‌های خوانده‌شده از فایل جایگزین فلگ '\fI-args_file FileName\fR' در خط فرمان حاصل می‌گردند. .PP فایل \fIFileName\fR باید یک فایل متنی ساده باشد و می‌تواند شامل توضیحات و آرگومان‌های خط فرمان باشد. یک توضیح با نویسه \fI#\fR آغاز می‌شود و تا نویسه پایان خط بعدی ادامه می‌یابد. از بک‌اسلش (\\) به عنوان نویسه نقل‌قول استفاده می‌شود. تمام آرگومان‌های خط فرمان پذیرفته‌شده توسط \fIerl\fR مجاز هستند، از جمله فلگ \fI-args_file FileName\fR. با این حال دقت کنید که بین فایل‌های حاوی فلگ \fI-args_file\fR وابستگی دورانی ایجاد نکنید. .PP با فلگ \fI-extra\fR به شیوه خاصی رفتار می‌شود. دامنه آن در پایان فایل خاتمه می‌یابد. آرگومان‌های پس از یک فلگ \fI-extra\fR در خط فرمان به بخش \fI-extra\fR، یعنی انتهای خط فرمان پس از فلگ \fI-extra\fR منتقل می‌شوند. .RE -async_shell_start .RS 2 شل اولیه ارلنگ تا زمان تکمیل فرآیند راه‌اندازی و بوت سیستم ورودی کاربر را نمی‌خواند (Erlang/OTP 5.4 و نسخه‌های جدیدتر). این فلگ قابلیت همگام‌سازی آغازین را غیرفعال کرده و اجازه می‌دهد شل به صورت موازی با سایر بخش‌های سیستم شروع به کار کند. .RE -boot File .RS 2 نام فایل بوت، \fIFile.boot\fR را که برای راه‌اندازی سیستم به کار می‌رود مشخص می‌کند؛ به \fIinit\fR مراجعه کنید. مگر اینکه \fIFile\fR شامل یک مسیر مطلق باشد، سیستم به دنبال \fIFile.boot\fR در پوشه جاری و دایرکتوری‌های \fI$ROOT/bin\fR می‌گردد. .PP پیش‌فرض \fI$ROOT/bin/start.boot\fR است. .RE -boot_var Var Dir .RS 2 اگر اسکریپت بوت شامل متغیر مسیر \fIVar\fR به غیر از \fI$ROOT\fR باشد، این متغیر به \fIDir\fR بسط داده می‌شود. هنگامی به کار می‌رود که برنامه‌ها در دایرکتوری دیگری به جز \fI$ROOT/lib\fR نصب شده باشند؛ به \fIsystools:make_script/1,2\fR در SASL مراجعه نمایید. .RE -code_path_cache .RS 2 کش مسیر کد مربوط به سرور کد را فعال می‌کند؛ به \fIcode\fR مراجعه کنید. .RE -compile Mod1 Mod2 ... .RS 2 ماژول‌های مشخص‌شده را کامپایل کرده و سپس خاتمه می‌یابد (در صورت عدم موفقیت کامپایل فایلی، با کد خروج غیر صفر خارج می‌شود). مستلزم \fI-noinput\fR است. .PP توصیه نمی‌شود؛ در عوض از \fIerlc\fR استفاده کنید. .RE -config Config [Config ...] .RS 2 نام یک یا چند فایل پیکربندی، \fIConfig.config\fR را که برای پیکربندی برنامه‌ها استفاده می‌شود مشخص می‌کند؛ به \fIapp(4)\fR و \fIapplication\fR مراجعه کنید. برای توضیح قالب پیکربندی و ترتیبی که پارامترهای پیکربندی خوانده می‌شوند، به مستندات ساختار فایل پیکربندی مراجعه کنید. .RE -configfd FD [FD ...] .RS 2 نام یک یا چند توصیف‌کننده فایل (که از این پس توصیف‌کننده‌های فایل پیکربندی نامیده می‌شوند) حاوی داده‌های پیکربندی برنامه‌ها را مشخص می‌کند؛ به \fIapp(4)\fR و \fIapplication\fR مراجعه کنید. برای توضیح قالب پیکربندی و ترتیب خوانده شدن پارامترهای پیکربندی، به مستندات ساختار فایل پیکربندی مراجعه کنید. .PP یک توصیف‌کننده فایل پیکربندی تا پایان خوانده شده و سپس بسته خواهد شد. .PP محتوای یک توصیف‌کننده فایل پیکربندی ذخیره می‌شود تا هنگام فراخوانی \fIinit:restart/0\fR یا \fIinit:restart/1\fR مجدداً قابل استفاده باشد. .PP پارامتر \fI-configfd 0\fR مستلزم \fI-noinput\fR است. .PP \fBنکته: \fRاستفاده از توصیف‌کننده‌های فایل ۱ (خروجی استاندارد) و ۲ (خطای استاندارد) به همراه \fI-configfd\fR توصیه نمی‌شود، چرا که این توصیف‌کننده‌ها معمولاً برای چاپ اطلاعات در کنسولی که برنامه در آن اجرا می‌شود به کار می‌روند. .PP مثال‌ها (شل یونیکس): .IP .nf $ erl \\ -noshell \\ -configfd 3 \\ -eval \\ 'io:format("~p~n",[application:get_env(kernel, logger_level)]),erlang:halt()' 3< \\ <(echo '[{kernel, [{logger_level, warning}]}].') {ok,warning} .fi .IP .nf $ echo '[{kernel, [{logger_level, warning}]}].' > test1.config $ echo '[{kernel, [{logger_level, error}]}].' > test2.config $ erl \\ -noshell \\ -configfd 3 \\ -configfd 4 \\ -eval \\ 'io:format("~p~n",[application:get_env(kernel, logger_level)]),erlang:halt()' \\ 3< test1.config 4< test2.config {ok,error} .fi .RE -connect_all false .RS 2 این فلگ منسوخ شده است و با پارامتر برنامه \fIkernel\fR به نام \fIconnect_all\fR جایگزین شده است. .RE -cookie Cookie .RS 2 فلگ منسوخ فاقد اثر و غلط املایی رایج برای \fI-setcookie\fR است. در عوض از \fI-setcookie\fR استفاده کنید. .RE -detached .RS 2 سیستم زمان اجرای ارلنگ را به صورت جداشده از کنسول سیستم راه‌اندازی می‌کند. برای اجرای دیمن‌ها و فرآیندهای پس‌زمینه بسیار کاربردی است. مستلزم \fI-noinput\fR است. .RE -disable-feature feature .RS 2 ویژگی \fIfeature\fR را در سیستم زمان اجرا غیرفعال می‌کند. ویژگی خاص \fIall\fR می‌تواند برای غیرفعال کردن تمامی ویژگی‌های غیردائمی استفاده شود. .RE -dist_listen true|false .RS 2 مشخص می‌کند که آیا این گره باید برای اتصالات توزیع ورودی گوش فرا دهد یا خیر. به طور پیش‌فرض یک گره به اتصالات ورودی گوش می‌دهد. تنظیم این گزینه روی \fIfalse\fR مستلزم \fI-hidden\fR است. .RE -emu_args .RS 2 برای اشکال‌زدایی مفید است. آرگومان‌های ارسال‌شده به شبیه‌ساز را چاپ می‌کند. .RE -emu_flavor emu|jit|smp .RS 2 یک شبیه‌ساز با طعم (flavor) متفاوت را اجرا می‌کند. معمولاً تنها یک طعم در دسترس است؛ طعم‌های بیشتر را می‌توان با ساخت طعم‌های اختصاصی افزود. طعم‌های فعلی در دسترس عبارتند از: \fIemu\fR و \fIjit\fR. طعم \fIsmp\fR یک نام مستعار برای طعم پیش‌فرض فعلی است. می‌توانید این فلگ را با \fI--emu_type\fR ترکیب کنید. طعم فعلی را می‌توانید در زمان اجرا با استفاده از \fIerlang:system_info(emu_flavor)\fR به دست آورید. (شبیه‌ساز با این طعم باید ساخته شده باشد. می‌توانید با اجرای \fImake FLAVOR=$FLAVOR\fR در مخزن سورس‌کد Erlang/OTP یک طعم خاص را بسازید.) .RE -emu_type Type .RS 2 یک شبیه‌ساز با نوع متفاوت را اجرا می‌کند. به عنوان مثال، برای اجرای شبیه‌ساز lock-counter، از \fI-emu_type lcnt\fR استفاده کنید. نوع فعلی را می‌توانید در زمان اجرا با \fIerlang:system_info(build_type)\fR دریافت کنید. (شبیه‌ساز از این نوع باید از قبل ساخته شده باشد. از گزینه \fI--enable-lock-counter\fR در دستور \fIconfigure\fR برای ساخت شبیه‌ساز شمارنده قفل استفاده کنید.) .RE -enable-feature feature .RS 2 ویژگی \fIfeature\fR را در سیستم زمان اجرا فعال می‌کند. ویژگی خاص \fIall\fR می‌تواند برای فعال‌سازی تمام ویژگی‌ها استفاده شود. .RE -env Variable Value .RS 2 متغیر محیطی سیستم‌عامل میزبان \fIVariable\fR را برای سیستم زمان اجرای ارلنگ روی مقدار \fIValue\fR تنظیم می‌کند. مثال: .IP .nf % erl -env DISPLAY gin:0 .fi .PP در این مثال، یک سیستم زمان اجرای ارلنگ با متغیر محیطی \fIDISPLAY\fR تنظیم‌شده روی \fIgin:0\fR اجرا می‌شود. .RE -epmd_module Module .RS 2 این فلگ منسوخ شده است و با پارامتر برنامه \fIkernel\fR به نام \fIepmd_module\fR جایگزین گردیده است. .RE -erl_epmd_port Port .RS 2 این فلگ منسوخ شده است و با پارامتر برنامه \fIkernel\fR به نام \fIerl_epmd_node_listen_port\fR جایگزین شده است. .RE -eval Expr (init flag) .RS 2 باعث می‌شود \fIinit\fR عبارت \fIExpr\fR را ارزیابی کند؛ به \fIinit\fR مراجعه کنید. .RE -extra (init flag) .RS 2 هر آنچه پس از \fI-extra\fR بیاید به عنوان آرگومان‌های ساده تلقی شده و می‌توان با استفاده از \fIinit:get_plain_arguments/0\fR آن را بازیابی کرد. .RE -heart .RS 2 پایش ضربان قلب (heartbeat) سیستم زمان اجرای ارلنگ را راه‌اندازی می‌کند؛ به \fIheart\fR مراجعه کنید. .RE -hidden .RS 2 در صورتی که سیستم زمان اجرای ارلنگ به عنوان یک گره توزیع‌شده اجرا شود، آن را به عنوان یک گره مخفی راه‌اندازی می‌کند. گره‌های مخفی همیشه با تمام گره‌های دیگر به جز گره‌های حاضر در همان گروه سراسری (global group)، اتصالات مخفی برقرار می‌کنند. اتصالات مخفی در هیچ‌یک از گره‌های متصل منتشر نمی‌شوند؛ یعنی هیچ‌یک از گره‌های متصل بخشی از خروجی \fInodes/0\fR در گره دیگر نخواهند بود. همچنین به بخش گروه‌های سراسری مخفی در \fIglobal_group\fR مراجعه نمایید. .RE -hosts Hosts .RS 2 آدرس‌های IP میزبان‌هایی که سرورهای بوت ارلنگ روی آنها در حال اجرا هستند را مشخص می‌کند؛ به \fIerl_boot_server\fR مراجعه کنید. این فلگ در صورت وجود فلگ \fI-loader inet\fR الزامی است. .PP آدرس‌های IP باید به شکل استاندارد (چهار عدد ده‌دهی جداشده با نقطه، مثلاً \fI"150.236.20.74"\fR) مشخص شوند. نام‌های میزبان پذیرفته نمی‌شوند، اما آدرس پخش همگانی (broadcast) (ترجیحاً محدود به شبکه محلی) پذیرفته می‌شود. .RE -id Id .RS 2 شناسه سیستم زمان اجرای ارلنگ را مشخص می‌کند. اگر به عنوان یک گره توزیع‌شده اجرا شود، \fIId\fR باید دقیقاً با نام ارائه‌شده همراه با فلگ \fI-sname\fR یا \fI-name\fR یکسان باشد. .RE -init_debug .RS 2 باعث می‌شود \fIinit\fR هنگام تفسیر اسکریپت بوت، اطلاعات اشکال‌زدایی را بنویسد. .RE -instr (emulator flag) .RS 2 یک سیستم زمان اجرای ارلنگ (ماشین مجازی) ابزاربندی‌شده (instrumented) را به جای نسخه معمولی برای اجرا انتخاب می‌کند. هنگام اجرای سیستم زمان اجرای ابزاربندی‌شده، می‌توان برخی داده‌های مصرف منابع را با استفاده از ماژول \fIinstrument\fR به دست آورد و تحلیل کرد. از لحاظ عملکردی، این سیستم دقیقاً مانند یک سیستم زمان اجرای ارلنگ معمولی رفتار می‌کند. .RE -loader Loader .RS 2 روشی را مشخص می‌کند که توسط \fIerl_prim_loader\fR برای بارگذاری ماژول‌های ارلنگ در سیستم استفاده می‌شود؛ به \fIerl_prim_loader\fR مراجعه کنید. دو روش \fILoader\fR پشتیبانی می‌شوند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fIefile\fR، که به معنی استفاده از سیستم فایل محلی است؛ این مقدار پیش‌فرض است. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fIinet\fR، که به معنای استفاده از سرور بوت روی یک ماشین دیگر است. فلگ‌های \fI-id\fR، \fI-hosts\fR و \fI-setcookie\fR نیز باید مشخص شوند. .RE .PP اگر \fILoader\fR مقدار دیگری باشد، برنامه درگاه \fILoader\fR ارائه‌شده توسط کاربر اجرا می‌شود. .RE -make .RS 2 باعث می‌شود سیستم زمان اجرای ارلنگ تابع \fImake:all()\fR را در دایرکتوری کاری جاری فراخوانی کرده و سپس پایان یابد؛ به \fImake\fR مراجعه کنید. مستلزم \fI-noinput\fR است. .RE -man Module .RS 2 صفحه راهنمای مربوط به ماژول ارلنگ \fIModule\fR را نمایش می‌دهد. فقط در یونیکس پشتیبانی می‌شود. .RE -mode interactive | embedded .RS 2 اگر سیستم زمان اجرا در حالت \fIinteractive\fR (که حالت پیش‌فرض است) اجرا شود، ماژول‌ها هنگام ارجاع اولیه به صورت خودکار بارگذاری می‌شوند. در حالت \fIembedded\fR ماژول‌ها به طور خودکار بارگذاری نمی‌شوند. حالت دوم زمانی توصیه می‌شود که اسکریپت بوت تمامی ماژول‌ها را از پیش بارگذاری کرده باشد، که معمولاً در انتشارهای OTP چنین است. به \fIcode\fR مراجعه نمایید. .RE -name Name .RS 2 سیستم زمان اجرای ارلنگ را به یک گره توزیع‌شده تبدیل می‌کند. این فلگ تمام سرورهای شبکه لازم را فراخوانی می‌کند تا گره توزیع‌شده شود؛ به \fInet_kernel\fR مراجعه کنید. همچنین تضمین می‌کند که پیش از آغاز ارلنگ، \fIepmd\fR روی میزبان جاری در حال اجرا باشد (به \fIepmd(1)\fR و گزینه \fI-start_epmd\fR رجوع کنید) و یک کوکی جادویی نیز تنظیم شده باشد (به -setcookie مراجعه نمایید). .PP نام گره به صورت \fIName@Host\fR خواهد بود، که در آن \fIHost\fR نام میزبان کاملاً واجد شرایط (FQDN) از میزبان جاری است. برای نام‌های کوتاه، در عوض از فلگ \fI-sname\fR استفاده نمایید. .PP اگر \fIName\fR روی \fI\fIundefined\fR\fR تنظیم شده باشد، گره در حالت ویژه‌ای راه‌اندازی می‌شود که برای کلاینت موقت یک گره دیگر بودن بهینه‌سازی شده است. سپس گره از اولین گره‌ای که به آن متصل می‌شود، یک نام گره پویا درخواست می‌کند. در Dynamic Node Name بیشتر بخوانید. .PP \fBهشدار: \fRراه‌اندازی یک گره توزیع‌شده بدون مشخص کردن همزمان \fI-proto_dist inet_tls\fR، گره را در معرض حملاتی قرار می‌دهد که ممکن است به مهاجم دسترسی کامل به گره و در نتیجه کل کلاستر را بدهد. هنگام استفاده از گره‌های توزیع‌شده غیرامن، اطمینان حاصل کنید که شبکه طوری پیکربندی شده است که مهاجمان احتمالی را بیرون نگه دارد. .RE -nocookie .RS 2 از ایجاد یا استفاده از کوکی جادویی توسط گره جلوگیری می‌کند. .PP هنگامی که از این فلگ استفاده شود، گره در زمان راه‌اندازی فایل \fI~/.erlang.cookie\fR را نخواهد خواند. .PP کوکی خود گره در وضعیت "undefined" باقی می‌ماند مگر اینکه بعداً صریحاً از طریق \fIerlang:set_cookie/1\fR یا \fIerlang:set_cookie/2\fR تنظیم گردد. .PP این کار عملاً از مشارکت گره در یک کلاستر توزیع‌شده ارلنگ با گره‌هایی که نیاز به احراز هویت کوکی دارند جلوگیری می‌کند. عمدتاً برای گره‌هایی به کار می‌رود که قرار است ایزوله و مستقل باشند. .RE -no_epmd .RS 2 مشخص می‌کند که گره توزیع‌شده اصلاً به epmd نیازی ندارد. .PP این گزینه تضمین می‌کند که سیستم زمان اجرای ارلنگ epmd را اجرا نکند و فرآیند \fIerl_epmd\fR را نیز برای توزیع راه‌اندازی ننماید. .PP این گزینه تنها زمانی کار می‌کند که ارلنگ به عنوان یک گره توزیع‌شده با گزینه -proto_dist و با استفاده از یک پروتکل جایگزین برای توزیع ارلنگ راه‌اندازی شود که برای ثبت و کشف گره‌ها به epmd وابسته نباشد. برای اطلاعات بیشتر، به راهنمای How to implement an Alternative Carrier for the Erlang Distribution مراجعه کنید. .RE -noinput .RS 2 تضمین می‌کند که سیستم زمان اجرای ارلنگ هرگز تلاشی برای خواندن هیچ ورودی انجام ندهد. مستلزم \fI-noshell\fR است. .RE -noshell .RS 2 یک سیستم زمان اجرای ارلنگ را بدون شل اجرا می‌کند. این فلگ امکان قرارگیری سیستم زمان اجرای ارلنگ را به عنوان یک مؤلفه در مجموعه‌ای از پایپ‌های یونیکس فراهم می‌سازد. .RE -nostick .RS 2 قابلیت دایرکتوری‌های چسبنده (sticky directory) سرور کد ارلنگ را غیرفعال می‌کند؛ به \fIcode\fR مراجعه کنید. .RE -oldshell .RS 2 شل قدیمی ارلنگ مربوط به Erlang/OTP 3.3 را فراخوانی می‌کند. شل قدیمی همچنان قابل استفاده است. .RE -pa Dir1 Dir2 ... .RS 2 دایرکتوری‌های مشخص‌شده را مشابه \fIcode:add_pathsa/1\fR به ابتدای مسیر کد اضافه می‌کند. توجه داشته باشید که ترتیب دایرکتوری‌های داده‌شده در مسیر نهایی معکوس خواهد شد. .PP به عنوان جایگزینی برای \fI-pa\fR، چنانچه قرار است چندین دایرکتوری به ابتدای مسیر کد افزوده شوند و دارای یک دایرکتوری والد مشترک هستند، آن دایرکتوری والد می‌تواند در متغیر محیطی \fIERL_LIBS\fR مشخص گردد؛ به \fIcode\fR مراجعه کنید. .RE -pz Dir1 Dir2 ... .RS 2 دایرکتوری‌های مشخص‌شده را مشابه \fIcode:add_pathsz/1\fR به انتهای مسیر کد اضافه می‌کند؛ به \fIcode\fR مراجعه کنید. .RE -path Dir1 Dir2 ... .RS 2 مسیر مشخص‌شده در اسکریپت بوت را جایگزین می‌کند؛ به \fIscript(4)\fR مراجعه کنید. .RE -proto_dist Proto .RS 2 پروتکل مورد استفاده برای توزیع ارلنگ را تعیین می‌کند: inet_tcp .RS 2 پروتکل TCP بر روی IPv4 (حالت پیش‌فرض) .RE inet_tls .RS 2 توزیع بر بستر TLS/SSL؛ برای جزئیات مربوط به برپایی یک گره توزیع‌شده امن، به راهنمای Using SSL for Erlang Distribution User's Guide مراجعه نمایید. .RE inet6_tcp .RS 2 پروتکل TCP بر روی IPv6 .RE .PP به عنوان مثال، برای راه‌اندازی گره‌های توزیع‌شده با IPv6: .IP .nf % erl -name test@ipv6node.example.com -proto_dist inet6_tcp .fi .RE -remsh Node .RS 2 ارلنگ را با یک شل از راه دور متصل به \fINode\fR راه‌اندازی می‌کند. .PP اگر هیچ \fI-name\fR یا \fI-sname\fR مشخص نشده باشد، گره با استفاده از \fI-sname undefined\fR راه‌اندازی خواهد شد. اگر \fINode\fR شامل نام میزبان نباشد، نام میزبان به طور خودکار از \fI-name\fR یا \fI-sname\fR اخذ می‌شود. .PP \fBنکته: \fRپیش از OTP-23، کاربر \fIباید\fR یک \fI-sname\fR یا \fI-name\fR معتبر برای کارکرد \fI-remsh\fR فراهم می‌کرد. اگر گره مقصد نسخه‌ای قدیمی‌تر از OTP-23 را اجرا کند، هنوز هم وضعیت چنین است. .PP \fBنکته: \fRگره متصل‌شونده باید دارای یک شل مناسب با شبیه‌سازی ترمینال باشد. این بدان معناست که کاربران یونیکس باید از ارلنگ کامپایل‌شده با قابلیت‌های ترمینال استفاده کنند و پیش از Erlang/OTP 25 کاربران ویندوز باید از \fIwerl\fR بهره بگیرند. .RE -rsh Program .RS 2 جایگزینی برای \fIssh\fR به منظور راه‌اندازی یک گره زیردست (slave) روی یک میزبان راه دور تعیین می‌کند؛ به \fIslave\fR مراجعه فرمایید. .RE -S Mod [Func [Arg1, Arg2, ...]] (init flag) .RS 2 باعث می‌شود \fIinit\fR تابع مشخص‌شده را فراخوانی کند. \fIFunc\fR به طور پیش‌فرض \fIstart\fR است. فرض بر این است که تابع دارای آرتی ۱ است و لیست \fI[Arg1,Arg2,...]\fR را به عنوان آرگومان دریافت می‌کند، یا در صورت عدم ارسال آرگومان یک لیست خالی می‌گیرد. تمامی آرگومان‌های بعدی که پس از این گزینه می‌آیند به صورت رشته به تابع مشخص‌شده فرستاده می‌شوند. مستلزم \fI-noshell\fR است. به \fIinit\fR مراجعه کنید. .RE -run Mod [Func [Arg1, Arg2, ...]] (init flag) .RS 2 باعث می‌شود \fIinit\fR تابع مشخص‌شده را فراخوانی کند. \fIFunc\fR به طور پیش‌فرض \fIstart\fR است. در صورتی که هیچ آرگومانی داده نشود، فرض بر این است که تابع دارای آرتی ۰ است؛ در غیر این صورت فرض بر آرتی ۱ بوده و لیست \fI[Arg1,Arg2,...]\fR را به عنوان آرگومان می‌گیرد. تمام آرگومان‌ها به صورت رشته فرستاده می‌شوند. به \fIinit\fR مراجعه نمایید. .RE -s Mod [Func [Arg1, Arg2, ...]] (init flag) .RS 2 باعث می‌شود \fIinit\fR تابع مشخص‌شده را فراخوانی کند. \fIFunc\fR به طور پیش‌فرض \fIstart\fR است. در صورتی که هیچ آرگومانی ارائه نشود، فرض بر این است که تابع دارای آرتی ۰ است؛ در غیر این صورت فرض بر آرتی ۱ بوده و لیست \fI[Arg1,Arg2,...]\fR را به عنوان آرگومان می‌پذیرد. تمام آرگومان‌ها به عنوان اتم فرستاده می‌شوند. به \fIinit\fR مراجعه کنید. .RE -setcookie Cookie .RS 2 کوکی جادویی گره را روی \fICookie\fR تنظیم می‌کند؛ به \fIerlang:set_cookie/1\fR مراجعه نمایید. برای جزئیات بیشتر به بخش Distributed Erlang در راهنمای مرجع ارلنگ رجوع کنید. .RE -setcookie Node Cookie .RS 2 کوکی جادویی را برای \fINode\fR روی \fICookie\fR تنظیم می‌کند؛ به \fIerlang:set_cookie/2\fR مراجعه فرمایید. .RE -shutdown_time Time .RS 2 مشخص می‌کند که فرآیند \fIinit\fR مجاز است چه مدت زمانی (بر حسب میلی‌ثانیه) را صرف خاموش کردن برنامه‌های کاربردی ارلنگ در سیستم کند. چنانچه \fITime\fR میلی‌ثانیه سپری شود، تمامی فرآیندهایی که همچنان پابرجا هستند کشته می‌شوند. پیش‌فرض \fIinfinity\fR است. .RE -sname Name .RS 2 سیستم زمان اجرای ارلنگ را مشابه \fI-name\fR به یک گره توزیع‌شده تبدیل می‌کند، اما بخش نام میزبان در نام گره \fIName@Host\fR به صورت نام کوتاه خواهد بود و نام کاملاً واجد شرایط نیست. .PP در صورتی که سامانه نام دامنه (DNS) در حال اجرا نباشد، این گزینه گاهی اوقات تنها راه برای اجرای ارلنگ توزیع‌شده است. هیچ ارتباطی میان گره‌های اجراشده با فلگ \fI-sname\fR و گره‌های اجراشده با فلگ \fI-name\fR نمی‌تواند برقرار شود، چرا که نام گره‌ها در سیستم‌های ارلنگ توزیع‌شده باید منحصر‌به‌فرد باشد. .PP اگر \fIName\fR روی \fI\fIundefined\fR\fR تنظیم شود، گره در حالت ویژه‌ای راه‌اندازی خواهد شد که برای کلاینت موقت گره دیگر بودن بهینه‌سازی شده است. سپس گره از نخستین گره‌ای که به آن متصل شود درخواست یک نام گره پویا می‌کند. در Dynamic Node Name بیشتر بخوانید. .PP \fBهشدار: \fRراه‌اندازی یک گره توزیع‌شده بدون مشخص کردن همزمان \fI-proto_dist inet_tls\fR، گره را در معرض حملاتی قرار می‌دهد که ممکن است به مهاجم دسترسی کامل به گره و در نتیجه کل کلاستر را بدهد. هنگام استفاده از گره‌های توزیع‌شده غیرامن، اطمینان حاصل کنید که شبکه طوری پیکربندی شده است که مهاجمان احتمالی را بیرون نگه دارد. .RE -start_epmd true | false .RS 2 مشخص می‌کند که آیا ارلنگ هنگام راه‌اندازی باید epmd را اجرا کند یا خیر. پیش‌فرض \fItrue\fR است، اما اگر ترجیح می‌دهید epmd را دستی راه‌اندازی کنید، این گزینه را روی \fIfalse\fR تنظیم نمایید. .PP این فلگ تنها در صورتی اثر دارد که ارلنگ به عنوان یک گره توزیع‌شده راه‌اندازی شود، یعنی \fI-name\fR یا \fI-sname\fR مشخص شده باشد. در غیر این صورت، حتی اگر \fI-start_epmd true\fR مشخص شود، epmd راه‌اندازی نخواهد شد. .PP توجه داشته باشید که اگر epmd در حال اجرا نباشد، راه‌اندازی گره توزیع‌شده با شکست مواجه می‌شود. .RE -version (emulator flag) .RS 2 باعث می‌شود شبیه‌ساز شماره نسخه خود را چاپ کند. مشابه \fIerl +V\fR است. .RE .SS "فلگ‌های شبیه‌ساز (Emulator Flags)" .PP دستور \fIerl\fR کد مربوط به شبیه‌ساز (ماشین مجازی) ارلنگ را فراخوانی می‌کند که از فلگ‌های زیر پشتیبانی می‌نماید. فلگ‌ها از چپ به راست خوانده می‌شوند و فلگ‌های بعدی رفتار فلگ‌های قبلی را بازنویسی (override) می‌کنند. +a size .RS 2 اندازه پیشنهادی استک (پشته)، بر حسب کیلوورد (kilowords)، برای نخ‌ها در استخر نخ‌های ناهمگام (async thread pool). محدوده معتبر ۱۶ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض ۱۶ کیلوورد است، یعنی ۶۴ کیلوبایت در معماری‌های ۳۲ بیتی. این اندازه کوچک پیش‌فرض به این دلیل انتخاب شده است که تعداد نخ‌های ناهمگام می‌تواند زیاد باشد. اندازه پیش‌فرض برای درایورهای ارائه‌شده همراه با Erlang/OTP کافی است، اما ممکن است برای سایر درایورهای پیوندخورده پویا که از قابلیت \fIdriver_async()\fR استفاده می‌کنند کافی نباشد. توجه داشته باشید که مقدار ارائه‌شده صرفاً یک پیشنهاد است و حتی ممکن است در برخی پلتفرم‌ها نادیده گرفته شود. .RE +A size .RS 2 تعداد نخ‌ها را در استخر نخ‌های ناهمگام تنظیم می‌کند. محدوده معتبر ۱ تا ۱۰۲۴ است. استخر نخ‌های ناهمگام توسط درایورهای پیوندخورده برای مدیریت کارهایی که ممکن است زمان بسیار زیادی طول بکشند به کار می‌رود. از نسخه OTP 21، توزیع پیش‌فرض Erlang/OTP شامل تعداد کمی از درایورهای پیوندخورده است که از این استخر استفاده می‌کنند و اکثر آنها به زمان‌بندهای کثیف I/O منتقل شده‌اند. پیش‌فرض ۱ است. .RE +B [c | d | i] .RS 2 گزینه \fIc\fR باعث می‌شود فشردن \fICtrl-C\fR شل جاری را متوقف کند، به جای اینکه گرداننده توقف (break handler) شبیه‌ساز را فراخوانی نماید. گزینه \fId\fR (مشابه تعیین \fI+B\fR بدون گزینه اضافی) گرداننده توقف را غیرفعال می‌کند. گزینه \fIi\fR سبب می‌شود شبیه‌ساز هرگونه سیگنال توقف را نادیده بگیرد. .PP اگر گزینه \fIc\fR همراه با \fIoldshell\fR در یونیکس استفاده شود، کلید ترکیبی \fICtrl-C\fR به جای توقف، فرآیند شل را بازراه‌اندازی خواهد کرد. .RE +c true | false .RS 2 تصحیح زمان را فعال یا غیرفعال می‌کند: true .RS 2 تصحیح زمان را فعال می‌کند. اگر تصحیح زمان در پلتفرم مربوطه پشتیبانی شود، این حالت پیش‌فرض است. .RE false .RS 2 تصحیح زمان را غیرفعال می‌کند. .RE .PP برای سازگاری با گذشته، مقدار بولی می‌تواند حذف شود که در این صورت به عنوان \fI+c false\fR تفسیر خواهد شد. .RE +C no_time_warp | single_time_warp | multi_time_warp .RS 2 حالت پیچش زمانی (time warp mode) را تنظیم می‌کند: no_time_warp .RS 2 حالت بدون پیچش زمانی .RE single_time_warp .RS 2 حالت پیچش زمانی تکی .RE multi_time_warp .RS 2 حالت پیچش زمانی چندگانه (پیش‌فرض از زمان Erlang/OTP 26.0) .RE .RE +d .RS 2 اگر شبیه‌ساز یک خطای داخلی شناسایی کند (یا حافظه کم بیاورد)، به طور پیش‌فرض هم یک گزارش خرابی (crash dump) و هم یک core dump تولید می‌کند. با این حال، core dump چندان مفید نیست چرا که محتوای هیپ فرآیندها به واسطه تولید گزارش خرابی تخریب می‌شود. .PP گزینه \fI+d\fR به شبیه‌ساز دستور می‌دهد که در صورت شناسایی خطای داخلی، تنها یک core dump تولید کرده و هیچ گزارش خرابی تولید نکند. .PP فراخوانی \fIerlang:halt/1\fR با یک آرگومان رشته‌ای همچنان یک گزارش خرابی تولید می‌کند. در سیستم‌های یونیکس، ارسال سیگنال \fISIGUSR1\fR به فرآیند شبیه‌ساز نیز ایجاد گزارش خرابی را اجباری می‌کند. .RE +dcg DecentralizedCounterGroupsLimit .RS 2 تعداد گروه‌های شمارنده نامتمرکز مورد استفاده توسط شمارنده‌های نامتمرکزِ بهینه‌شده برای عملیات به‌روزرسانی در سیستم زمان اجرای ارلنگ را محدود می‌کند. به طور پیش‌فرض، این محدودیت ۲۵۶ است. .PP هنگامی که تعداد زمان‌بندها کمتر یا مساوی این محدودیت باشد، هر زمان‌بند گروه اختصاصی خود را دارد. هنگامی که تعداد زمان‌بندها بیشتر از محدودیت گروه‌ها باشد، زمان‌بندها گروه‌ها را به اشتراک می‌گذارند. گروه‌های مشترک کارایی به‌روزرسانی شمارنده‌ها را کاهش می‌دهند، در حالی که وجود گروه‌های خواننده پرتعداد کارایی خواندن شمارنده‌ها را تقلیل می‌دهد. بنابراین، این حد مصالحه‌ای میان کارایی عملیات به‌روزرسانی و کارایی عملیات خواندن است. هر گروه ۶۴ بایت در هر شمارنده مصرف می‌کند. .PP توجه داشته باشید که یک سیستم زمان اجرا که از گروه‌های شمارنده نامتمرکز استفاده می‌کند، از مقید کردن زمان‌بندها به پردازنده‌های منطقی سود می‌برد، زیرا با این گزینه گروه‌ها به شکل بهتری میان زمان‌بندها توزیع می‌شوند. .PP این گزینه تنها بر شمارنده‌های نامتمرکزی تأثیر می‌گذارد که برای رهگیری مصرف حافظه و تعداد عبارت‌ها (terms) در جداول ETS از نوع ordered_set با فعال بودن گزینه write_concurrency استفاده می‌شوند. .RE +e Number .RS 2 حداکثر تعداد جداول ETS را تنظیم می‌کند. این محدودیت تا حدی منسوخ شده است. .RE +ec .RS 2 گزینه \fIcompressed\fR را روی تمام جداول ETS اجباری می‌کند. صرفاً برای آزمایش و ارزیابی در نظر گرفته شده است. .RE +fnl .RS 2 ماشین مجازی با نام‌های فایل طوری رفتار می‌کند که گویی با کدگذاری ISO Latin-1 کدگذاری شده‌اند، و کاراکترهای یونیکد با مقادیر کدبندی بزرگتر از ۲۵۵ را غیرمجاز می‌داند. .PP برای اطلاعات بیشتر درباره نام‌های فایل یونیکد، به بخش Unicode Filenames در راهنمای کاربر STDLIB مراجعه کنید. توجه داشته باشید که این مقدار برای پارامترهای خط فرمان و متغیرهای محیطی نیز اعمال می‌شود (بخش Unicode in Environment and Parameters را در راهنمای کاربر STDLIB ببینید). .RE +fnu[{w|i|e}] .RS 2 ماشین مجازی با نام‌های فایل طوری رفتار می‌کند که گویی با UTF-8 (یا کدگذاری یونیکد خاص سیستم دیگری) کدگذاری شده‌اند. این حالت در سیستم‌عامل‌هایی که کدگذاری یونیکد را الزامی می‌کنند، یعنی ویندوز، مک‌اواس و اندروید، پیش‌فرض است. .PP سوییچ \fI+fnu\fR می‌تواند با \fIw\fR، \fIi\fR یا \fIe\fR دنبال شود تا نحوه گزارش نام‌های فایل با کدگذاری نادرست را کنترل کند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fIw\fR بدین معناست که هرگاه یک نام فایل با کدگذاری نادرست در فهرست دایرکتوری نادیده گرفته شد، یک هشدار به \fIerror_logger\fR ارسال شود. این حالت پیش‌فرض است. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fIi\fR بدین معناست که چنین نام‌های فایلی به آرامی و بی‌صدا نادیده گرفته شوند. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fIe\fR بدین معناست که هرگاه با نام فایل (یا پوشه) با کدگذاری نادرست مواجه شد، تابع API یک خطا بازگرداند. .RE .PP توجه داشته باشید که اگر پیوند به یک نام فایل نامعتبر اشاره کند، \fIfile:read_link/1\fR همیشه یک خطا بازمی‌گرداند. .PP برای اطلاعات بیشتر درباره نام‌های فایل یونیکد، به بخش Unicode Filenames در راهنمای کاربر STDLIB مراجعه کنید. توجه داشته باشید که این مقدار برای پارامترهای خط فرمان و متغیرهای محیطی نیز اعمال می‌شود (بخش Unicode in Environment and Parameters را در راهنمای کاربر STDLIB ببینید). .RE +fna[{w|i|e}] .RS 2 انتخاب میان \fI+fnl\fR و \fI+fnu\fR بر اساس تنظیمات محلی (locale) فعلی سیستم‌عامل انجام می‌شود. این بدان معناست که اگر ترمینال خود را روی کدگذاری UTF-8 تنظیم کرده باشید، انتظار می‌رود سیستم فایل نیز از همان کدگذاری برای نام‌های فایل استفاده کند. این حالت در تمام سیستم‌عامل‌ها به جز اندروید، مک‌اواس و ویندوز پیش‌فرض است. .PP سوییچ \fI+fna\fR می‌تواند با \fIw\fR، \fIi\fR یا \fIe\fR دنبال شود. این گزینه در صورتی اثرگذار است که تنظیمات محلی سبب انتخاب رفتار \fI+fnu\fR شوند؛ توضیحات مربوط به \fI+fnu\fR در بالا را ببینید. چنانچه تنظیمات محلی سبب انتخاب رفتار \fI+fnl\fR شوند، \fIw\fR، \fIi\fR یا \fIe\fR اثری نخواهند داشت. .PP برای اطلاعات بیشتر درباره نام‌های فایل یونیکد، به بخش Unicode Filenames در راهنمای کاربر STDLIB مراجعه کنید. توجه داشته باشید که این مقدار برای پارامترهای خط فرمان و متغیرهای محیطی نیز اعمال می‌شود (بخش Unicode in Environment and Parameters را در راهنمای کاربر STDLIB ببینید). .RE +hms Size .RS 2 اندازه پیش‌فرض هیپ (heap) فرآیندها را روی اندازه \fISize\fR کلمه (words) تنظیم می‌کند. .RE +hmbs Size .RS 2 اندازه پیش‌فرض هیپ مجازی باینری فرآیندها را روی اندازه \fISize\fR کلمه تنظیم می‌کند. .RE +hmax Size .RS 2 حداکثر اندازه پیش‌فرض هیپ فرآیندها را روی اندازه \fISize\fR کلمه تنظیم می‌کند. مقدار پیش‌فرض \fI0\fR است که به معنای عدم استفاده از حداکثر اندازه هیپ است. برای اطلاعات بیشتر، به \fIprocess_flag(max_heap_size, MaxHeapSize)\fR مراجعه نمایید. .RE +hmaxel true|false .RS 2 تعیین می‌کند که آیا برای فرآیندهایی که به حداکثر اندازه هیپ می‌رسند پیام ثبت خطا ارسال شود یا خیر. پیش‌فرض \fItrue\fR است. برای اطلاعات بیشتر به \fIprocess_flag(max_heap_size, MaxHeapSize)\fR مراجعه فرمایید. .RE +hmaxib true|false .RS 2 تعیین می‌کند که آیا اندازه باینری‌های اشتراکی خارج از هیپ (off-heap) در مجموعِ مقایسه‌شده با حداکثر اندازه هیپ لحاظ شود یا خیر. پیش‌فرض \fIfalse\fR است. برای اطلاعات بیشتر به \fIprocess_flag(max_heap_size, MaxHeapSize)\fR مراجعه کنید. .RE +hmaxk true|false .RS 2 تعیین می‌کند که آیا فرآیندهایی که به حداکثر اندازه هیپ می‌رسند کشته شوند یا خیر. پیش‌فرض \fItrue\fR است. برای اطلاعات بیشتر به \fIprocess_flag(max_heap_size, MaxHeapSize)\fR مراجعه فرمایید. .RE +hpds Size .RS 2 اندازه اولیه دیکشنری فرآیند را برای فرآیندها روی اندازه \fISize\fR تنظیم می‌کند. .RE +hmqd off_heap|on_heap .RS 2 مقدار پیش‌فرض فلگ فرآیندی \fImessage_queue_data\fR را تنظیم می‌کند. پیش‌فرض \fIon_heap\fR است. اگر \fI+hmqd\fR ارسال نشود، \fIon_heap\fR حالت پیش‌فرض خواهد بود. برای اطلاعات بیشتر به \fIprocess_flag(message_queue_data, MQD)\fR مراجعه کنید. .RE +IOp PollSets .RS 2 تعداد مجموعه‌های نظرسنجی ورودی/خروجی (IO pollsets) مورد استفاده هنگام پولینگ برای I/O را مشخص می‌کند. این گزینه فقط در پلتفرم‌هایی استفاده می‌شود که از به‌روزرسانی‌های همزمان یک pollset پشتیبانی می‌کنند، در غیر این صورت تعداد pollsetهای مورد استفاده با تعداد نخ‌های نظرسنجی I/O برابر خواهد بود. پیش‌فرض ۱ است. .RE +IOt PollThreads .RS 2 تعداد نخ‌های نظرسنجی ورودی/خروجی (IO poll threads) مورد استفاده هنگام پولینگ برای I/O را تنظیم می‌کند. حداکثر تعداد مجاز نخ‌های نظرسنجی ۱۰۲۴ است. پیش‌فرض ۱ است. .PP یک راه مناسب برای بررسی نیاز به نخ‌های نظرسنجی بیشتر I/O، استفاده از حسابداری وضعیت خرد (microstate accounting) و بررسی بار کاری نخ نظرسنجی I/O است. در صورت بالا بودن بار، افزودن نخ‌های بیشتر ایده مناسبی خواهد بود. .RE +IOPp PollSetsPercentage .RS 2 مشابه \fI+IOp\fR است، اما بر اساس تعداد نخ‌های نظرسنجی پیکربندی‌شده، از درصد برای تعیین تعداد مجموعه‌های نظرسنجی I/O جهت ایجاد استفاده می‌کند. در صورت استفاده همزمان از \fI+IOPp\fR و \fI+IOp\fR، گزینه \fI+IOPp\fR نادیده گرفته می‌شود. .RE +IOPt PollThreadsPercentage .RS 2 مشابه \fI+IOt\fR است، اما بر اساس تعداد زمان‌بندهای پیکربندی‌شده، از درصد برای تعیین تعداد نخ‌های نظرسنجی I/O جهت ایجاد استفاده می‌کند. در صورت استفاده همزمان از \fI+IOPt\fR و \fI+IOt\fR، گزینه \fI+IOPt\fR نادیده گرفته می‌شود. .RE +IOs true|false .RS 2 بهینه‌سازی نظرسنجی نخ زمان‌بند را فعال یا غیرفعال می‌کند. پیش‌فرض \fItrue\fR است. .PP در صورت فعال بودن، توصیف‌کننده‌های فایلی که مکرراً خوانده می‌شوند ممکن است به یک pollset ویژه مورد استفاده نخ‌های زمان‌بند منتقل شوند. هدف از این کار کاهش تعداد فراخوانی‌های سیستمی و در نتیجه بار CPU است، با این حال در برخی موارد ممکن است تأخیر زمان‌بندی را برای رویدادهای ورودی توصیف‌کننده فایل منفرد افزایش دهد. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fB\fI+JPcover true|false|function|function_counters|line|line_counters\fR\fR .PP پشتیبانی از پوشش کد (coverage) را هنگام اجرا با JIT فعال یا غیرفعال می‌کند. پیش‌فرض false است. function .RS 2 تمامی ماژول‌های بارگذاری‌شده ابزاربندی می‌شوند تا توابع اجراشده پیگیری گردند. اطلاعات مربوط به توابع اجراشده را می‌توان با فراخوانی \fIcode:get_coverage(function, Module)\fR بازیابی کرد. .RE function_counters .RS 2 تمامی ماژول‌های بارگذاری‌شده ابزاربندی می‌شوند تا تعداد دفعات اجرای هر تابع شمارش شود. اطلاعات درباره تعداد دفعات اجرای هر تابع را می‌توان با فراخوانی \fIcode:get_coverage(function, Module)\fR به دست آورد. .RE line .RS 2 هنگامی که ماژول‌های کامپایل‌شده با گزینه \fIline_coverage\fR بارگذاری شوند، ابزاربندی می‌گردند تا خطوط اجراشده پیگیری شوند. اطلاعات مربوط به خطوط اجراشده با فراخوانی \fIcode:get_coverage(line, Module)\fR و اطلاعات توابع اجراشده با فراخوانی \fIcode:get_coverage(function, Module)\fR قابل بازیابی است. .RE line_counters .RS 2 هنگامی که ماژول‌های کامپایل‌شده با گزینه \fIline_coverage\fR بارگذاری شوند، ابزاربندی می‌گردند تا تعداد دفعات اجرای هر خط شمارش شود. اطلاعات مربوط به تعداد دفعات اجرای هر خط با فراخوانی \fIcode:get_coverage(line, Module)\fR و اطلاعات توابع اجراشده با فراخوانی \fIcode:get_coverage(function, Module)\fR قابل بازیابی است (توجه داشته باشید که در این حالت، شمارنده‌های تعداد دفعات اجرای هر تابع \fBنمی‌توانند\fR بازیابی شوند). .RE true .RS 2 مشابه \fIline_counters\fR است. .RE false .RS 2 پوشش کد را غیرفعال می‌کند. .RE .PP از نسخه: OTP 27.0 .RE +JPperf true|false|dump|map|fp|no_fp .RS 2 پشتیبانی از پروفایلر \fIperf\fR را هنگام اجرا با JIT در لینوکس فعال یا غیرفعال می‌کند. پیش‌فرض false است. .PP این گزینه را می‌توان چندین بار برای فعال‌سازی گزینه‌های متعدد ترکیب کرد: dump .RS 2 اطلاعات دقیق خطوط را در اختیار \fIperf\fR قرار می‌دهد تا قابلیت \fIperf annotate\fR کار کند. .RE map .RS 2 یک نگاشت از تمامی کدهای ماژول را به \fIperf\fR ارائه می‌دهد و امکان ترجمه آدرس‌های کد ماشین به موقعیت‌های سورس‌کد ارلنگ را فراهم می‌سازد. این کار همچنین فریم‌پوینترها را برای کد ارلنگ فعال می‌کند تا \fIperf\fR بتواند استک فراخوانی فرآیندهای ارلنگ را پیمایش کند، که هزینه‌ای معادل یک کلمه اضافی برای هر فریم استک به همراه دارد. .RE fp .RS 2 فریم‌پوینترها را مستقل از گزینه \fImap\fR فعال می‌کند. .RE no_fp .RS 2 فریم‌پوینترهای اضافه‌شده توسط گزینه \fImap\fR را غیرفعال می‌کند. .RE true .RS 2 گزینه‌های \fImap\fR و \fIdump\fR را فعال می‌سازد. .RE false .RS 2 تمام گزینه‌های دیگر را غیرفعال می‌کند. .RE .PP برای جزئیات بیشتر درباره نحوه اجرای perf، به بخش پشتیبانی perf در مستندات داخلی BeamAsm مراجعه فرمایید. .RE +JPperfdirectory .RS 2 پوشه مورد استفاده برای ذخیره فایل‌های dump و map ابزار \fIperf\fR را هنگام اجرا با JIT در لینوکس تعیین می‌کند. پیش‌فرض \fI/tmp\fR است. .RE +JMsingle true|false .RS 2 استفاده از حافظه تک‌نگاشت RWX را برای کدهای JIT فعال یا غیرفعال می‌کند. .PP حالت پیش‌فرض این است که کد ماشین تولیدشده توسط JIT در دو ناحیه با صفحات فیزیکی یکسان نگاشت شود که یک ناحیه قابل اجرا اما غیرقابل نوشتن، و دیگری قابل نوشتن اما غیرقابل اجرا باشد. از آنجا که برخی ابزارها مانند شبیه‌ساز حالت کاربر QEMU نمی‌توانند با نگاشت دوگانه کار کنند، این فلگ امکان غیرفعال کردن آن را فراهم می‌آورد. این فلگ به طور خودکار توسط فلگ \fI+JPperf\fR فعال می‌شود. .PP از نسخه: OTP 26.0 .RE +L .RS 2 از بارگذاری اطلاعات مربوط به نام فایل‌های سورس و شماره خطوط جلوگیری به عمل می‌آورد. این کار مقداری در حافظه صرفه‌جویی می‌کند، اما استثناها فاقد اطلاعات نام فایل و شماره خطوط خواهند بود. .RE +MFlag Value .RS 2 فلگ‌های اختصاصی تخصیص‌دهنده حافظه. برای اطلاعات بیشتر، به \fIerts_alloc(3)\fR مراجعه کنید. .RE +pad true|false .RS 2 مقدار بولی مورد استفاده با پارامتر \fI+pad\fR مقدار پیش‌فرض فلگ فرآیندی \fIasync_dist\fR را برای فرآیندهای تازه‌ایجاده‌شده تعیین می‌کند. .PP به طور پیش‌فرض، اگر هیچ گزینه خط فرمانی با \fI+pad\fR ارسال نشود، فلگ \fIasync_dist\fR روی \fIfalse\fR تنظیم خواهد شد. .PP مقدار استفاده‌شده در زمان اجرا را می‌توان با فراخوانی \fIerlang:system_info(async_dist)\fR بررسی کرد. .PP از نسخه: OTP 25.3 .RE +pc Range .RS 2 محدوده نویسه‌هایی را تعیین می‌کند که سیستم در تشخیص تقریبی (هیوریستیک) رشته‌ها، آنها را قابل چاپ در نظر می‌گیرد. این معمولاً بر شل، اشکال‌زدا و توابع \fIio:format\fR (هنگامی که \fI~tp\fR در رشته قالب‌بندی استفاده شود) تأثیر می‌گذارد. .PP دو مقدار برای \fIRange\fR پشتیبانی می‌شود: latin1 .RS 2 حالت پیش‌فرض. تنها نویسه‌ها در محدوده ISO Latin-1 قابل چاپ در نظر گرفته می‌شوند. این بدان معناست که نویسه‌ای با مقدار کدبندی بزرگتر از ۲۵۵ هرگز قابل چاپ در نظر گرفته نمی‌شود و لیست‌های حاوی چنین نویسه‌هایی توسط ابزارها به جای رشته‌های متنی به صورت لیستی از اعداد صحیح نمایش داده می‌شوند. .RE unicode .RS 2 تمام نویسه‌های یونیکد قابل چاپ هنگام تعیین اینکه آیا لیستی از اعداد صحیح باید در قالب نگارشی رشته نمایش داده شود یا خیر، لحاظ می‌شوند. اگر برای مثال فونت شما تمام نویسه‌های یونیکد را پوشش ندهد، این امر می‌تواند نتایج غیرمنتظره‌ای به همراه داشته باشد. .RE .PP همچنین به \fIio:printable_range/0\fR در STDLIB مراجعه کنید. .RE +P Number .RS 2 در صورت ارسال \fINumber\fR به عنوان مقدار، حداکثر تعداد فرآیندهای همزمان موجود را برای این سیستم تنظیم می‌کند. محدوده معتبر برای \fINumber\fR برابر با \fI[1024-134217727]\fR است. .PP \fBنکته: \fRحداکثر مقدار واقعی انتخاب‌شده ممکن است بسیار بزرگتر از \fINumber\fR ارسالی باشد. در حال حاضر سیستم زمان اجرا اغلب (اما نه همیشه) مقداری را انتخاب می‌کند که توانی از ۲ باشد. این مورد ممکن است در آینده تغییر کند. مقدار واقعی انتخاب‌شده را می‌توان با فراخوانی erlang:system_info(process_limit) بررسی کرد. .PP مقدار پیش‌فرض \fI1048576\fR است. .RE +Q Number .RS 2 در صورت ارسال Number به عنوان مقدار، حداکثر تعداد پورت‌های همزمان موجود را برای این سیستم تنظیم می‌کند. محدوده معتبر برای \fINumber\fR برابر با \fI[1024-134217727]\fR است. .PP \fBنکته: \fRحداکثر مقدار واقعی انتخاب‌شده ممکن است بسیار بزرگتر از \fINumber\fR واقعی ارسالی باشد. در حال حاضر سیستم زمان اجرا معمولاً (اما نه همیشه) مقداری را انتخاب می‌کند که توانی از ۲ باشد. این مورد ممکن است در آینده تغییر کند. مقدار واقعی انتخاب‌شده را می‌توان با فراخوانی \fIerlang:system_info(port_limit)\fR بررسی کرد. .PP مقدار پیش‌فرض مورد استفاده معمولاً \fI65536\fR است. با این حال، اگر سیستم زمان اجرا بتواند حداکثر تعداد توصیف‌کننده‌های فایلی را که مجاز به باز کردن آنهاست تشخیص دهد و این مقدار بزرگتر از \fI65536\fR باشد، مقدار انتخابی به مقداری بزرگتر یا مساوی با حداکثر تعداد توصیف‌کننده‌های فایلی که می‌توانند باز شوند افزایش می‌یابد. .PP در ویندوز، مقدار پیش‌فرض روی \fI8196\fR تنظیم شده است، زیرا محدودیت‌های معمول سیستم‌عامل فراتر از توان کاری اکثر ماشین‌ها تنظیم شده است. .RE +r .RS 2 بلوک‌های حافظه ETS را مجبور می‌کند که در هنگام بازتخصیص جابجا شوند. .RE +rg ReaderGroupsLimit .RS 2 تعداد گروه‌های خواننده مورد استفاده توسط قفل‌های خواندن/نوشتنِ بهینه‌شده برای عملیات خواندن در سیستم زمان اجرای ارلنگ را محدود می‌کند. به طور پیش‌فرض محدودیت گروه‌های خواننده ۶۴ است. .PP هنگامی که تعداد زمان‌بندها کمتر یا مساوی محدودیت گروه‌های خواننده باشد، هر زمان‌بند گروه خواننده اختصاصی خود را دارد. هنگامی که تعداد زمان‌بندها بیشتر از محدودیت گروه‌های خواننده باشد، زمان‌بندها گروه‌های خواننده را به اشتراک می‌گذارند. گروه‌های خواننده مشترک کارایی قفل و آزادسازی خواندن را کاهش می‌دهند، در حالی که گروه‌های خواننده پرتعداد کارایی قفل نوشتن را کاهش می‌دهند. بنابراین، این محدودیت مصالحه‌ای بین کارایی عملیات خواندن و کارایی عملیات نوشتن است. هر گروه خواننده ۶۴ بایت در هر قفل خواندن/نوشتن مصرف می‌کند. .PP توجه داشته باشید که یک سیستم زمان اجرا که از گروه‌های خواننده مشترک استفاده می‌کند، از مقید کردن زمان‌بندها به پردازنده‌های منطقی بهره‌مند می‌شود، زیرا گروه‌های خواننده به شکل بهتری میان زمان‌بندها توزیع می‌گردند. .RE +S Schedulers:SchedulerOnline .RS 2 تعداد نخ‌های زمان‌بند برای ایجاد و تعداد نخ‌های زمان‌بند برای آنلاین قرار دادن را تعیین می‌کند. حداکثر برای هر دو مقدار ۱۰۲۴ است. اگر سیستم زمان اجرای ارلنگ قادر به تشخیص تعداد پردازنده‌های منطقی پیکربندی‌شده و پردازنده‌های منطقی موجود باشد، مقدار \fISchedulers\fR به طور پیش‌فرض برابر با پردازنده‌های منطقی پیکربندی‌شده، و \fISchedulersOnline\fR به طور پیش‌فرض برابر با پردازنده‌های منطقی موجود خواهد بود؛ در غیر این صورت مقادیر پیش‌فرض ۱ هستند. اگر شبیه‌ساز تشخیص دهد که تحت سهمیه CPU (CPU quota) قرار دارد، مقدار پیش‌فرض \fISchedulersOnline\fR بر همان اساس محدود خواهد شد. .PP اگر \fI:SchedulerOnline\fR مشخص شده باشد، می‌توان \fISchedulers\fR را حذف کرد و برعکس. تعداد زمان‌بندهای آنلاین را می‌توان در زمان اجرا از طریق \fIerlang:system_flag(schedulers_online, SchedulersOnline)\fR تغییر داد. .PP اگر \fISchedulers\fR یا \fISchedulersOnline\fR به صورت یک عدد منفی مشخص شوند، مقدار مربوطه به ترتیب از تعداد پیش‌فرض پردازنده‌های منطقی پیکربندی‌شده یا پردازنده‌های منطقی موجود کسر می‌شود. .PP مشخص کردن مقدار \fI0\fR برای \fISchedulers\fR یا \fISchedulersOnline\fR به ترتیب تعداد نخ‌های زمان‌بند یا نخ‌های زمان‌بند آنلاین را به مقدار پیش‌فرض بازنشانی می‌کند. .RE +SP SchedulersPercentage:SchedulersOnlinePercentage .RS 2 مشابه \fI+S\fR است، اما از درصد برای تنظیم تعداد نخ‌های زمان‌بند جهت ایجاد بر اساس پردازنده‌های منطقی پیکربندی‌شده، و نخ‌های زمان‌بند برای آنلاین کردن بر اساس پردازنده‌های منطقی موجود استفاده می‌کند. مقادیر مشخص‌شده باید > 0 باشند. به عنوان مثال، \fI+SP 50:25\fR تعداد نخ‌های زمان‌بند را روی ۵۰٪ از پردازنده‌های منطقی پیکربندی‌شده و تعداد نخ‌های زمان‌بند آنلاین را روی ۲۵٪ از پردازنده‌های منطقی موجود تنظیم می‌کند. اگر \fI:SchedulersOnlinePercentage\fR مشخص شده باشد می‌توان \fISchedulersPercentage\fR را حذف کرد و برعکس. تعداد زمان‌بندهای آنلاین را می‌توان در زمان اجرا از طریق \fIerlang:system_flag(schedulers_online, SchedulersOnline)\fR تغییر داد. .PP این گزینه با تنظیمات \fI+S\fR تعامل دارد. به عنوان مثال، روی سیستمی با ۸ هسته منطقی پیکربندی‌شده و ۸ هسته منطقی موجود، ترکیب گزینه‌های \fI+S 4:4 +SP 50:25\fR (به هر ترتیبی) منجر به ۲ نخ زمان‌بند (۵۰٪ از ۴) و ۱ نخ زمان‌بند آنلاین (۲۵٪ از ۴) می‌شود. .RE +SDcpu DirtyCPUSchedulers:DirtyCPUSchedulersOnline .RS 2 تعداد نخ‌های زمان‌بند کثیف CPU برای ایجاد و نخ‌های زمان‌بند کثیف CPU برای آنلاین قرار دادن را تنظیم می‌کند. حداکثر برای هر دو مقدار ۱۰۲۴ است و هر مقدار توسط تنظیمات زمان‌بندهای معمولی بیشتر محدود می‌شود: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP تعداد نخ‌های زمان‌بند کثیف CPU ایجادشده نمی‌تواند از تعداد نخ‌های زمان‌بند معمولی ایجادشده بیشتر باشد. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP تعداد نخ‌های زمان‌بند کثیف CPU آنلاین نمی‌تواند از تعداد نخ‌های زمان‌بند معمولی آنلاین بیشتر باشد. .RE .PP برای جزئیات، به \fI+S\fR و \fI+SP\fR مراجعه کنید. به طور پیش‌فرض، تعداد نخ‌های زمان‌بند کثیف CPU ایجادشده با تعداد نخ‌های زمان‌بند معمولی ایجادشده برابر است، و تعداد نخ‌های زمان‌بند کثیف CPU آنلاین با تعداد نخ‌های زمان‌بند معمولی آنلاین برابر است. اگر \fI:DirtyCPUSchedulersOnline\fR مشخص شده باشد می‌توان \fIDirtyCPUSchedulers\fR را حذف کرد و برعکس. تعداد زمان‌بندهای کثیف CPU آنلاین را می‌توان در زمان اجرا از طریق \fIerlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)\fR تغییر داد. .PP میزان زمان‌بندهای کثیف CPU به میزان زمان‌بندهای معمولی محدود می‌شود تا تأثیر بر فرآیندهای در حال اجرا روی زمان‌بندهای معمولی محدود گردد. اگر مقدار زمان‌بندهای کثیف CPU نامحدود می‌بود، کارهای وابسته به CPU کثیف پتانسیل گرسنگی دادن (starvation) به کارهای معمولی را داشتند. .PP کاربران معمول زمان‌بندهای کثیف CPU عبارتند از عملیات بزرگ جمع‌آوری زباله (garbage collection)، انکودرها/دیکودرهای پروتکل json که به عنوان NIF نوشته شده‌اند و کتابخانه‌های محاسبات ماتریسی. .PP می‌توانید از \fImsacc\fR برای مشاهده بار کاری فعلی نخ‌های زمان‌بندهای کثیف CPU و تنظیم تعداد مورد استفاده متناسب با آن بهره بگیرید. .RE +SDPcpu DirtyCPUSchedulersPercentage:DirtyCPUSchedulersOnlinePercentage .RS 2 مشابه \fI+SDcpu\fR است، اما از درصد برای تعیین تعداد نخ‌های زمان‌بند کثیف CPU جهت ایجاد و تعداد نخ‌های زمان‌بند کثیف CPU برای آنلاین قرار دادن استفاده می‌کند. مقادیر تعیین‌شده باید > 0 باشند. به عنوان مثال، \fI+SDPcpu 50:25\fR تعداد نخ‌های زمان‌بند کثیف CPU را روی ۵۰٪ از پردازنده‌های منطقی پیکربندی‌شده و تعداد نخ‌های زمان‌بند کثیف CPU آنلاین را روی ۲۵٪ از پردازنده‌های منطقی در دسترس تنظیم می‌کند. در صورت وجود \fI:DirtyCPUSchedulersOnlinePercentage\fR، می‌توان \fIDirtyCPUSchedulersPercentage\fR را حذف کرد و برعکس. تعداد زمان‌بندهای کثیف CPU آنلاین را می‌توان در زمان اجرا از طریق \fIerlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)\fR تغییر داد. .PP این گزینه با تنظیمات \fI+SDcpu\fR تعامل دارد. به عنوان مثال، روی سیستمی با ۸ هسته منطقی پیکربندی‌شده و ۸ هسته منطقی در دسترس، ترکیب گزینه‌های \fI+SDcpu 4:4 +SDPcpu 50:25\fR (به هر ترتیبی) منجر به ۲ نخ زمان‌بند کثیف CPU (۵۰٪ از ۴) و ۱ نخ زمان‌بند کثیف CPU آنلاین (۲۵٪ از ۴) می‌شود. .RE +SDio DirtyIOSchedulers .RS 2 تعداد نخ‌های زمان‌بند کثیف I/O برای ایجاد را تنظیم می‌کند. محدوده معتبر ۱ تا ۱۰۲۴ است. به طور پیش‌فرض، تعداد نخ‌های زمان‌بند کثیف I/O ایجادشده برابر با ۱۰ است. .PP تعداد زمان‌بندهای کثیف IO بر خلاف تعداد زمان‌بندهای کثیف CPU توسط تعداد زمان‌بندهای معمولی محدود نمی‌شود؛ چرا که انتظار می‌رود تنها کارهای وابسته به ورودی/خروجی (I/O bound) روی زمان‌بندهای کثیف I/O اجرا شوند. اگر کاربر کارهای وابسته به CPU را روی زمان‌بندهای کثیف I/O زمان‌بندی کند، این کارها ممکن است کارهای عادی در حال اجرا روی زمان‌بندهای معمولی را دچار گرسنگی کنند. .PP کاربران معمول زمان‌بندهای کثیف IO خواندن و نوشتن فایل‌ها هستند. .PP می‌توانید از \fImsacc\fR استفاده کنید تا بار کاری فعلی نخ‌های زمان‌بند کثیف IO را مشاهده کرده و تعداد مورد استفاده را بر همان اساس تنظیم نمایید. .RE +sFlag Value .RS 2 فلگ‌های اختصاصی زمان‌بندی. +sbt BindType .RS 2 نوع مقیدسازی (اتصال) زمان‌بند را تنظیم می‌کند. .PP زمان‌بندها را می‌توان با استفاده از فلگ \fI+stbt\fR نیز مقید کرد. تنها تفاوت میان این دو فلگ نحوه مدیریت خطاهای زیر است: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP مقیدسازی زمان‌بندها در پلتفرم مربوطه پشتیبانی نمی‌شود. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP توپولوژی CPU در دسترس نیست؛ یعنی سیستم زمان اجرا نتوانسته است توپولوژی CPU را به صورت خودکار تشخیص دهد و هیچ توپولوژی CPU تعریف‌شده توسط کاربر نیز تنظیم نشده است. .RE .PP اگر هر یک از این خطاها هنگام ارسال \fI+sbt\fR رخ دهد، سیستم زمان اجرا یک پیام خطا چاپ کرده و از شروع به کار خودداری می‌کند. اگر هر یک از این خطاها هنگام ارسال \fI+stbt\fR رخ دهد، سیستم زمان اجرا بی‌صدا خطا را نادیده گرفته و با استفاده از زمان‌بندهای غیرمقید راه‌اندازی می‌شود. .PP مقادیر معتبر \fIBindType\fR: u .RS 2 \fIunbound\fR - زمان‌بندها به پردازنده‌های منطقی مقید نمی‌شوند؛ یعنی سیستم‌عامل تصمیم می‌گیرد که نخ‌های زمان‌بند در کجا اجرا شوند و چه زمانی مهاجرت کنند. این حالت پیش‌فرض است. .RE ns .RS 2 \fIno_spread\fR - زمان‌بندها با شناسه‌های نزدیک به هم تا حد امکان در سخت‌افزار نزدیک به یکدیگر مقید می‌شوند. .RE ts .RS 2 \fIthread_spread\fR - نخ به نخ‌های سخت‌افزاری اشاره دارد (مانند فناوری Hyper-Threading اینتل). زمان‌بندها با شناسه پایین به نخستین نخ سخت‌افزاری هر هسته مقید می‌شوند، سپس زمان‌بندها با شناسه بالاتر به دومین نخ سخت‌افزاری هر هسته متصل می‌گردند و به همین ترتیب. .RE ps .RS 2 \fIprocessor_spread\fR - زمان‌بندها مانند \fIthread_spread\fR توزیع می‌شوند، اما علاوه بر آن در میان تراشه‌های فیزیکی پردازنده نیز پخش می‌گردند. .RE s .RS 2 \fIspread\fR - زمان‌بندها تا جای ممکن به صورت گسترده توزیع می‌شوند. .RE nnts .RS 2 \fIno_node_thread_spread\fR - مانند \fIthread_spread\fR است، اما در صورت وجود چندین گره NUMA، زمان‌بندها در هر زمان روی یک گره NUMA توزیع می‌شوند؛ یعنی تمام پردازنده‌های منطقی یک گره NUMA به ترتیب به زمان‌بندها مقید می‌شوند. .RE nnps .RS 2 \fIno_node_processor_spread\fR - مانند \fIprocessor_spread\fR است، اما در صورت وجود چندین گره NUMA، زمان‌بندها در هر زمان روی یک گره NUMA پخش می‌شوند. .RE tnnps .RS 2 \fIthread_no_node_processor_spread\fR - ترکیبی از \fIthread_spread\fR و \fIno_node_processor_spread\fR است. زمان‌بندها بر روی نخ‌های سخت‌افزاری در گره‌های NUMA توزیع می‌شوند، اما در داخل هر گره NUMA در یک زمان تنها میان پردازنده‌ها پخش می‌گردند. .RE db .RS 2 \fIdefault_bind\fR - زمان‌بندها را به شیوه پیش‌فرض مقید می‌کند. پیش‌فرض \fIthread_no_node_processor_spread\fR است (که ممکن است در آینده تغییر کند). .RE .PP مقیدسازی زمان‌بندها تنها در سیستم‌های جدیدتر لینوکس، سولاریس، FreeBSD و ویندوز پشتیبانی می‌شود. .PP اگر هنگام پردازش فلگ \fI+sbt\fR هیچ توپولوژی CPU در دسترسی نباشد و \fIBindType\fR هر مقداری غیر از \fIu\fR باشد، راه‌اندازی سیستم زمان اجرا با شکست مواجه می‌شود. توپولوژی CPU می‌تواند با استفاده از فلگ \fI+sct\fR تعریف شود. توجه داشته باشید که در صورت عدم تشخیص خودکار توپولوژی CPU، ممکن است لازم باشد فلگ \fI+sct\fR پیش از فلگ \fI+sbt\fR در خط فرمان قرار گیرد. .PP سیستم زمان اجرا به طور پیش‌فرض زمان‌بندها را به پردازنده‌های منطقی مقید \fIنمی‌کند\fR. .PP \fBنکته: \fRاگر سیستم زمان اجرای ارلنگ تنها فرآیند سیستم‌عامل باشد که نخ‌ها را به پردازنده‌های منطقی مقید می‌کند، این امر کارایی سیستم زمان اجرا را بهبود می‌بخشد. اما اگر سایر فرآیندهای سیستم‌عامل (برای مثال یک سیستم زمان اجرای دیگر ارلنگ) نیز نخ‌ها را به پردازنده‌های منطقی مقید کنند، ممکن است در عوض افت کارایی رخ دهد. این افت کارایی گاهی می‌تواند شدید باشد. در این شرایط، توصیه می‌شود زمان‌بندها را مقید نکنید. .PP نحوه مقید شدن زمان‌بندها اهمیت دارد. برای نمونه، در شرایطی که فرآیندهای در حال اجرا کمتر از زمان‌بندهای آنلاین باشند، سیستم زمان اجرا تلاش می‌کند فرآیندها را به زمان‌بندهایی با شناسه پایین‌تر منتقل کند. هرچه زمان‌بندها بیشتر روی سخت‌افزار پخش شده باشند، منابع بیشتری در چنین شرایطی در دسترس سیستم زمان اجرا خواهد بود. .PP \fBنکته: \fRاگر یک زمان‌بند نتواند مقید شود، این موضوع اغلب بدون سر و صدا نادیده گرفته می‌شود؛ چرا که تأیید شناسه‌های معتبر پردازنده‌های منطقی همواره امکان‌پذیر نیست. در صورت گزارش خطا، این خطا به \fIerror_logger\fR گزارش می‌شود. اگر می‌خواهید اطمینان حاصل کنید که زمان‌بندها طبق درخواست مقید شده‌اند، \fIerlang:system_info(scheduler_bindings)\fR را فراخوانی کنید. .RE +sbwt none|very_short|short|medium|long|very_long .RS 2 آستانه انتظار فعال (busy wait) زمان‌بند را تنظیم می‌کند. پیش‌فرض \fImedium\fR است. این آستانه مشخص می‌کند که زمان‌بندها هنگام اتمام کار، چه مدت پیش از رفتن به حالت خواب باید به انتظار فعال بپردازند. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان و بدون اطلاع قبلی حذف یا تغییر داده شود. .RE +sbwtdcpu none|very_short|short|medium|long|very_long .RS 2 مشابه \fI+sbwt\fR است اما بر زمان‌بندهای کثیف CPU تأثیر می‌گذارد. پیش‌فرض \fIshort\fR است. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان و بدون اطلاع قبلی حذف یا تغییر داده شود. .RE +sbwtdio none|very_short|short|medium|long|very_long .RS 2 مشابه \fI+sbwt\fR است اما بر زمان‌بندهای کثیف IO تأثیر می‌گذارد. پیش‌فرض \fIshort\fR است. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان و بدون اطلاع قبلی حذف یا تغییر داده شود. .RE +scl true|false .RS 2 فشرده‌سازی بار زمان‌بند را فعال یا غیرفعال می‌کند. به طور پیش‌فرض فشرده‌سازی بار فعال است. در صورت فعال بودن، متعادل‌سازی بار به دنبال توزیع باری است که سبب شود تا حد امکان نخ‌های زمان‌بند به طور کامل پرکار باشند (یعنی کارشان تمام نشود). این کار با انتقال بار (مثلاً فرآیندهای قابل اجرا) به مجموعه‌ای کوچکتر از زمان‌بندها در هنگام بیکار شدن مکرر آنها صورت می‌گیرد. در صورت غیرفعال بودن، بسامد بیکار شدن زمان‌بندها توسط منطق متعادل‌سازی بار لحاظ نمی‌شود. .PP گزینه \fI+scl false\fR مشابه \fI+sub true\fR است، اما \fI+sub true\fR همچنین میزان استفاده از زمان‌بندها را بین آنها متعادل می‌کند. .RE +sct CpuTopology .RS 2 یک توپولوژی CPU تعریف‌شده توسط کاربر را تنظیم می‌کند. توپولوژی تعریف‌شده توسط کاربر بر هرگونه توپولوژی CPU شناسایی‌شده خودکار اولویت دارد. توپولوژی CPU هنگام مقید کردن زمان‌بندها به پردازنده‌های منطقی استفاده می‌شود. این گزینه در خط فرمان باید پیش از \fI+sbt\fR قرار گیرد. .IP .nf = integer(); when 0 =< =< 65535 = - = | = , | = L = T | t = C | c = P | p = N | n = | CpuTopology = : | .fi .PP حروف بزرگ بیانگر شناسه‌های واقعی و حروف کوچک بیانگر شناسه‌های فرضی هستند که تنها برای توصیف توپولوژی استفاده می‌شوند. شناسه‌های ارائه‌شده به عنوان شناسه‌های واقعی می‌توانند توسط سیستم زمان اجرا هنگام تلاش برای دسترسی به سخت‌افزار خاص استفاده شوند؛ اگر نادرست باشند رفتار سیستم نامعین خواهد بود. شناسه‌های فرضی پردازنده منطقی پذیرفته نمی‌شوند، زیرا بدون شناسه‌های واقعی پردازنده منطقی، تعریف توپولوژی CPU بی‌معناست. شناسه‌های نخ، هسته، پردازنده و گره می‌توانند حذف شوند. در صورت حذف، شناسه نخ به طور پیش‌فرض \fIt0\fR، شناسه هسته \fIc0\fR، شناسه پردازنده \fIp0\fR و شناسه گره تعریف‌نشده باقی می‌ماند. یا هر پردازنده منطقی باید فقط به یک گره NUMA تعلق داشته باشد، یا هیچ پردازنده منطقی نباید به هیچ گره NUMA تعلق داشته باشد. .PP هر دو بازه افزایشی و کاهشی در \fI\fR مجاز هستند. .PP شناسه‌های گره NUMA در سطح کل سیستم یکتا هستند. شناسه‌های پردازنده نیز در سطح کل سیستم هستند. شناسه‌های هسته در سطح پردازنده و شناسه‌های نخ در سطح هسته تعریف می‌شوند. .PP ترتیب انواع شناسه، سلسله‌مراتب توپولوژی CPU را مشخص می‌کند. ترتیب‌های معتبر به شرح زیر هستند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fI\fR، یعنی نخ بخشی از هسته است، هسته بخشی از پردازنده و پردازنده بخشی از یک گره NUMA است. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fI\fR، یعنی نخ بخشی از هسته است، هسته بخشی از یک گره NUMA و گره NUMA بخشی از پردازنده است. .RE .PP یک توپولوژی CPU می‌تواند شامل هر دو گره NUMA خارجی پردازنده و داخلی پردازنده باشد، مادامی که هر پردازنده منطقی تنها به یک گره NUMA تعلق داشته باشد. اگر \fI\fR حذف شود، موقعیت پیش‌فرض آن پیش از \fI\fR خواهد بود؛ یعنی پیش‌فرض گره‌های NUMA خارجی پردازنده است. .PP اگر لیستی از شناسه‌ها در یک \fI\fR به کار رود: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fI\fR باید لیستی از شناسه‌ها باشد. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP حداقل یک نوع شناسه دیگر علاوه بر \fI\fR نیز باید دارای لیستی از شناسه‌ها باشد. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP تمامی لیست‌های شناسه‌ها باید تعداد یکسانی شناسه تولید کنند. .RE .PP یک مثال ساده. یک پردازنده چهار هسته‌ای تک می‌تواند به شکل زیر توصیف شود: .IP .nf % erl +sct L0-3c0-3 1> erlang:system_info(cpu_topology). [{processor,[{core,{logical,0}}, {core,{logical,1}}, {core,{logical,2}}, {core,{logical,3}}]}] .fi .PP یک مثال پیچیده‌تر با دو پردازنده چهار هسته‌ای، که هر پردازنده در گره NUMA اختصاصی خود قرار دارد. ترتیب پردازنده‌های منطقی کمی نامتعارف است تا مثال بهتری از لیست شناسه‌ها ارائه شود: .IP .nf % erl +sct L0-1,3-2c0-3p0N0:L7,4,6-5c0-3p1N1 1> erlang:system_info(cpu_topology). [{node,[{processor,[{core,{logical,0}}, {core,{logical,1}}, {core,{logical,3}}, {core,{logical,2}}]}]}, {node,[{processor,[{core,{logical,7}}, {core,{logical,4}}, {core,{logical,6}}, {core,{logical,5}}]}]}] .fi .PP تا زمانی که شناسه‌های واقعی صحیح باشند، اشکالی ندارد توپولوژی CPU ارائه‌شده توصیف دقیقی از سخت‌افزار واقعی نباشد. این کار در صورت استفاده دقیق می‌تواند بسیار مفید واقع شود تا شبیه‌ساز فریب خورده و زمان‌بندها را طبق تمایل شما مقید کند. برای نمونه، اگر می‌خواهید چندین سیستم زمان اجرای ارلنگ را روی یک ماشین اجرا کنید، می‌توانید تعداد زمان‌بندها را کاهش داده و توپولوژی CPU را دستکاری کنید تا به CPUهای منطقی متفاوتی مقید شوند. یک مثال با دو سیستم زمان اجرای ارلنگ روی یک ماشین چهار هسته‌ای: .IP .nf % erl +sct L0-3c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname one % erl +sct L3-0c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname two .fi .PP در این مثال، هر سیستم زمان اجرا دارای دو زمان‌بند آنلاین است و تمام زمان‌بندهای آنلاین روی هسته‌های متفاوتی اجرا خواهند شد. اگر این وضعیت را به یک زمان‌بند آنلاین در یک سیستم و سه زمان‌بند آنلاین در سیستم دیگر تغییر دهیم، باز هم تمام زمان‌بندهای آنلاین روی هسته‌های متفاوتی اجرا خواهند شد. .PP توجه داشته باشید که یک توپولوژی فرضی CPU که بیانگر توپولوژی واقعی نباشد، به احتمال زیاد کارایی سیستم زمان اجرا را کاهش می‌دهد. .PP برای اطلاعات بیشتر، به \fIerlang:system_info(cpu_topology)\fR مراجعه نمایید. .RE +ssrct .RS 2 از خواندن توپولوژی CPU صرف‌نظر می‌کند. .PP \fBنکته: \fRخواندن توپولوژی CPU زمان راه‌اندازی را هنگام اجرای نمونه‌های موازی متعدد از ERTS بر روی سیستم‌های دارای تعداد هسته‌های زیاد کُند می‌کند؛ استفاده از این فلگ ممکن است در چنین سناریوهایی سرعت اجرا را افزایش دهد. .RE +sfwi Interval .RS 2 فاصله زمانی بیدارباش اجباری زمان‌بند را تنظیم می‌کند. تمام صف‌های اجرا در هر \fIInterval\fR میلی‌ثانیه اسکن می‌شوند. در صورتی که زمان‌بندهای به خواب‌رفته در سیستم وجود داشته باشند، به ازای هر صف اجرای غیرخالی یافته‌شده یک زمان‌بند بیدار می‌شود. پیش‌فرض \fIInterval\fR برابر با \fI0\fR است، به این معنی که این قابلیت غیرفعال است. .PP \fBنکته: \fRاین قابلیت به عنوان یک راهکار موقت برای کدهای بومی (native code) با اجرای طولانی و کدهای بومی که در OTP کاهش‌ها (reductions) را به درستی افزایش نمی‌دهند ارائه شده است. پس از رفع این اشکالات، این فلگ حذف خواهد شد. .RE +spp Bool .RS 2 راهنمای پیش‌فرض زمان‌بند را برای موازی‌سازی پورت تنظیم می‌کند. اگر روی \fItrue\fR تنظیم شود، ماشین مجازی وظایف پورت را در صورتی که موازی‌سازی در سیستم را بهبود بخشد زمان‌بندی می‌کند. اگر روی \fIfalse\fR تنظیم شود، ماشین مجازی تلاش می‌کند وظایف پورت را بلافاصله انجام دهد و تأخیر را به بهای کاهش موازی‌سازی بهبود بخشد. پیش‌فرض \fIfalse\fR است. مقدار پیش‌فرض استفاده‌شده در زمان اجرا با فراخوانی \fIerlang:system_info(port_parallelism)\fR قابل بررسی است. مقدار پیش‌فرض می‌تواند هنگام ایجاد پورت با ارسال گزینه \fIparallelism\fR به \fIerlang:open_port/2\fR بازنویسی شود. .RE +sss size .RS 2 اندازه پیشنهادی استک، بر حسب کیلوورد، برای نخ‌های زمان‌بند. محدوده معتبر ۲۰ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض استک ۱۲۸ کیلوورد است. .RE +sssdcpu size .RS 2 اندازه پیشنهادی استک، بر حسب کیلوورد، برای نخ‌های زمان‌بند کثیف CPU. محدوده معتبر ۲۰ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض استک ۴۰ کیلوورد است. .RE +sssdio size .RS 2 اندازه پیشنهادی استک، بر حسب کیلوورد، برای نخ‌های زمان‌بند کثیف IO. محدوده معتبر ۲۰ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض استک ۴۰ کیلوورد است. .RE +stbt BindType .RS 2 تلاش می‌کند نوع مقیدسازی زمان‌بند را تنظیم کند. مشابه فلگ \fI+sbt\fR است، به جز در نحوه مدیریت برخی خطاها. برای اطلاعات بیشتر، به \fI+sbt\fR مراجعه کنید. .RE +sub true|false .RS 2 متعادل‌سازی بهره‌وری بار زمان‌بند را فعال یا غیرفعال می‌کند. به طور پیش‌فرض متعادل‌سازی بهره‌وری بار زمان‌بند غیرفعال است و به جای آن فشرده‌سازی بار زمان‌بند فعال است که به دنبال توزیع باری است تا بیشترین تعداد ممکن از نخ‌های زمان‌بند کاملاً پرکار باشند (یعنی کارشان تمام نشود). هنگامی که متعادل‌سازی بهره‌وری بار زمان‌بند فعال باشد، سیستم در عوض تلاش می‌کند بهره‌وری زمان‌بندها را بین آنها متعادل سازد؛ یعنی برای دستیابی به بهره‌وری برابر در تمام زمان‌بندها تلاش می‌کند. .PP گزینه \fI+sub true\fR تنها در سیستم‌هایی پشتیبانی می‌شود که سیستم زمان اجرا یک ساعت با وضوح بالا و یکنواخت افزایشی را شناسایی کرده و مورد استفاده قرار دهد. در سایر سیستم‌ها، راه‌اندازی سیستم زمان اجرا با شکست مواجه می‌شود. .PP گزینه \fI+sub true\fR مستلزم \fI+scl false\fR است. تفاوت بین \fI+sub true\fR و \fI+scl false\fR این است که \fI+scl false\fR تلاشی برای متعادل کردن بهره‌وری زمان‌بندها نمی‌کند. .RE +swct very_eager|eager|medium|lazy|very_lazy .RS 2 آستانه پاک‌سازی بیدارباش زمان‌بند را تنظیم می‌کند. پیش‌فرض \fImedium\fR است. کنترل می‌کند که زمان‌بندها تا چه حد مشتاق هستند به دلیل برخی عملیات پاک‌سازی درخواست بیدارباش دهند. هنگامی که یک تنظیم تنبل (lazy) استفاده شود، عملیات پاک‌سازی معوقه بیشتری می‌توانند در زمان بیکاری زمان‌بند انجام‌نشده باقی بمانند. هنگامی که تنظیم مشتاق (eager) استفاده شود، زمان‌بندها با بسامد بیشتری بیدار می‌شوند که پتانسیل افزایش بهره‌وری CPU را دارد. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد. .RE +sws default|legacy .RS 2 راهبرد بیدارباش زمان‌بند را تنظیم می‌کند. راهبرد پیش‌فرض در ERTS 5.10 (Erlang/OTP R16A) تغییر کرد. این راهبرد در Erlang/OTP R15 با عنوان \fIproposal\fR شناخته می‌شد. راهبرد \fIlegacy\fR از نسخه R13 تا نسخه R15 به عنوان پیش‌فرض استفاده می‌شد. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد. .RE +swt very_low|low|medium|high|very_high .RS 2 آستانه بیدارباش زمان‌بند را تنظیم می‌کند. پیش‌فرض \fImedium\fR است. این آستانه تعیین می‌کند که در صورت وجود کاری بیش از ظرفیت رسیدگی زمان‌بندهای بیدار فعلی، چه زمانی باید زمان‌بندهای به خواب‌رفته بیدار شوند. آستانه پایین سبب بیدارباش‌های زودهنگام‌تر شده و آستانه بالا سبب بیدارباش‌های دیرتر می‌شود. بیدارباش‌های زودهنگام کار را سریع‌تر بین چندین زمان‌بند توزیع می‌کنند، اما کارها راحت‌تر بین زمان‌بندها جهش پیدا می‌کنند. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد. .RE +swtdcpu very_low|low|medium|high|very_high .RS 2 مشابه \fI+swt\fR است اما بر زمان‌بندهای کثیف CPU تأثیر می‌گذارد. پیش‌فرض \fImedium\fR است. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد. .RE +swtdio very_low|low|medium|high|very_high .RS 2 مشابه \fI+swt\fR است اما بر زمان‌بندهای کثیف IO تأثیر می‌گذارد. پیش‌فرض \fImedium\fR است. .PP \fBنکته: \fRاین فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد. .RE .RE +t size .RS 2 حداکثر تعداد اتم‌هایی را که ماشین مجازی می‌تواند مدیریت کند تنظیم می‌کند. پیش‌فرض ۱,۰۴۸,۵۷۶ است. .RE +T Level .RS 2 زمان‌بندی تغییریافته (modified timing) را فعال کرده و سطح زمان‌بندی تغییریافته را تعیین می‌کند. محدوده معتبر ۰ تا ۹ است. زمان‌بندی سیستم زمان اجرا تغییر می‌کند. سطح بالا معمولاً به معنای تغییر بزرگتری نسبت به سطح پایین است. تغییر زمان‌بندی می‌تواند برای یافتن اشکالات وابسته به زمان بسیار مفید باشد. .PP زمان‌بندی تغییریافته بر موارد زیر تأثیر می‌گذارد: تولید فرآیند (Process spawning) .RS 2 فرآیندی که \fIspawn\fR، \fIspawn_link\fR، \fIspawn_monitor\fR یا \fIspawn_opt\fR را فراخوانی می‌کند، بلافاصله پس از تکمیل فراخوانی از زمان‌بندی خارج می‌شود. هنگام استفاده از سطوح بالاتر زمان‌بندی تغییریافته، فراخواننده همچنین پس از خروج از زمان‌بندی برای مدتی به خواب می‌رود. .RE کاهش‌های زمینه (Context reductions) .RS 2 تعداد کاهش‌هایی (reductions) که یک فرآیند مجاز است پیش از خروج از زمان‌بندی مصرف کند، افزایش یا کاهش می‌یابد. .RE کاهش‌های ورودی (Input reductions) .RS 2 تعداد کاهش‌های انجام‌شده پیش از بررسی I/O افزایش یا کاهش می‌یابد. .RE .PP \fBنکته: \fRهنگام فعال بودن زمان‌بندی تغییریافته، کارایی سیستم کاهش می‌یابد. این فلگ \fIصرفاً\fR برای آزمایش و اشکال‌زدایی در نظر گرفته شده است. پیام‌های ردیابی \fIreturn_to\fR و \fIreturn_from\fR هنگام ردیابی روی BIFهای spawn از دست می‌روند. این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد. .RE +v .RS 2 ثبت وقایع با جزئیات کامل (Verbose logging). تنها در صورتی کار می‌کند که ارلنگ با فعال بودن اشکال‌زدایی کامپایل شده باشد. می‌تواند به صورت اختیاری یک نویسه اضافی برای مشخص کردن انواع پیام‌های اشکال‌زدایی ثبت‌شده دریافت کند: +vs .RS 2 \fIDEBUG_SYSTEM\fR، مشابه \fI+v\fR .RE +vg .RS 2 \fIDEBUG_PRIVATE_GC\fR .RE +vM .RS 2 \fIDEBUG_MEMORY\fR .RE +va .RS 2 \fIDEBUG_ALLOCATION\fR .RE +vt .RS 2 \fIDEBUG_THREADS\fR .RE +vp .RS 2 \fIDEBUG_PROCESSES\fR .RE +vm .RS 2 \fIDEBUG_MESSAGES\fR .RE +vc .RS 2 \fIDEBUG_SHCOPY\fR .RE .PP این یک قابلیت اشکال‌زدایی erts است و در هر زمان می‌تواند بدون اطلاع قبلی تغییر کند. .RE +V .RS 2 باعث می‌شود شبیه‌ساز شماره نسخه خود را چاپ کند. .RE +W w | i | e .RS 2 نگاشت پیام‌های هشدار را برای \fIerror_logger\fR تنظیم می‌کند. پیام‌های فرستاده‌شده به ثبت‌کننده خطا با استفاده از یکی از توابع هشدار می‌توانند به خطاها (\fI+W e\fR)، هشدارها (\fI+W w\fR) یا گزارش‌های اطلاعاتی (\fI+W i\fR) نگاشت شوند. پیش‌فرض هشدارها است. نگاشت فعلی را می‌توان با استفاده از \fIerror_logger:warning_map/0\fR به دست آورد. برای اطلاعات بیشتر، به \fIerror_logger:warning_map/0\fR در Kernel مراجعه نمایید. .RE +zFlag Value .RS 2 فلگ‌های متفرقه: +zdbbl size .RS 2 حد اشغال بافر توزیع ( \fIdist_buf_busy_limit\fR) را بر حسب کیلوبایت تنظیم می‌کند. محدوده معتبر ۱ تا ۲۰۹۷۱۵۱ است. پیش‌فرض ۱۰۲۴ است. .PP یک حد بافر بزرگتر به فرآیندها اجازه می‌دهد پیام‌های خروجی بیشتری را روی شبکه توزیع بافر کنند. هنگامی که به حد بافر برسد، فرآیندهای ارسال‌کننده تا زمانی که اندازه بافر کوچک‌تر شود معلق می‌شوند. حد بافر به ازای هر کانال توزیع اعمال می‌شود. یک حد بالاتر تأخیر کمتر و توان عملیاتی بالاتری را به بهای مصرف حافظه بیشتر فراهم می‌سازد. .PP این محدودیت تنها بر فرآیندهایی تأثیر می‌گذارد که سیگنال‌دهی توزیع‌شده کاملاً ناهمگام (\fIfully asynchronous distributed signaling\fR) را غیرفعال کرده‌اند. .RE +zdntgc time .RS 2 زمان تأخیراندازی جمع‌آوری زباله جدول گره‌ها ( \fIdelayed_node_table_gc\fR) را بر حسب ثانیه تنظیم می‌کند. مقادیر معتبر یا \fIinfinity\fR هستند یا یک عدد صحیح در محدوده ۰ تا ۱۰۰۰۰۰۰۰۰. پیش‌فرض ۶۰ است. .PP مدخل‌های جدول گره که به آنها ارجاع داده نمی‌شود حداقل به اندازه مدت زمانی که این پارامتر تعیین می‌کند در جدول باقی می‌مانند. این ماندگاری از وقوع حذف‌ها و درج‌های مکرر در جدول‌ها جلوگیری می‌کند. .RE +zosrl limit .RS 2 محدودیتی بر روی تعداد درخواست‌های معوقه ایجادشده توسط یک فرآیند سیستمی که تغییرات کل سیستم را سازماندهی می‌کند، تنظیم می‌نماید. محدوده معتبر این حد \fI[1, 134217727]\fR است. برای اطلاعات بیشتر به \fIerlang:system_flag(outstanding_system_requests_limit, Limit)\fR مراجعه نمایید. .RE +zhft limit .RS 2 محدودیتی برای مدت زمانی که سیستم زمان اجرا مجاز است هنگام متوقف شدن عملیات تخلیه بافر (flush) را انجام دهد، تنظیم می‌کند. مقادیر معتبر \fI\fR اعداد صحیح در محدوده \fI0..2147483647\fR یا کلمه \fIinfinity\fR هستند. \fI\fR بر حسب میلی‌ثانیه است و به طور پیش‌فرض \fIinfinity\fR می‌باشد. .PP اگر تخلیه بافر در طول عملیات توقف به مدت \fI\fR میلی‌ثانیه ادامه داشته باشد، تخلیه قطع شده و سیستم زمان اجرا بلافاصله با کد خروج \fI255\fR خاتمه می‌یابد. در صورت توقف بدون تخلیه بافر، مقدار \fI\fR هیچ اثری بر سیستم نخواهد داشت. .PP مقدار تعیین‌شده توسط این فلگ را می‌توان در کد ارلنگ با فراخوانی \fIerlang:system_info(halt_flush_timeout)\fR خواند. .PP همچنین به گزینه \fIflush_timeout\fR از BIF مربوط به \fIerlang:halt/2\fR مراجعه کنید. توجه داشته باشید که کوتاه‌ترین زمان انقضا میان این آرگومان خط فرمان و گزینه \fIflush_timeout\fR، مقدار انقضای واقعی و نافذ خواهد بود. .PP از نسخه: OTP 27.0 .RE .RE .SS "متغیرهای محیطی (Environment Variables)" ERL_CRASH_DUMP .RS 2 اگر شبیه‌ساز نیاز به نوشتن گزارش خرابی (crash dump) داشته باشد، مقدار این متغیر نام فایل گزارش خرابی خواهد بود. اگر متغیر تنظیم نشده باشد، نام فایل گزارش خرابی برابر با \fIerl_crash.dump\fR در دایرکتوری جاری خواهد بود. .RE ERL_CRASH_DUMP_NICE .RS 2 \fIسیستم‌های یونیکس\fR: اگر شبیه‌ساز نیاز به نوشتن گزارش خرابی داشته باشد، از مقدار این متغیر برای تنظیم مقدار nice فرآیند استفاده می‌کند و در نتیجه اولویت آن را کاهش می‌دهد. محدوده معتبر ۱ تا ۳۹ است (مقادیر بالاتر با ۳۹ جایگزین می‌شوند). بالاترین مقدار، ۳۹، کمترین اولویت را به فرآیند اختصاص می‌دهد. .RE ERL_CRASH_DUMP_SECONDS .RS 2 \fIسیستم‌های یونیکس\fR: این متغیر تعداد ثانیه‌هایی را مشخص می‌کند که شبیه‌ساز مجاز است صرف نوشتن گزارش خرابی کند. هنگامی که تعداد ثانیه‌های مشخص‌شده سپری شد، شبیه‌ساز خاتمه می‌یابد. ERL_CRASH_DUMP_SECONDS=0 .RS 2 اگر این متغیر روی \fI0\fR ثانیه تنظیم شود، سیستم زمان اجرا حتی تلاشی برای نوشتن فایل گزارش خرابی انجام نمی‌دهد و تنها خاتمه می‌یابد. اگر گزینه \fI-heart\fR به \fIerl\fR داده شده باشد و \fIERL_CRASH_DUMP_SECONDS\fR تنظیم نشده باشد، این حالت پیش‌فرض است. .RE ERL_CRASH_DUMP_SECONDS=S .RS 2 اگر این متغیر روی یک مقدار مثبت \fIS\fR تنظیم شود، به مدت \fIS\fR ثانیه برای تکمیل فایل گزارش خرابی منتظر می‌ماند و سپس سیستم زمان اجرا را با یک سیگنال \fISIGALRM\fR خاتمه می‌دهد. .RE ERL_CRASH_DUMP_SECONDS=-1 .RS 2 یک مقدار منفی باعث می‌شود خاتمه سیستم زمان اجرا به طور نامحدود تا زمانی که فایل گزارش خرابی به طور کامل نوشته شود منتظر بماند. اگر گزینه \fI-heart\fR به \fIerl\fR ارسال \fIنشده\fR باشد و \fIERL_CRASH_DUMP_SECONDS\fR تنظیم نشده باشد، این حالت پیش‌فرض است. .RE .PP همچنین به \fIheart\fR مراجعه کنید. .RE ERL_CRASH_DUMP_BYTES .RS 2 این متغیر حداکثر اندازه یک فایل گزارش خرابی را بر حسب بایت تنظیم می‌کند. در صورت فراتر رفتن از این حد، گزارش خرابی کوتاه (truncate) خواهد شد. اگر این متغیر تنظیم نشود، به طور پیش‌فرض هیچ محدودیت اندازه‌ای اعمال نمی‌شود. اگر متغیر روی \fI0\fR تنظیم شود، سیستم زمان اجرا حتی تلاشی برای نوشتن فایل گزارش خرابی انجام نمی‌دهد. .PP معرفی‌شده در ERTS 8.1.2 (Erlang/OTP 19.2). .RE ERL_CRASH_DUMP_PUBLIC_KEY .RS 2 اگر شبیه‌ساز طوری ساخته شده باشد که گزارش‌های خرابی رمزگذاری‌شده تولید کند، این متغیر \fBباید\fR روی فایلی حاوی کلید عمومی مورد استفاده برای رمزگذاری (در قالب x509، که معمولاً با نام فایل‌های ".pem" شناخته می‌شوند) تنظیم شود. .PP هنگامی که شبیه‌ساز برای تولید گزارش‌های خرابی رمزگذاری‌شده ساخته شده باشد، در صورتی که این مورد به درستی پیکربندی نشده باشد از راه‌اندازی خودداری می‌کند، زیرا هنگام خرابی شبیه‌ساز برای رسیدگی به هرگونه مشکل احتمالی بسیار دیر خواهد بود. .PP تحت این طرح رمزگذاری، شبیه‌ساز تنها نحوه \fIرمزگذاری\fR گزارش خرابی را می‌داند. برای رمزگشایی گزارش خرابی، باید ماژول \fIcrashdump\fR همراه با \fIکلید خصوصی\fR استفاده شود، و باید دقت شود که \fIکلید خصوصی\fR روی سیستم هدف ذخیره نگردد. .PP انواع کلیدهای پشتیبانی‌شده شامل RSA با ۲۰۴۸ بیت یا بالاتر، و همچنین ML-KEM در صورت پشتیبانی در OpenSSL نصب‌شده شما هستند. .PP معرفی‌شده در ERTS 16.3 (Erlang/OTP 29). .RE ERL_AFLAGS .RS 2 محتوای این متغیر به ابتدای خط فرمان برای \fIerl\fR اضافه می‌شود. .PP با فلگ \fI-extra\fR به شیوه خاصی رفتار می‌شود. دامنه آن در پایان محتوای متغیر محیطی خاتمه می‌یابد. آرگومان‌های پس از فلگ \fI-extra\fR در خط فرمان به بخش \fI-extra\fR، یعنی انتهای خط فرمان پس از فلگ \fI-extra\fR منتقل می‌شوند. .RE ERL_ZFLAGS and ERL_FLAGS .RS 2 محتوای این متغیرها به انتهای خط فرمان برای \fIerl\fR افزوده می‌شود. .PP با فلگ \fI-extra\fR به شیوه خاصی رفتار می‌شود. دامنه آن در انتهای محتوای متغیر محیطی خاتمه می‌یابد. آرگومان‌های پس از یک فلگ \fI-extra\fR در خط فرمان به بخش \fI-extra\fR، یعنی انتهای خط فرمان پس از فلگ \fI-extra\fR منتقل می‌شوند. .RE ERL_LIBS .RS 2 شامل فهرستی از پوشه‌های کتابخانه اضافی است که سرور کد برای یافتن برنامه‌ها در آنها جستجو کرده و به مسیر کد می‌افزاید؛ به \fIcode\fR مراجعه کنید. .RE ERL_EPMD_ADDRESS .RS 2 می‌تواند روی فهرستی از آدرس‌های IP جداشده با ویرگول تنظیم شود، که در این صورت دیمن \fIepmd\fR تنها به آدرس(های) مشخص‌شده و آدرس لوپ‌بک (که در صورت عدم تصریح، به طور ضمنی به لیست اضافه می‌شود) گوش می‌دهد. .RE ERL_EPMD_PORT .RS 2 می‌تواند شامل شماره پورت مورد استفاده هنگام برقراری ارتباط با \fIepmd\fR باشد. پورت پیش‌فرض در بیشتر موارد مناسب است. می‌توان پورت متفاوتی را مشخص کرد تا به گره‌های کلاسترهای مستقل امکان همزیستی روی همان میزبان داده شود. تمام گره‌ها در یک کلاستر باید از شماره پورت \fIepmd\fR یکسانی استفاده کنند. .RE .SS "سیگنال‌ها (Signals)" .PP در سیستم‌های یونیکس، سیستم زمان اجرای ارلنگ دو نوع سیگنال را تفسیر می‌کند. SIGUSR1 .RS 2 یک سیگنال \fISIGUSR1\fR تولید یک گزارش خرابی را اجباری می‌کند. .RE SIGTERM .RS 2 یک سیگنال \fISIGTERM\fR یک پیام \fIstop\fR به فرآیند \fIinit\fR ارسال می‌کند. این معادل با فراخوانی \fIinit:stop/0\fR است. .PP معرفی‌شده در ERTS 8.3 (Erlang/OTP 19.3) .RE .PP سیگنال \fISIGUSR2\fR برای مصارف داخلی رزرو شده است. هیچ سیگنال دیگری رسیدگی نمی‌شود. .SS "پیکربندی (Configuration)" .PP سیستم استاندارد Erlang/OTP می‌تواند برای تغییر رفتار پیش‌فرض هنگام راه‌اندازی دوباره پیکربندی شود. فایل راه‌اندازی \&.erlang .RS 2 هنگامی که Erlang/OTP راه‌اندازی می‌شود، سیستم به دنبال فایلی به نام \fI.erlang\fR در پوشه خانگی کاربر و سپس \fIfilename:basedir(user_config, "erlang")\fR می‌گردد. .PP اگر یک فایل \fI.erlang\fR یافت شود، فرض بر این است که حاوی عبارات معتبر ارلنگ است. این عبارات طوری ارزیابی می‌شوند که گویی به عنوان ورودی به شل داده شده‌اند. .PP یک فایل معمولی \fI.erlang\fR شامل مجموعه‌ای از مسیرهای جستجو است، برای مثال: .IP .nf io:format("executing user profile in $HOME/.erlang\\n",[]). code:add_path("/home/calvin/test/ebin"). code:add_path("/home/hobbes/bigappl-1.2/ebin"). io:format(".erlang rc finished\\n",[]). .fi .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\}.PP \fBuser_default\fR و \fBshell_default\fR - توابعی در شل که نام ماژول به عنوان پیشوند آنها نیامده است، به عنوان اشیاء تابعی (funs)، توابع درونی (BIFs)، یا متعلق به ماژول \fIuser_default\fR یا \fIshell_default\fR فرض می‌شوند. .PP برای گنجاندن دستورات شل خصوصی، آنها را در یک ماژول \fIuser_default\fR تعریف کرده و آرگومان زیر را به عنوان خط اول در فایل \fI.erlang\fR بیفزایید: .IP .nf code:load_abs("..../user_default"). .fi .RE erl .RS 2 اگر محتوای \fI.erlang\fR تغییر یابد و یک نسخه خصوصی از \fIuser_default\fR تعریف شود، محیط Erlang/OTP می‌تواند سفارشی‌سازی شود. تغییرات قدرتمندتری را می‌توان با ارائه آرگومان‌های خط فرمان در اسکریپت راه‌اندازی \fIerl\fR انجام داد. برای اطلاعات بیشتر، به \fIinit\fR مراجعه کنید. .RE .SS "همچنین ببینید (See Also)" .PP \fIepmd(1)\fR, \fIerl_prim_loader\fR, \fIerts_alloc(3)\fR, \fIinit\fR, \fIapplication\fR, \fIauth\fR, \fIcode\fR, \fIerl_boot_server\fR, \fIheart\fR, \fInet_kernel\fR, \fImake\fR