اگه دواپس کار میکنید احتمالا اسم eBPF رو شنیدید. یه تکنولوژی که خیلیها از شرکتها مثل نتفلیکس و فیسبوک بهش وابستهان.
تا قبل از eBPF، اگر میخواستید بدونید "دقیقا" توی سیستمعامل چه خبره، یا میخواستید روی ترافیک شبکه کنترل داشته باشید (مثل فیلتر کردن پکتها یا load balancing سفارشی)، دو راه داشتید:
۱. تغییر سورس کرنل: که خب زمان بره.
۲. ماژولهای کرنل: که دسترسی کامل داشتن، ولی یه باگ کوچیک توشون کافی بود تا همه چیز بیاد پایین.
🧭 راه حل مدرن: eBPF
خیلی ساده، eBPF یه ماشین مجازی (Virtual Machine) کوچیک و امنه که داخل خودِ کرنل لینوکس زندگی میکنه.
شما میتونید برنامه بنویسید، اونها رو به کرنل تزریق کنید و کرنل اونها رو اجرا کنه. اما با این مزیت که:
🔹 امنیت تضمین شده: قبل از اجرا، یه بخشی به اسم Verifier کد شما رو چک میکنه تا مطمئن شه لوپ بینهایت نداره یا به حافظه غیرمجاز دسترسی پیدا نمیکنه.
🔹 بدون توقف: برای اجرای این برنامهها نیازی به ریستارت کردن سیستم یا کامپایل دوباره کرنل نیست.
🔹 سرعت بالا: کدها به صورت JIT (Just-In-Time) کامپایل میشن و با سرعت Native اجرا میشن.
این تکنولوژی نیروی محرکه نسل بعدی ابزارهای شبکه و نظارت (Observability) هست.
⚖️ کاربردش کجاست
تقریبا هر جایی که نیاز به سرعت و دید عمیق هست:
• مانیتورینگ و Observability: ابزارهایی که نشون میدن کدوم پروسس داره چه فایلهایی رو باز میکنه یا چه پکتهایی رو میفرسته (بدون سربار ابزارهای قدیمی).
• شبکه: فیلتر کردن و مدیریت ترافیک.
🛑 البته قدرت همیشه درست به کار نمیره. این ابزار قابلیت DPI هم داره که سانسورچی توی ایران ازش برای بلاک کردن و کنترل ترافیک مردم استفاده میکنه.
شرکت هایی که ازش استفاده میکنن و چطور رو میتونید اینجا از سایت رسمی ببینید.
💠 جمعبندی
امروزه کار با eBPF با وجود زبونایی مثل Go و پایتون و کتابخونههای جدید راحت شده و نوشتن ابزارهایی که مستقیم با کرنل حرف میزنن خیلی سادهتر شده.
یه پروژه قدیمی با Go پیدا کردم که ساده پراسس های سیستم رو لایو مانیتور میکنه. چون قدیمیه یکم ریفکتورش کردم و پست های بعدی میذارمش میتونید چک کنید و ابزار خودتون رو بنویسید.
قبلش برای درک برنامه لازمه چندتا مفهوم لینوکسی مثل یوزر اسپیس و کرنل اسپیس توضیح داده بشه که پست بعد مینویسم.
🔘 @TerminalNotes <- #linux #ebpf