الدرس 26: perf وFlamegraphs والمشروع الختامي — TCP Echo Server
perf هو أداة التحليل (profiling) القياسية على Linux: فهو يقيس CPU cycles وcache misses وbranch mispredictions وsystem calls. تحوّل Flamegraphs مخرجاته إلى تصوير بصري بديهي. في قسم المشروع الختامي نبني TCP echo server متعدد الخيوط (multi-threaded) بلغة C++ يجمع كل مفاهيم المساق.
perf أشبه بطبيب يستمع إلى نبضات قلب البرنامج: فهو يأخذ عينات مما يفعله الـ CPU كل بضع ميكروثوانٍ ويُريك أين يُهدر الوقت.
- perf stat
- وضع من perf يشغّل برنامجاً ويُبلّغ عن مقاييس أداء أساسية: cycles وinstructions وcache-misses وbranch-misses وcontext-switches. أداة تشخيص سريعة.
- perf record
- وضع من perf يأخذ عينات من الـ call stack الخاص بالبرنامج ويحفظها في الملف perf.data. يُستخدم بعد ذلك مع perf report أو flamegraph.
- flamegraph
- تصوير بصري لملف تعريف الـ CPU: المحور X = زمن CPU (العرض = التكلفة)، المحور Y = عمق الـ call stack. كل مستطيل = دالة. القمم العريضة = hotspots.
- IPC (Instructions Per Cycle)
- مقياس كفاءة الـ CPU: كم عدد التعليمات التي تُنفَّذ في المتوسط لكل دورة ساعة (clock cycle). قيمة IPC < 1 تشير إلى pipeline stalls (مقيّد بالذاكرة). وتكون IPC ≈ 3-4 في الكود الجيد التحسين.
- capstone project
- مشروع يدمج عدة مواضيع تعلّمناها في المساق. في هذا الدرس: TCP echo server متعدد الخيوط بلغة C++ يستخدم sockets وthreads وmutexes وepoll.