آخرین اخبار
همهٔ اخبار
گزارش‌ها و تحلیل‌ها گزارش بحرانیت ۲/۱۰

افزایش ۵۴ برابری سرعت اعتبارسنجی وابستگی‌های نرم‌افزاری با استفاده از eBPF

افزایش ۵۴ برابری سرعت اعتبارسنجی وابستگی‌های نرم‌افزاری با استفاده از eBPF

محققان دانشگاه Waseda در ژاپن روشی را برای تسریع فرآیند تأیید وابستگی‌های ساخت (Build Dependency Verification) ابداع کرده‌اند که می‌تواند سرعت این عملیات را تا ۵۴ برابر افزایش دهد.

چالش‌های مدیریت وابستگی در سیستم‌های Build

سیستم‌های ساخت نرم‌افزار مانند Make، CMake و Zig فرآیند تبدیل کد منبع به برنامه‌های اجرایی را خودکار می‌کنند. این ابزارها ترتیب کامپایل فایل‌ها و لینک شدن صحیح اشیاء (Objects) را مدیریت می‌کنند. با این حال، مدیریت مشخصات وابستگی‌ها همچنان یک چالش بزرگ است؛ به طوری که طبق گزارش این محققان، بیش از نیمی از خطاهای Build در پروژه‌های بزرگ مربوط به مدیریت نادرست وابستگی‌ها است.

معرفی ابزار mkcheck2 و بهره‌گیری از eBPF

ابزارهای فعلی برای شناسایی این خطاها اغلب از ptrace استفاده می‌کنند که سربار (Overhead) پردازشی قابل توجهی ایجاد می‌کند. برای حل این مشکل، محققان ابزاری به نام mkcheck2 توسعه داده‌اند که از ردیابی فراخوانی‌های سیستمی (System Call Tracing) مبتنی بر eBPF (Extended Berkeley Packet Filter) استفاده می‌کند.

تکنولوژی eBPF اجازه می‌دهد تا برنامه‌های Sandbox شده مستقیماً در فضای هسته (Kernel Space) اجرا شوند. این رویکرد برخلاف ptrace که نیاز به تعلیق فرآیند و جابجایی زمینه (Context Switch) برای هر فراخوانی سیستمی دارد، ردیابی غیرتهاجمی (Non-invasive) را فراهم کرده و تأثیر بسیار کمی بر عملکرد کلی سیستم می‌گذارد.

نتایج ارزیابی و محدودیت‌ها

  • کاهش سربار: ارزیابی‌ها روی پروژه‌های متن‌باز نشان می‌دهد که mkcheck2 سربار شناسایی خطاهای وابستگی را تا ۹۹.۷ درصد نسبت به روش‌های مبتنی بر ptrace کاهش می‌دهد.
  • بهبود زمان تحلیل: در یک مجموعه داده شامل ۳۰۰ پروژه Make، میانگین زمان تحلیل برای هر Commit از ۱۲۶۷.۴۹ ثانیه به تنها ۲۳.۵۶ ثانیه کاهش یافته است.

با این حال، این روش محدودیت‌هایی نیز دارد. سیستم ردیابی eBPF مختص Linux است و بنابراین سیستم‌های Build در سایر سیستم‌عامل‌ها نمی‌توانند از این مزایا بهره‌مند شوند. همچنین چالش‌هایی در ردیابی وابستگی‌های مربوط به کتابخانه‌های بارگذاری شده به صورت پویا (Dynamically Loaded Libraries)، وابستگی‌های شبکه و سیستم‌های Build توزیع شده همچنان باقی است.