Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

توسعه دهندگان از Cloudflare گفت در مورد انجام کار برای بهینه سازی عملکرد رمزگذاری دیسک در هسته لینوکس. در نتیجه آنها آماده شدند تکه ها برای زیر سیستم سرداب dm و Crypto API، که این امکان را به بیش از دو برابر کردن توان خواندن و نوشتن در تست مصنوعی و همچنین به نصف رساندن تأخیر می دهد. هنگامی که روی سخت افزار واقعی آزمایش شد، سربار رمزگذاری تقریباً به سطح مشاهده شده هنگام کار با دیسک بدون رمزگذاری داده کاهش یافت.

Cloudflare از dm-crypt برای رمزگذاری داده‌ها در دستگاه‌های ذخیره‌سازی مورد استفاده برای کش کردن محتوا در CDN استفاده می‌کند. Dm-crypt در سطح دستگاه بلوک عمل می‌کند و درخواست‌های ورودی/خروجی نوشتن را رمزگذاری می‌کند و درخواست‌های خواندن را رمزگشایی می‌کند و به عنوان یک لایه بین دستگاه بلوک و درایور سیستم فایل عمل می‌کند.

Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

برای ارزیابی عملکرد dm-crypt با استفاده از بسته تستر I/O انعطاف پذیر ما سرعت کار با پارتیشن‌های رمزگذاری‌شده و رمزگذاری‌نشده را روی یک دیسک RAM که در RAM قرار دارد اندازه‌گیری کردیم تا نوسانات عملکرد دیسک را حذف کنیم و روی عملکرد کد تمرکز کنیم. برای پارتیشن های رمزگذاری نشده، عملکرد خواندن و نوشتن در 1126 مگابایت بر ثانیه باقی ماند، اما با فعال شدن رمزگذاری، سرعت کاهش یافت. 7 در زمان و به 147 مگابایت بر ثانیه رسید.

در ابتدا، سوء ظن در مورد استفاده از الگوریتم های ناکارآمد در سیستم رمزنگاری هسته ایجاد شد. اما این آزمایش‌ها از سریع‌ترین الگوریتم، aes-xts، با 256 کلید رمزگذاری استفاده کردند، که عملکرد آن هنگام اجرای «معیار cryptsetup» بیش از دو برابر بیشتر از نتیجه به‌دست‌آمده در هنگام آزمایش یک دیسک RAM است. آزمایش‌ها با پرچم‌های dm-crypt برای تنظیم عملکرد نتیجه‌ای نداشت: هنگام استفاده از پرچم "--perf-same_cpu_crypt"، عملکرد حتی به 136 مگابایت بر ثانیه کاهش یافت و هنگام تعیین پرچم "--perf-submit_from_crypt_cpus" فقط افزایش یافت. تا 166 مگابایت بر ثانیه

تجزیه و تحلیل عمیق تر از منطق عملیاتی نشان داد که dm-crypt به آن سادگی که به نظر می رسد نیست - وقتی یک درخواست نوشتن از درایور FS می رسد، dm-crypt آن را بلافاصله پردازش نمی کند، بلکه آن را در صف "kcryptd" قرار می دهد. بلافاصله تجزیه نمی شود، اما زمانی که لحظه مناسب است. از صف، درخواست برای انجام رمزگذاری به Linux Crypto API ارسال می شود. اما از آنجایی که Crypto API از یک مدل اجرای ناهمزمان استفاده می کند، رمزگذاری نیز بلافاصله انجام نمی شود، بلکه با دور زدن یک صف دیگر. پس از تکمیل رمزگذاری، dm-crypt ممکن است تلاش کند درخواست‌های نوشتن معلق را با استفاده از درخت جستجو مرتب کند قرمز-سیاه. در انتها مجدداً یک رشته هسته جداگانه با تأخیر مشخص درخواست‌های ورودی/خروجی انباشته شده را دریافت کرده و به پشته دستگاه بلاک می‌فرستد.

Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

