23.04.2023 6 min read

تحكّم في موارد WSL لتطوير سلس

بواسطة Dženan Džafić

تعلّم كيفية ضبط موارد WSL باستخدام ملف .wslconfig لمنع استهلاك ذاكرة Windows بشكل مفرط أثناء التطوير.

RAM usage of WSL when running two simple containers and Docker Desktop

عندما تم تقديم WSL (Windows Subsystem for Linux) لأول مرة، كنت متحمسًا جدًا لاستخدامه، لأنه شكّل قفزة كبيرة إلى الأمام في بناء تجربة مطوّري Windows، ومع وصول النسخة الثانية منه إلى الأجهزة، قدّم تحسينات كبيرة في الأداء، وأصبح من المنطقي نقل بعض تطويري إلى Windows.

المشكلة

في عصر الحوسبة السحابية والحاويات والتنسيق، يمكن للموارد المتاحة على جهاز الشخص أن تعطّل تجربة التطوير، ومع WSL تكون الموارد افتراضيًا غير محدودة، ما يعني أن WSL يمكنه أخذ كل معالجك وذاكرتك مع Windows.

أثناء تشغيل Docker Desktop وحاويتين لا تفعلان شيئًا حرفيًا، إحداهما نسخة postgres والأخرى تطبيق fastapi بسيط يعيد Hello World، أحصل على أكثر من 5 جيجابايت من استخدام الذاكرة، وسّع ذلك إلى شيء يحتوي منطق أعمال وحاويات أكثر، ولن تتمكن من فتح Chrome.

استخدام الذاكرة لـ WSL عند تشغيل حاويتين بسيطتين وDocker Desktop

الحل

الحل لهذه المشكلة هو إنشاء ملف .wslconfig. حيث سنحدد كمية الموارد التي يمكن لـ WSL استخدامها.

سيتضمن الحل ضبط استخدام الذاكرة، والسعة القصوى التي يمكنه استخدامها، وأنوية المعالج، وذاكرة SWAP، وسنتناول كل هذا بالتفصيل ولماذا قد تسمح أو لا تسمح لـ WSL بأخذ هذه الموارد.

ضبط الموارد

لضبط الموارد نحتاج لتحديد موقع ملف .wslconfig. الذي سيكون داخل %USERPROFILE%. أسهل طريقة لتحديد موقع ذلك المجلد هي فتح Run وكتابة %USERPROFILE%.

Getting the %USERPROFILE% folder through Run

الوصول إلى مجلد %USERPROFILE% عبر Run

بمجرد الوصول إلى هناك، تحقق مما إذا كان ملف .wslconfig موجودًا؛ إذا لم يكن كذلك - أنشئه ويجب أن يبدو مثل الملف في الصورة أدناه:

.wslconfig file inside %USERPROFILE% folder

ملف .wslconfig داخل مجلد %USERPROFILE%

التحذير هنا عند ضبط الموارد هو أنك تحتاج لأن تضع في اعتبارك أنك تشغّل نظامين بالتوازي، وأن كلًا منهما يحتاج موارد، وأن كليهما سيشهد ذروات في الحمل - حسب الاستخدام.

على سبيل المثال: أستخدم WSL للتطوير، حيث أحتاج لاستخدام Docker الذي يستهلك الذاكرة والمعالج بكثافة؛ وWindows لتصفح الويب والترفيه وكتابة المقالات ولعب ألعاب الفيديو.

ينطبق هذا الإعداد على WSL2، لذا تأكد من أن لديك هذه النسخة، لأنها أقوى من WSL1.

الآن إذا لم يكن الملف موجودًا، أضف السطر التالي أعلى الملف:

[wsl2]

موارد المعالج

لضبط عدد أنوية المعالج التي سيستخدمها WSL، يمكنك إضافة المتغيّر:

processors=6

هذا يخبر WSL أن لديه 6 أنوية مخصَّصة للعمل. بناءً على معالجك وأحمال العمل لديك يمكنك تخصيص أكثر أو أقل. ضع في اعتبارك أن WSL لن يتجاوز الحد المحدد هنا، لذا بمجرد أن يقترب من نقطة معينة يمكنك تعديل الموارد مرة أخرى.

موارد الذاكرة

لضبط كمية الذاكرة التي تخصصها لـ WSL، أضف السطر التالي:

memory=8GB

سيخبر هذا WSL بعدم تجاوز 8 جيجابايت من الذاكرة. عند ضبط الذاكرة، تحتاج لتضع في اعتبارك أن الذاكرة يمكن استهلاكها بسرعة كبيرة، وهذا يوصلنا إلى المتغيّر التالي: حيث سنحدد Swap.

موارد Swap

يأتي دور Swap عندما تُستهلَك الذاكرة بالكامل، عندها يستخدم النظام الذاكرة الثانوية للاحتفاظ ببيانات التطبيقات قيد التشغيل بدلًا من الذاكرة، لأنها ممتلئة.

بناءً على الحمل الذي ستحمله، يمكنك تخصيص أكثر أو أقل، لكنني عادة أعرف أن عنقود Kubernetes الحالي لدي سيصل ذروته عند 22 جيجابايت من استخدام الذاكرة، ومع ذلك، أفضّل ضبط swap لدي على 2 × 8، ما يعني أنني سأملك 8 جيجابايت من الذاكرة × 2، وسيكون swap لدي 16 جيجابايت، ما يترك مجالًا للتطبيق لاستخدام المزيد، لكن دون أن يتباطأ.

swap=16GB

واجهت مواقف لم أرغب فيها أن يستخدم WSL ذاكرة Swap:

  • كنت أدرّب نموذج تعلّم آلي، ولم يكن سريعًا مثل الذاكرة الحقيقية، وتريد أن تضع ذلك في اعتبارك إذا أردت فعل هذا.
  • يمكن أن يُتلِف قرص SSD لديك، لأن أقراص SSD تملك عددًا محددًا من دورات القراءة والكتابة، وبمجرد تجاوزها - تتعطل. ما هي دورة الكتابة في SSD؟ | تعريف من TechTarget
  • إذا كان لديك قرص HDD، رجاءً لا تفعل هذا واشترِ قرص SSD :)

بعد إنجاز كل هذا العمل، يجب أن يبدو ملفك كالتالي:

[wsl2]

memory=8GB

swap=16GB

processors=4

احفظ هذا، وانتقل إلى جلسة PowerShell لديك وأوقف تشغيل WSL:

wsl --shutdown

بعد هذا، شغّل WSL مع توزيعتك المفضلة، ولن تتجاوز الموارد الحدود التي حددتها.

قراءات إضافية عرض الكل
الخطوة التالية

طبّق هذه الأفكار على منتجك

يساعد استوديو فالنس الفرق ذات المخاطر العالية على تحويل الوضوح الهندسي إلى تسليم منتج معياري.