توسعه دهندگان از Cloudflare
Cloudflare از dm-crypt برای رمزگذاری دادهها در دستگاههای ذخیرهسازی مورد استفاده برای کش کردن محتوا در CDN استفاده میکند. Dm-crypt در سطح دستگاه بلوک عمل میکند و درخواستهای ورودی/خروجی نوشتن را رمزگذاری میکند و درخواستهای خواندن را رمزگشایی میکند و به عنوان یک لایه بین دستگاه بلوک و درایور سیستم فایل عمل میکند.
برای ارزیابی عملکرد dm-crypt با استفاده از بسته
در ابتدا، سوء ظن در مورد استفاده از الگوریتم های ناکارآمد در سیستم رمزنگاری هسته ایجاد شد. اما این آزمایشها از سریعترین الگوریتم، 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 ممکن است تلاش کند درخواستهای نوشتن معلق را با استفاده از درخت جستجو مرتب کند
هنگام خواندن، 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 با توجه به اینکه درایوهای مدرن سریعتر و هوشمندتر شده اند، سیستم توزیع منابع در هسته لینوکس تجدید نظر شده و برخی از زیرسیستم ها دوباره طراحی شده اند.
در نتیجه، هنگام آزمایش یک دیسک RAM، امکان افزایش دو برابری عملکرد dm-crypt وجود داشت - عملکرد از 294 مگابایت بر ثانیه (2 در 147 مگابایت بر ثانیه) به 640 مگابایت بر ثانیه افزایش یافت که بسیار نزدیک به عملکرد رمزگذاری خالی (696 مگابایت بر ثانیه).
هنگام آزمایش بار روی سرورهای واقعی، اجرای جدید عملکرد بسیار نزدیک به پیکربندی در حال اجرا بدون رمزگذاری را نشان داد، و فعال کردن رمزگذاری در سرورهایی با کش Cloudflare هیچ تاثیری بر سرعت پاسخ نداشت. در آینده، Cloudflare قصد دارد وصله های آماده شده را به هسته اصلی لینوکس منتقل کند، اما قبل از آن نیاز به کار مجدد دارند، زیرا آنها برای یک بار خاص بهینه شده اند و همه حوزه های برنامه را پوشش نمی دهند، به عنوان مثال، رمزگذاری در پایین. -دستگاه های تعبیه شده برق
منبع: opennet.ru