Developers
Developers
خواندن ۴ دقیقه·۴ سال پیش

فعال کردن کامپایلر JIT در PHP 8 (آموزش اول)

نسخه 8 PHP
نسخه 8 PHP

برای علاقه مندان به JIT در PHP 8 ، من در سناریوی برنامه وب در دنیای واقعی معیارهایی را برای شما انجام دادم. آگاه باشید که این معیارها درباره JIT مفید یا نیستند ، چیزی نمی گویند ، آنها فقط نشان می دهند که آیا می تواند عملکرد برنامه وب متوسط شما را بهبود بخشد یا خیر.


Setup

این معیارها روی دستگاه محلی من اجرا شده اند. به همین ترتیب ، آنها چیزی در مورد دستاوردهای عملکرد مطلق نمی گویند ، ما فقط می توانیم نتیجه بگیریم که چه تأثیر نسبی JIT روی کد ما دارد.


من PHP FPM را اجرا می کنم ، پیکربندی شده برای ایجاد 20 فرآیند کودک است ، و من همیشه اطمینان حاصل می کنم که فقط 20 درخواست همزمان را همزمان انجام دهم ، فقط برای از بین بردن هرگونه عملکرد اضافی در سطح FPM. ارسال این درخواست ها با استفاده از دستور زیر با ApacheBench انجام می شود:

ab -n 100 -c 20 -l http://aggregate.stitcher.io.test:8081/discover

JIT Setup

راه اندازی JIT به تنهایی به یک بخش نیاز دارد. صادقانه بگویم ، این یکی از گیج کننده ترین روش ها برای پیکربندی یک پسوند PHP است که من تا به حال دیده ام ، و من می ترسم که نحو در اینجا برای ماندن باشد


بنابراین در اینجا می رود:


کامپایلر JIT با مشخص کردن opcache.jit_buffer_size در php.ini فعال می شود. اگر این دستور حذف شود، مقدار پیش‌فرض بر روی ۰ تنظیم می‌شود، و JIT می‌تواند اجرا شود.


بعد ، چندین گزینه کنترل JIT وجود دارد ، همه آنها در یک دستورالعمل واحد موسوم به opcache.jit ذخیره می شوند و می توانند به عنوان مثال مانند این باشند:

opcache.jit_buffer_size=100M opcache.jit=1235

درواقع RFC معنی هر شماره را ذکر می کند. توجه داشته باشید: این ماسک کمی نیست، هر عدد به سادگی یک گزینه پیکربندی دیگر را نشان می‌دهد. RFC گزینه‌های زیر را لیست می‌کند:

O — سطح بهینه سازی

0 کامپایلر JIT نکن
1 حداقل JIT (با دستگیرندگان استاندارد VM تماس بگیرید)
2 ورودی کاربری انتخابی VM
3 بهینه سازی JIT بر اساس استنباط نوع استاتیک از عملکرد فردی
4 بهینه سازی JIT بر اساس استنتاج نوع استاتیک و درخت تماس
5 کامپایلر JIT بر پایه inference از نوع استاتیک و تحلیل‌های فرآیند داخلی انجام شد

T — JIT ماشه

0 همه ی توابع JIT اول اسکریپت بارگیری شوند
1 توابع JIT اول اجرا شوند
2 نمایه در صورت درخواست اول و در صورت درخواست دوم توابع داغ را کامپایل کنید
3 پروفایل در پرواز و توابع داغ را کامپایل کنید
4 کامپایل توابع با برچسب jit@ در توضیحات doc

R — تخصیص ثبت نام

0 تخصیص ثبت را انجام ندهید
1 ستفاده از تخصیص دهنده scan محلی 2 از تخصیص دهنده ثبت جهانی اسکن خطی استفاده کنید

C — پرچم های بهینه سازی خاص CPU

0 هیچ یک
1 فعال کردن تولید دستورالعمل AVX

یک gotcha کوچک: RFC این گزینه ها را به ترتیب معکوس ذکر می کند ، بنابراین رقم اول مقدار C را نشان می دهد ، دوم R و غیره.

به هر حال ، RFC 1235 را به عنوان بهترین پیش فرض پیشنهاد می کند ، حداکثر جابجایی ، مشخصات در پرواز را انجام می دهد ، از یک توزیع کننده ثبت جهانی اسکن بوش - هر آنچه ممکن است باشد - استفاده می کند و نسل دستورالعمل AVX را قادر می سازد.

قسمت دوم این آموزش

منبع:
https://stitcher.io/blog/jit-in-real-life-web-applications

برنامه نویسیطراحی سایتphpjitکامپایلر
دانشمندان چیزی را که قبلا وجود داشته کشف میکنند اما برنامه نویسان چیزی که قبلا وجود نداشته را خلق میکنند.
شاید از این پست‌ها خوشتان بیاید