AES-NI در OpenSSL در برابر انتقال به هسته: کدام را لازم دارید؟
پشتیبانی دستورهای CPU را از جایی که بستهها پردازش میشوند جدا کنید: پیش از تنظیم، بکاند رمزنگاری، رمز مذاکرهشده و مسیر فعال را بررسی کنید.
دو برچسب چنان به کار میروند که گویی یک چیزند: شتابیافته با سختافزار و منتقلشده به هسته. یکی توصیف میکند که روال AES یک کتابخانه کدام دستورها را اجرا میکند و دیگری توصیف میکند که پردازش بستهها کجا رخ میدهد. یک VPN میتواند اولی را بدون دومی داشته باشد، دومی را بدون اولی، یا هر دو را همزمان. هر تصمیمی درباره کارایی باید با نام بردن این آغاز شود که واقعاً کدامیک از آن دو را تغییر میدهید.
دو محور، نه یک امتیاز
محور نخست پیادهسازی است: آیا کدی که AES-256-GCM را انجام میدهد به نسخهای هدایت میشود که از دستورهای اختصاصی پردازنده استفاده میکند یا به روالی قابل حمل که آنها را مانند حساب معمولی اجرا میکند. این انتخاب درون کتابخانه رمزنگاری زندگی میکند و هنگام راهاندازی آن گرفته میشود.
محور دوم جایگذاری است: آیا بسته از مسیر تبدیل هسته میگذرد یا یک دیمن در فضای کاربر از دستگاه تونل میخواند، رمزنگاری میکند و دوباره مینویسد.
هیچ محوری دیگری را محدود نمیکند. یک VPN در فضای کاربر روی پردازندهای با دستورهای AES میتواند تمام وقت از آنها استفاده کند، و مسیری در هسته روی پردازندهای بدون آنها به پیادهسازی نرمافزاری بازمیگردد. برچسبها در مطالب فروشندگان بهندرت این تفاوت را روشن میکنند و به همین دلیل توصیههای تنظیم که میان دو موقعیت کپی میشود اغلب هیچ کاری نمیکند.
محور یک: کدام کد رمزنگاری را انجام میدهد
OpenSSL در هنگام راهاندازی ویژگیهای پردازنده را تشخیص میدهد و از نتیجه برای انتخاب مسیرهای کد بهینه استفاده میکند، چنانکه مستندات توانمندیهای x86 توصیف میکند. AES-NI یکی از توانمندیهای مستندشده پشت این هدایت است. هیچیک از اینها مستلزم آن نیست که کتابخانه به جزئی از هسته تبدیل شود.
پیش از فرض اینکه مسیر سریع استفاده میشود، تأیید کنید که ویژگی برای فرایند قابل مشاهده است. در لینوکس منبع، فیلد flags در /proc/cpuinfo است و درون یک مهمان آنچه را که هایپروایزر آشکار میکند بازتاب میدهد، نه نام مدل میزبان فیزیکی را.
grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verboseفرمان دوم ارائهدهندگانی را نام میبرد که در آن ساخت بارگذاری شدهاند. به شما نمیگوید سرویس VPN به کدام کتابخانه پیوند خورده است، و یک میزبان میتواند دو نصب OpenSSL داشته باشد در حالی که فرایند در حال اجرا فقط از یکی از آنها استفاده میکند.
محور دو: مسیر بسته کجا اجرا میشود
جایگذاری در هسته یعنی تبدیل در ماشین IPsec خود هسته یا درون یک درایور تونل در هسته رخ میدهد، پس بستهها برای هر دسته به سفری رفتوبرگشتی از یک فرایند فضای کاربر نیاز ندارند. این میتواند رونوشتها و تعویضهای زمینه را کم کند و کار را میان هستهها پخش کند به شکلی که یک دیمن تکرشتهای نمیتواند. همچنین شمارندهها و ردهایی را که هنگام افت گذردهی میخوانید جابهجا میکند، زیرا کار اکنون در آن سوی مرزی رخ میدهد که شما کنترلش نمیکنید. آن را هزینه اشکالزدایی بدانید، نه فقط تصمیمی درباره کارایی.
این کار پشتیبانی دستوری نمیسازد، رمزی را پیکربندی نمیکند و مسیر موجودی را به کار نمیاندازد.
مجازیسازی در این محور هم چینی میافزاید. به یک مهمان ممکن است مدل پردازنده پوشاندهای داده شود که ویژگیهایی را که میزبان دارد پنهان میکند، و یک مهمان تودرتو ممکن است کمتر هم ببیند. نمای توانمندیها را از درون محیطی بخوانید که VPN واقعاً در آن اجرا میشود، نه از کنسول هایپروایزر.
هر انتخاب چه میخرد و چه نمیتواند
پرسش عملی این است که زمان کجا میرود. اگر یک رشته مشغول، رونوشتهای مکرر بافر یا یک فراخوان سیستمی برای هر بسته گذردهی را محدود کند، بردن تبدیل به مسیری که آن هزینهها را حذف میکند میتواند کمک کند، به شرطی که هسته تبدیلی را که لازم دارید پیاده کرده باشد.
اگر محدودیت یک پیوند بالادستی پرترافیک، مسیری با افت، زمان رفتوبرگشت طولانی، سرویس مقصد اشباعشده یا رشتهای باشد که به یک هسته سنجاق شده است، جایگذاری چیزی مهم را تغییر نمیدهد. همین برای انتخاب دستورها هم صادق است: AES روی سختافزار اختصاصی نمیتواند مسیر گمشده را تعمیر کند و کمکی نمیکند اگر تونل بیکار باشد چون تحلیل نامها شکست میخورد.
جایی که هر دو صدق میکنند، با هم ترکیب میشوند. مسیر هسته میتواند همان هدایت سطح دستور را درون API رمزنگاری هسته به کار ببرد، و مسیر فضای کاربر با کتابخانهای خوب انتخابشده از پیش از آن استفاده میکند. تصمیم این نیست که کدام در حالت انتزاعی سریعتر است؛ این است که برای کدام هزینه شاهد دارید.
پیش از تغییر هر چیزی چهار واقعیت را بنویسید
فایل دودویی سرویس و کتابخانه رمزنگاریای را که به آن پیوند خورده است بنویسید، زیرا آنها محور یک را تعیین میکنند. سپس حفاظت داده مذاکرهشده را ثبت کنید، زیرا رمزی بدون مسیر دستور اختصاصی رفتاری متفاوت از رمزی با آن دارد، و مجموعه را هر دو طرف انتخاب میکنند.
سپس نمای توانمندیها از درون محیط در حال اجرا و در پایان مسیر فعال بستهها همراه با شاهدی بر اینکه حالتی که فکر میکنید فعال است واقعاً چنین است. ماژول بارگذاریشده شاهدی بر استفاده یک پروفایل از آن نیست و یک خط پیکربندی شاهدی بر پذیرش آن توسط هسته نیست.
یک چیز را تغییر دهید و سپس با باری یکنواخت با همان نقاط پایانی و همان جهت انتقال مقایسه کنید. ادعای سرعتی که اندازهگیری نکردهاید کمتر از یادداشتی ارزش دارد که میگوید بکاند هرگز زیر سؤال نبوده است.