هر روز بیش از یک میلیارد آدرس IP منحصر به فرد از شبکه Cloudflare عبور می کند. در هر ثانیه بیش از 11 میلیون درخواست HTTP را ارائه می دهد. او در 100 میلیثانیه 95 درصد جمعیت اینترنت است. شبکه ما 200 شهر در بیش از 90 کشور را در بر می گیرد و تیم مهندسین ما زیرساخت بسیار سریع و قابل اعتمادی را ایجاد کرده اند.
ما به کار خود افتخار میکنیم و متعهد هستیم که به اینترنت مکانی بهتر و امنتر کمک کنیم. مهندسان سخت افزار Cloudflare درک عمیقی از سرورها و اجزای آنها دارند تا بهترین سخت افزار را برای به حداکثر رساندن عملکرد آن درک کرده و انتخاب کنند.
پشته نرم افزار ما محاسبات با بار بالا را مدیریت می کند و به شدت به CPU وابسته است، و از مهندسان ما می خواهد که به طور مداوم کارایی و قابلیت اطمینان Cloudflare را در هر سطح از پشته بهینه کنند. در سمت سرور، ساده ترین راه برای افزایش قدرت پردازش، افزودن هسته های CPU است. هر چه یک سرور بتواند هسته های بیشتری را در خود جای دهد، داده های بیشتری را می تواند پردازش کند. این برای ما مهم است زیرا تنوع محصولات و مشتریان ما در طول زمان در حال افزایش است و رشد درخواست ها مستلزم افزایش عملکرد سرورها است. برای افزایش عملکرد آنها، ما نیاز به افزایش چگالی هسته ها داشتیم - و این دقیقاً همان چیزی است که ما به آن دست یافتیم. در زیر اطلاعات دقیقی در مورد پردازندههای سرورهایی که از سال 2015 به کار گرفتهایم، از جمله تعداد هستهها ارائه میکنیم:
-
ژنرال 6
ژنرال 7
ژنرال 8
ژنرال 9
شروع
2015
2016
2017
2018
پردازنده
Intel Xeon E5-2630 v3
Intel Xeon E5-2630 v4
اینتل Xeon Silver 4116
Intel Xeon Platinum 6162
هسته های فیزیکی
2 X 8
2 X 10
2 X 12
2 X 24
TDP
2 X 85W
2 X 85W
2 X 85W
2 X 150W
TDP در هر هسته
10.65W
8.50W
7.08W
6.25W
در سال 2018، با Gen 9، جهشی بزرگ در تعداد کل هستههای هر سرور داشتیم. تاثیرات زیست محیطی نسبت به نسل هشتم 33 درصد کاهش یافته است و این فرصت را به ما می دهد تا حجم و قدرت محاسباتی را در هر رک افزایش دهیم. الزامات طراحی برای اتلاف گرما (
معیار اصلی تعیین کننده ما تعداد درخواست ها در هر وات است. ما میتوانیم با افزودن هستهها، تعداد درخواستها را در هر ثانیه افزایش دهیم، اما باید در بودجه قدرت خود باقی بمانیم. ما توسط زیرساخت برق مرکز داده محدود شدهایم، که همراه با ماژولهای توزیع برق انتخابی ما، حد بالایی برای هر رک سرور به ما میدهد. افزودن سرورها به رک باعث افزایش مصرف انرژی می شود. اگر از حد انرژی هر رک فراتر برویم و مجبور شویم قفسه های جدید اضافه کنیم، هزینه های عملیاتی به طور قابل توجهی افزایش می یابد. ما باید قدرت پردازش را افزایش دهیم و در همان محدوده مصرف انرژی باقی بمانیم، که باعث افزایش درخواستها به ازای هر وات، معیار اصلی ما میشود.
همانطور که ممکن است حدس بزنید، ما مصرف انرژی را در مرحله طراحی به دقت مطالعه کردیم. جدول بالا نشان می دهد که اگر TDP به ازای هر هسته بیشتر از نسل فعلی باشد، نباید وقت خود را برای استقرار CPU های تشنه انرژی بیشتر تلف کنیم - این تأثیر منفی بر متریک ما، درخواست های هر وات خواهد داشت. ما به دقت سیستم های آماده راه اندازی نسل X خود را در بازار مطالعه کردیم و تصمیم گرفتیم. ما از طراحی 48 هسته ای Intel Xeon Platinum 6162 دو سوکت به یک طراحی 48 هسته ای AMD EPYC 7642 تک سوکتی حرکت می کنیم.
-
اینتل
AMD
پردازنده
Xeon Platinum 6162
EPYC 7642
ریزمعماری
"اسکای لیک"
"ذن 2"
نام کد
Skylake SP
"رم"
فناوری فرآیند
14nm
7nm
هسته ها
2 X 24
48
فرکانس
1.9 گیگاهرتز
2.4 گیگاهرتز
L3 کش/سوکت
24 × 1.375 مگابایت
16 × 16 مگابایت
حافظه / سوکت
6 کانال، تا DDR4-2400
8 کانال، تا DDR4-3200
TDP
2 X 150W
225W
PCIe/سوکت
48 خط
128 خط
هست یک
x86-64
x86-64
از مشخصات مشخص است که تراشه AMD به ما این امکان را می دهد که تعداد هسته های مشابهی را حفظ کنیم و TDP را کاهش دهیم. نسل نهم TDP هر هسته 9 وات و نسل X 6,25 وات خواهد بود. 4,69 درصد کاهش یافته است. به لطف افزایش فرکانس و شاید طراحی ساده تر با یک سوکت، می توان فرض کرد که تراشه AMD در عمل عملکرد بهتری خواهد داشت. ما در حال حاضر تست ها و شبیه سازی های مختلفی را انجام می دهیم تا ببینیم AMD چقدر بهتر عمل خواهد کرد.
در حال حاضر، بیایید توجه داشته باشیم که TDP یک معیار ساده شده از مشخصات سازنده است که ما در مراحل اولیه طراحی سرور و انتخاب CPU از آن استفاده کردیم. یک جستجوی سریع در گوگل نشان می دهد که AMD و Intel رویکردهای متفاوتی برای تعریف TDP دارند و این مشخصات را غیرقابل اعتماد می کند. مصرف واقعی انرژی CPU و مهمتر از آن مصرف انرژی سرور، چیزی است که ما واقعاً هنگام تصمیم گیری نهایی خود از آن استفاده می کنیم.
آمادگی اکوسیستم
برای شروع سفر خود به سمت انتخاب پردازنده بعدی، طیف وسیعی از CPUهای تولیدکنندگان مختلف را بررسی کردیم که برای پشته نرم افزار و خدمات ما مناسب بودند (نوشته شده در C، LuaJIT و Go). قبلاً مجموعه ای از ابزارهای اندازه گیری سرعت را به تفصیل شرح داده ایم
ما انواع پردازندهها را با تعداد هستههای مختلف، تعداد سوکتها و فرکانسها آزمایش کردیم. از آنجایی که این مقاله درباره این است که چرا ما روی AMD EPYC 7642 قرار گرفتیم، تمام نمودارهای این وبلاگ بر عملکرد پردازنده های AMD در مقایسه با Intel Xeon Platinum 6162 تمرکز دارد.
نتایج مربوط به اندازه گیری یک سرور با هر نوع پردازنده است - یعنی با دو پردازنده 24 هسته ای از اینتل، یا با یک پردازنده 48 هسته ای از AMD (سرور برای اینتل با دو سوکت و سرور برای AMD EPYC با یک). در BIOS ما پارامترهای مربوط به سرورهای در حال اجرا را تنظیم می کنیم. این 3,03 گیگاهرتز برای AMD و 2,5 گیگاهرتز برای اینتل است. با سادهسازی بسیار، انتظار داریم که با همان تعداد هسته، AMD 21 درصد بهتر از اینتل عمل کند.
رمزنگاری
برای AMD امیدوار کننده به نظر می رسد. در رمزنگاری کلید عمومی 18 درصد بهتر عمل می کند. با یک کلید متقارن، گزینه های رمزگذاری AES-128-GCM را از دست می دهد، اما به طور کلی عملکرد قابل مقایسه ای دارد.
فشرده سازی
در سرورهای لبه، ما داده های زیادی را فشرده می کنیم تا در پهنای باند صرفه جویی شود و سرعت تحویل محتوا افزایش یابد. ما داده ها را از طریق کتابخانه های C zlib و brotli منتقل می کنیم. تمام تست ها بر روی فایل HTML blog.cloudflare.com در حافظه اجرا شد.
AMD با استفاده از gzip به طور متوسط 29٪ برنده شد. در مورد بروتلی، نتایج در تست های با کیفیت 7 که برای فشرده سازی دینامیکی استفاده می کنیم، بهتر است. در تست brotli-9 یک افت شدید وجود دارد - ما این را با این واقعیت توضیح می دهیم که Brotli حافظه زیادی مصرف می کند و حافظه پنهان را سرریز می کند. با این حال، AMD با اختلاف زیادی برنده می شود.
بسیاری از خدمات ما در Go نوشته شده است. در نمودارهای زیر سرعت رمزنگاری و فشرده سازی در Go را با RegExp روی خطوط 32 کیلوبایتی با استفاده از کتابخانه رشته ها دوبار بررسی می کنیم.
برو رمزنگاری
فشرده سازی برو
برو Regexp
برو رشته ها
AMD در همه تستها با Go بهتر عمل میکند، به جز ECDSA P256 Sign، که در آن 38٪ عقب بود - که عجیب است، با توجه به اینکه در C 24٪ بهتر عمل کرد. ارزش این را دارد که بفهمیم آنجا چه خبر است. به طور کلی، AMD برنده نمی شود، اما همچنان بهترین نتایج را نشان می دهد.
LuaJIT
ما اغلب از LuaJIT در پشته استفاده می کنیم. این چسبی است که تمام قسمت های Cloudflare را در کنار هم نگه می دارد. و ما خوشحالیم که AMD در اینجا نیز برنده شد.
به طور کلی، آزمایشها نشان میدهند که EPYC 7642 بهتر از دو Xeon Platinum 6162 عمل میکند. AMD در چند آزمایش شکست میخورد - به عنوان مثال، AES-128-GCM و Go OpenSSL ECDSA-P256 Sign - اما به طور متوسط در بقیه برنده میشود. از 25 درصد
شبیه سازی حجم کار
پس از آزمایشهای سریع، سرورها را از طریق مجموعه دیگری از شبیهسازیها اجرا کردیم که در آن یک بار مصنوعی به پشته لبه نرمافزار اعمال میشود. در اینجا ما یک حجم کاری سناریو را با انواع مختلفی از درخواستها شبیهسازی میکنیم که میتوان در کار واقعی با آنها مواجه شد. درخواست ها در حجم داده، پروتکل های HTTP یا HTTPS، منابع WAF، Workers و سایر متغیرهای بسیار متفاوت هستند. در زیر مقایسه ای از توان عملیاتی دو CPU برای انواع درخواست هایی که اغلب با آن ها مواجه می شویم، آورده شده است.
نتایج در نمودار با خط پایه ماشینهای مبتنی بر نسل نهم اینتل اندازهگیری میشوند که به مقدار 9 در محور x نرمال شدهاند. به عنوان مثال، با در نظر گرفتن درخواست های ساده 1,0 کیلوبایتی از طریق HTTPS، می بینیم که AMD از نظر درخواست در ثانیه 10 برابر بهتر از اینتل عمل می کند. به طور متوسط، AMD برای این تست ها 1,5 درصد بهتر از اینتل عمل کرد. با توجه به اینکه TDP برای یک AMD EPYC 34 7642 وات و برای دو پردازنده اینتل 225 وات است، مشخص می شود که AMD از نظر "درخواست در هر وات" 300 برابر بهتر از اینتل نتیجه می دهد!
در این مرحله، ما به وضوح به سمت گزینه تک سوکت برای AMD EPYC 7642 به عنوان پردازنده های نسل X آینده خود متمایل شده بودیم. ما بسیار علاقه مند بودیم که ببینیم سرورهای AMD EPYC در دنیای واقعی چگونه عمل می کنند و بلافاصله چندین مورد را ارسال کردیم. سرورهای برخی از مراکز داده.
کار واقعی
گام اول طبیعتاً آماده سازی سرورها برای کار در شرایط واقعی بود. همه ماشینهای موجود در ناوگان ما با فرآیندها و خدمات یکسانی کار میکنند، که فرصتی عالی برای مقایسه صحیح عملکرد فراهم میکند. مانند بسیاری از مراکز داده، ما چندین نسل سرور مستقر داریم و سرورهای خود را در خوشههایی جمعآوری میکنیم تا هر کلاس شامل سرورهایی از نسلهای مشابه باشد. در برخی موارد، این ممکن است منجر به منحنی های بازیافت شود که بین خوشه ها متفاوت است. اما نه با ما مهندسان ما استفاده از CPU را برای همه نسلها بهینه کردهاند به طوری که صرف نظر از اینکه CPU یک دستگاه خاص دارای 8 هسته یا 24 هسته است، استفاده از CPU به طور کلی مانند بقیه است.
این نمودار نظر ما را در مورد شباهت استفاده نشان می دهد - تفاوت معنی داری بین استفاده از CPU های AMD در سرورهای نسل X و استفاده از پردازنده های اینتل در سرورهای نسل 9 وجود ندارد. . عالی. این دقیقاً همان چیزی است که ما در سرورهای خود برای آن تلاش می کنیم و برای مقایسه منصفانه به این نیاز داریم. دو نمودار زیر تعداد درخواست های پردازش شده توسط یک هسته CPU و تمام هسته ها در سطح سرور را نشان می دهد.
درخواست در هر هسته
درخواست ها به سرور
مشاهده می شود که AMD به طور متوسط 23 درصد درخواست های بیشتری را پردازش می کند. اصلا بد نیست! ما اغلب در وبلاگ خود در مورد راه هایی برای افزایش عملکرد Gen 9 نوشته ایم. و اکنون تعداد هسته های مشابهی داریم، اما AMD کارهای بیشتری را با قدرت کمتر انجام می دهد. فوراً از مشخصات تعداد هسته ها و TDP مشخص می شود که AMD سرعت بیشتری را با بهره وری انرژی بیشتر ارائه می دهد.
اما همانطور که قبلاً اشاره کردیم، TDP یک مشخصات استاندارد نیست و برای همه تولیدکنندگان یکسان نیست، بنابراین بیایید به مصرف واقعی انرژی نگاه کنیم. با اندازه گیری مصرف انرژی سرور به موازات تعداد درخواست ها در ثانیه، نمودار زیر را به دست آوردیم:
بر اساس درخواست در هر ثانیه به ازای هر وات مصرف شده، سرورهای Gen X که روی پردازندههای AMD کار میکنند 28 درصد کارآمدتر هستند. با توجه به اینکه TDP AMD 25% کمتر است، می توان انتظار بیشتری داشت، اما باید به خاطر داشت که TDP یک ویژگی مبهم است. ما دیدیم که مصرف برق واقعی AMD تقریباً با TDP اعلام شده در فرکانس های بسیار بالاتر از پایه یکسان است. اینتل آن را ندارد. این دلیل دیگری است که چرا TDP تخمین قابل اعتمادی از مصرف انرژی نیست. پردازندههای اینتل در سرورهای نسل 9 ما در یک سیستم چند نود ادغام شدهاند، در حالی که پردازندههای AMD در سرورهای استاندارد 1U کار میکنند. این به نفع AMD نیست، زیرا سرورهای چند نود باید چگالی بیشتری با مصرف انرژی کمتر در هر گره ارائه دهند، اما AMD همچنان از نظر مصرف انرژی در هر گره از اینتل پیشی میگیرد.
در اکثر مقایسهها بین مشخصات، شبیهسازیهای آزمایشی و عملکرد واقعی، پیکربندی 1P AMD EPYC 7642 بهطور قابلتوجهی بهتر از 2P Intel Xeon 6162 عمل کرد. در برخی شرایط، AMD میتواند تا 36 درصد بهتر عمل کند، و ما معتقدیم که با بهینهسازی سختافزار و نرمافزار، ما میتوانیم به طور مداوم به این پیشرفت دست پیدا کنیم.
معلوم شد که AMD برنده شد.
نمودارهای اضافی میانگین تأخیر و تأخیر p99 را نشان می دهد که NGINX در یک دوره 24 ساعته اجرا می شود. به طور متوسط، فرآیندهای AMD 25٪ سریعتر اجرا می شوند. در p99 بسته به زمان روز 20-50% سریعتر اجرا می شود.
نتیجه
مهندسان سخت افزار و عملکرد Cloudflare مقدار قابل توجهی آزمایش و تحقیق را برای تعیین بهترین پیکربندی سرور برای مشتریان خود انجام می دهند. ما عاشق کار در اینجا هستیم زیرا میتوانیم مشکلات بزرگی از این قبیل را حل کنیم، و میتوانیم به شما در حل مشکلاتتان با خدماتی مانند محاسبات لبههای بدون سرور و مجموعهای از راهحلهای امنیتی مانند Magic Transit، Argo Tunnel و حفاظت DDoS کمک کنیم. همه سرورهای شبکه Cloudflare به گونه ای پیکربندی شده اند که عملکرد قابل اعتمادی داشته باشند و ما همیشه در تلاش هستیم تا هر نسل بعدی از سرورها را بهتر از نسل قبلی کنیم. ما معتقدیم که AMD EPYC 7642 پاسخگوی پردازنده های Gen X است.
با استفاده از Cloudflare Workers، توسعهدهندگان برنامههای خود را در شبکه در حال گسترش ما در سراسر جهان مستقر میکنند. ما مفتخریم که به مشتریان خود اجازه می دهیم روی نوشتن کد تمرکز کنند در حالی که ما بر امنیت و قابلیت اطمینان در فضای ابری تمرکز می کنیم. و امروز با خوشحالی بیشتری اعلام می کنیم که کار آنها بر روی سرورهای نسل X ما که از پردازنده های نسل دوم AMD EPYC استفاده می کنند، مستقر خواهد شد.
پردازنده های EPYC 7642 با اسم رمز "Rome" [Rome]
با استفاده از EPYC 7642 AMD، ما توانستیم عملکرد خود را افزایش دهیم و گسترش شبکه خود را به شهرهای جدید آسانتر کنیم. رم در یک روز ساخته نشده است، اما به زودی به بسیاری از شما نزدیکتر خواهد شد.
در چند سال گذشته، ما تراشههای x86 بسیاری از اینتل و AMD و همچنین پردازندههای ARM را آزمایش کردهایم. ما انتظار داریم این سازندگان CPU در آینده به همکاری با ما ادامه دهند تا همه با هم اینترنت بهتری بسازیم.
منبع: www.habr.com