هنگام خواندن، dm-crypt ابتدا درخواستی را به صف "kcryptd_io" اضافه می کند تا داده ها را از درایو دریافت کند. پس از مدتی، داده ها در دسترس می شوند و برای رمزگشایی در صف "kcryptd" قرار می گیرند.
Kcryptd درخواستی را به Linux Crypto API ارسال می کند که اطلاعات را به صورت ناهمزمان رمزگشایی می کند. درخواست‌ها همیشه از تمام صف‌ها عبور نمی‌کنند، اما در بدترین حالت، یک درخواست نوشتن تا 4 بار و یک درخواست خواندن تا 3 بار در صف قرار می‌گیرد. هر ضربه به صف باعث تاخیر می شود که دلیل اصلی کاهش قابل توجه عملکرد dm-crypt است.

استفاده از صف به دلیل نیاز به کار در شرایطی است که وقفه ایجاد می شود. در سال 2005، زمانی که مدل عملیاتی مبتنی بر صف فعلی dm-crypt پیاده‌سازی شد، Crypto API هنوز ناهمزمان نبود. پس از اینکه Crypto API به یک مدل اجرای ناهمزمان منتقل شد، اساساً از محافظت مضاعف استفاده شد. صف ها نیز برای صرفه جویی در مصرف پشته هسته معرفی شدند، اما پس از افزایش آن در سال 2014، این بهینه سازی ها ارتباط خود را از دست دادند. یک صف اضافی "kcryptd_io" برای غلبه بر گلوگاه که منجر به انتظار برای تخصیص حافظه زمانی که تعداد زیادی درخواست می رسد، معرفی شد. در سال 2015، یک مرحله مرتب‌سازی اضافی معرفی شد، زیرا درخواست‌های رمزگذاری در سیستم‌های چند پردازنده‌ای می‌توانستند بدون ترتیب تکمیل شوند (به جای دسترسی متوالی به دیسک، دسترسی به ترتیب تصادفی انجام شد و زمان‌بندی CFQ به طور موثر کار نمی‌کرد). در حال حاضر، هنگام استفاده از درایوهای SSD، مرتب‌سازی معنای خود را از دست داده است و دیگر از زمان‌بندی CFQ در هسته استفاده نمی‌شود.

مهندسان Cloudflare با توجه به اینکه درایوهای مدرن سریعتر و هوشمندتر شده اند، سیستم توزیع منابع در هسته لینوکس تجدید نظر شده و برخی از زیرسیستم ها دوباره طراحی شده اند. اضافه dm-crypt حالت عملیاتی جدیدی دارد که استفاده از صف های غیرضروری و تماس های ناهمزمان را حذف می کند. این حالت توسط یک پرچم جداگانه "force_inline" فعال می شود و dm-crypt را به شکل یک پروکسی ساده می آورد که درخواست های دریافتی را رمزگذاری و رمزگشایی می کند. تعامل با Crypto API با انتخاب صریح الگوریتم‌های رمزگذاری که در حالت همزمان عمل می‌کنند و از صف‌های درخواست استفاده نمی‌کنند، بهینه شده است. برای کار همزمان با Crypto API وجود داشت پیشنهادی ماژولی که به شما امکان می دهد از FPU/AES-NI برای شتاب استفاده کنید و درخواست های رمزگذاری و رمزگشایی را مستقیماً ارسال کنید.

در نتیجه، هنگام آزمایش یک دیسک RAM، امکان افزایش دو برابری عملکرد dm-crypt وجود داشت - عملکرد از 294 مگابایت بر ثانیه (2 در 147 مگابایت بر ثانیه) به 640 مگابایت بر ثانیه افزایش یافت که بسیار نزدیک به عملکرد رمزگذاری خالی (696 مگابایت بر ثانیه).

Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

هنگام آزمایش بار روی سرورهای واقعی، اجرای جدید عملکرد بسیار نزدیک به پیکربندی در حال اجرا بدون رمزگذاری را نشان داد، و فعال کردن رمزگذاری در سرورهایی با کش Cloudflare هیچ تاثیری بر سرعت پاسخ نداشت. در آینده، Cloudflare قصد دارد وصله های آماده شده را به هسته اصلی لینوکس منتقل کند، اما قبل از آن نیاز به کار مجدد دارند، زیرا آنها برای یک بار خاص بهینه شده اند و همه حوزه های برنامه را پوشش نمی دهند، به عنوان مثال، رمزگذاری در پایین. -دستگاه های تعبیه شده برق

Cloudflare وصله هایی را آماده کرده است که سرعت رمزگذاری دیسک در لینوکس را به طرز چشمگیری افزایش می دهد

منبع: opennet.ru

اضافه کردن نظر