Dampak Spectre, Meltdown, dan perlindungan Foreshadow pada kinerja Linux 4.19

Salah satu pertanyaan paling umum belakangan ini adalah bagaimana perlindungan terhadap Meltdown / Specter, dan sekarang juga terhadap L1TF / Foreshadow, memengaruhi kinerja Linux. Awal pengembangan kernel Linux 4.19 bulan ini menambah bahan bakar ke api tidak hanya untuk x86_64, tetapi juga untuk POWER / s390 / ARM. Untuk mendapatkan gambaran umum tentang efek tambalan terhadap kinerja, saya menguji tiga sistem Intel Xeon dan dua sistem AMD EPYC, serta mesin virtual di setiap sisi, untuk mengevaluasi kinerja default kernel Linux 4.19 dengan dan tanpa tambalan yang sesuai.



Di semua mesin, sistem diinstal dengan kernel Linux 4.19-rc1 dirilis akhir pekan lalu. Pada Intel, tambalan yang sesuai termasuk isolasi tabel halaman (PTI / KPTI) untuk Meltdown dan berbagai tambalan Spectre terhadap eksekusi perintah spekulatif, termasuk membersihkan penunjuk __user, menggunakan retpoline melalui IBPB IBRS_FW, tambalan untuk kerentanan Bypass Store Spekulatif menggunakan prctl dan seccomp, dan juga inversi PTE dan cache pembilasan bersyarat di mesin virtual - ini untuk L1TF / Foreshadow.

Secara default, kernel Linux tidak memberikan perlindungan "penuh" terhadap kerentanan dengan menonaktifkan dukungan Intel HT / SMT, jadi ingatlah ini jika Anda menggunakan mesin virtual dan memberikan kode yang tidak dipercaya atau akses pengguna ke VM. Jika Anda memilih perlindungan penuh dan menonaktifkan SMT, maka dampak pada kinerja jauh lebih terlihat karena separuh dari jumlah utas yang tersedia. Penyedia layanan cloud tampaknya hanya mengkonfigurasi penjadwal sehingga aliran SMT tidak melewati pengguna. Ini menghindari biaya yang sangat besar untuk menonaktifkan Hyper Threading. Jadi sekarang kita hanya membandingkan perlindungan stock / kernel default.



AMD EPYC, secara default, menyediakan perlindungan hanya untuk kerentanan terkait yang memprihatinkan mereka: ini membersihkan penunjuk __ pengguna untuk Specter V1, AMD Retpoline IBPB untuk Specter V2 dan menonaktifkan Specifative Store Bypass (SSBD) untuk Spectre V4.



Setelah menguji semua konfigurasi pada kernel stock Linux 4.19-rc1, pengujian diulang menggunakan berbagai sakelar proteksi dalam runtime . Semua sistem diuji dengan Ubuntu 18.04.1 LTS x86_64 dengan kernel Linux 4.19-rc1 melalui Ubuntu Mainline Kernel PPA, mikrokode / BIOS terbaru, sistem file GCC 7.3 dan EXT4.



Konfigurasi sistem dalam pengujian:

  • Intel Xeon E3-1280 v5 Skylake pada motherboard MSI Z170A SLI PLUS, 16 GB DDR4 dan 256 GB Toshiba RD400 NVMe SSD.
  • Intel Xeon E5-2687W v3 Haswell pada motherboard MSI X299 SLI PLUS, 32 GB DDR4 dan 80 GB Intel 530 SATA 3.0 SSD.
  • Dua rak Intel Xeon Gold 6138 Tyan 1U dengan RAM 96 GB dan Samsung 970 EVO NVMe SSD 256 GB.
  • Mesin virtual KVM pada server Xeon Gold prosesor ganda yang disebutkan di atas. VM ini adalah satu-satunya proses aktif pada mesin dan dikonfigurasi untuk mengakses 80% core / utas CPU (64 utas), 48 GB RAM dan disk virtual 118 GB. Selama pengujian, perlindungan kerentanan dinonaktifkan pada host dan VM.
  • AMD EPYC 7601 pada server Tyan 2U dengan 128 GB RAM dan 280 GB Intel Optane 900p NVMe SSD.
  • Mesin virtual KVM pada server AMD EPYC 7601 yang disebutkan di atas memiliki akses ke 80% inti / utas CPU (52 utas), RAM 48 GB, dan disk virtual 120 GB.
  • Server AMD EPYC 7551 pada motherboard Gigabyte MZ31-AR0 dengan 32 GB RAM dan Samsung 960 EVO 256GB NVMe SSD.

Jelas, konfigurasi mesin berbeda dan mereka tidak dimaksudkan untuk dibandingkan satu sama lain, yaitu, untuk memeriksa perlindungan on / off terhadap kerentanan prosesor pada kernel Linux 4.19. Oleh karena itu, untuk kejelasan, semua data dinormalisasi dengan kinerja setiap sistem. Semua tes dari Phoronix Test Suite .

Untuk artikel, tes yang terkait dengan Specter / Meltdown, yaitu, dengan input-output intensif atau interaksi kernel, dipilih. Bebannya hanya pada CPU dan tidak terlalu bergantung pada cache prosesor.



Profil CompileBench mungkin adalah cara termudah untuk menunjukkan dampak Specter / Meltdown. Pada kernel Linux 4.19, ketika perlindungan diaktifkan, prosesor Intel menunjukkan penurunan 7–16% dalam kinerja, sementara prosesor AMD menunjukkan penurunan 3-4%.



Situasi serupa di subyek dengan membaca pohon yang dikompilasi. Prosesor Intel memiliki penurunan kinerja 14-15%, prosesor AMD mengalami penurunan 4–5%.



Dalam tugas nyata seperti mengkompilasi kernel Linux, perbedaan kinerja akan menjadi sekitar 2%.



Benchmark scheduler kernel Hackbench juga mengalami aktivasi keamanan. Dalam prosesor Intel, kinerja berkurang sekitar 20%, kecuali untuk Xeon Gold. Sistem AMD EPYC tidak membuat banyak perbedaan.



Server database PostgreSQL adalah salah satu aplikasi nyata yang mengalami penurunan kinerja setelah memasang perlindungan pada prosesor. Dalam pengujian khusus ini, perbedaan untuk prosesor Intel adalah 5-8%, dan untuk EPYC - 1%.







Program nyata lain dengan penurunan kinerja karena Specter / Meltdown adalah editor grafis GIMP. Perbedaan untuk Intel adalah 5-10%, untuk AMD - 0−2%.



Redis DBMS pada sistem Intel Skylake E3 v5 melambat sebesar 11%, dan pada prosesor Intel lainnya - sebesar 5-7%, perbedaan antara sistem AMD EPYC adalah 1-5%.



Server web Nginx pada sistem Xeon yang diuji pada kernel Linux 4.19 menunjukkan perbedaan kinerja hingga 20%, dan pada AMD EPYC - dari 1-2% menjadi 6%.



Demikian pula, server web Apache selama instalasi default berjalan jauh lebih lambat setelah mengaktifkan perlindungan pada prosesor Intel dan praktis tanpa perubahan pada prosesor AMD.



Dalam pengujian untuk kecepatan membuat file OSBench, sistem pada Intel Xeon melambat sebesar 13-16%, dan sistem EPYC sebesar 6-9%.



Tes untuk membuat utas juga menunjukkan perbedaan nyata antara prosesor Intel dan AMD.





Saat memulai program dan membuat proses, ada perbedaan yang lebih kecil tetapi nyata dalam operasi default kernel Linux 4.19 dibandingkan dengan perlindungan yang dinonaktifkan.

Inilah yang terjadi dengan kinerja prosesor pada kernel Linux 4.19 setelah menginstal patch. Perlu diingat bahwa jika sistem Anda terbuka untuk pengguna / kode yang tidak dapat diandalkan, terutama di mesin virtual, maka tindakan tambahan mungkin diperlukan untuk perlindungan, seperti l1tf = penuh, hingga menonaktifkan SMT / HT atau pembilasan wajib dari cache L1, apa lagi akan menurunkan kinerja sistem lebih lanjut. Efek perlindungan ini terhadap L1TF / Foreshadow dijelaskan secara lebih rinci dalam artikel sebelumnya .

Mungkin di masa depan kita akan menjalankan tes serupa di Linux 4.19 dengan prosesor desktop dan beban kerja yang sesuai.

Source: https://habr.com/ru/post/id421931/


All Articles