Bagaimana cara menonaktifkan cache L1 dan L2 prosesor?

10

Apakah mungkin untuk menonaktifkan cache L1 dan / atau L2 pada Ubuntu 14.04 (lebih disukai dalam bahasa tingkat yang lebih tinggi seperti Python)? Jika ya, bagaimana caranya?

Selain itu, apakah penonaktifan cache akan berbeda secara signifikan antara arsitektur yang berbeda? Jika demikian, saya lebih tertarik pada ARM Cortex-A15.

EDIT

Ketika meneliti cara menonaktifkan cache, saya menemukan informasi tentang file "drop_caches" di / proc / sys / vm / dari dokumentasi kernel.org

"Menulis ini akan menyebabkan kernel menjatuhkan cache bersih, serta objek slab yang dapat direklamasi seperti gigi palsu dan inode. Setelah dijatuhkan, ingatan mereka menjadi bebas."

...

"File ini bukan sarana untuk mengontrol pertumbuhan berbagai cache kernel (inode, dentries, pagecache, dll ...) Objek-objek ini secara otomatis diperoleh kembali oleh kernel ketika memori diperlukan di tempat lain pada sistem."

Ini tidak seperti apa yang saya cari karena tidak hanya sepertinya ini tidak akan menonaktifkan cache, saya berpikir bahwa memori virtual berada dalam sistem operasi dan bukan pada perangkat keras. Tujuan saya adalah untuk menonaktifkan cache sehingga memori yang diinginkan harus dicari di tempat lain, seperti di dalam RAM.

EDIT

Untuk mengklarifikasi, saya mengerti apa yang akan menonaktifkan cache untuk sistem. Namun, ini adalah teknik umum yang digunakan dalam aplikasi luar angkasa untuk meningkatkan keandalan untuk aplikasi keamanan-kritis. Berikut adalah beberapa sumber yang mendokumentasikan fenomena ini:

Mengurangi kegagalan yang disebabkan oleh radiasi perangkat lunak yang tertanam melalui memori cache

Pedoman Pengujian Radiasi Tanah Mikroprosesor di Lingkungan Radiasi Ruang Angkasa

Bahkan ada buku dengan topik:

Efek Radiasi Pengion dalam Elektronik: Dari Kenangan ke Imager

AustinTronics
sumber
Jika Anda mencoba melakukan hal-hal seperti menonaktifkan cache, Anda melakukan pemrograman tertanam, jika Anda melakukan pemrograman tertanam, Anda mungkin harus menggunakan bahasa tertanam (C), dan saya tidak akan menggunakan OS. Sebagai tambahan, penonaktifan cache akan sangat memperlambat sistem Anda.
Sam
Saya memiliki cara lain untuk mempercepat sistem saya tanpa cache, tetapi saya tidak bisa mengatakan seberapa efektif metode ini sampai saya menonaktifkan cache dan menjalankan benchmark. Saya sangat menyadari C atau perakitan adalah pilihan yang lebih disukai untuk aplikasi yang tertanam. Namun, ada beberapa hal tingkat tinggi terjadi yang lebih masuk akal untuk dilakukan dengan Python. Akan lebih mudah jika Python memiliki dukungan untuk melakukan sesuatu seperti menonaktifkan cache untuk aplikasi khusus saya. Sedangkan untuk pengupasan OS, bare-metal bukan pilihan bagi saya sayangnya.
AustinTronics

Jawaban:

2

Anda tidak dapat melakukannya secara langsung dalam Python, karena Anda memerlukan modul kernel untuk melakukan itu (dan hak root untuk memuat modul itu).

Lihat http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 untuk mengetahui apa yang diperlukan untuk membatalkan cache L1 (tidak valid, tidak menonaktifkan).

Arsitektur CPU yang berbeda (misalnya x86 vs ARM) memerlukan kode perakitan yang berbeda (instruksi CPU) untuk menonaktifkan cache. Saya tidak yakin apakah kernel Linux memiliki kemungkinan untuk menonaktifkan cache L1 / L2 / L3 / L4 dan jika ada, saya percaya itu hanya akan digunakan secara internal untuk waktu yang singkat, karena CPU lambat tanpa cache ini.

Lihat Apakah ada cara untuk menonaktifkan cache CPU (L1 / L2) pada sistem Linux? untuk tautan tentang cara Anda dapat menonaktifkan cache pada sistem x86 / x64 (Anda perlu mengubah register cr0). Untuk ARM, periksa perilaku Cache yang dinonaktifkan .

Saya tidak yakin Anda benar-benar mengerti apa yang dilakukan cache CPU. Bisakah Anda jelaskan mengapa Anda ingin melumpuhkan kinerja sistem Anda?

tehnicaorg
sumber
Aplikasi ini adalah komputasi tertanam kinerja tinggi untuk dirgantara. Up-time lebih penting untuk aplikasi saya daripada kinerja. Saya tahu ini terdengar aneh, tetapi fenomena ini didokumentasikan dengan baik.
AustinTronics
Bagaimana Anda bisa memiliki aplikasi "kinerja tinggi" tanpa cache CPU? Apa hubungan cache dengan waktu aktif?
tehnicaorg
2
Saya seorang pengembang perangkat lunak dalam R&D, kami melakukan banyak hal gila. Maaf jika sepertinya saya tidak memberikan informasi atau tidak jelas sepanjang tanggapan saya, tetapi saya tidak dapat masuk sebanyak yang saya inginkan karena ini adalah informasi hak milik. Jika Anda tertarik dengan cache apa yang harus dilakukan dengan up-time dalam aplikasi aerospace, berikut adalah kertas JPL yang tersedia untuk umum . Di sini ada jurnal juga.
AustinTronics
1
Ironisnya, menonaktifkan cache L1 masuk akal, hari ini!
Dering Ø
4

Anda dapat melakukannya dengan sedikit kode ASM, lihat bab 11 dari Panduan Pemrograman Sistem Intel

11.5.3 Mencegah Caching

Untuk menonaktifkan cache L1, L2, dan L3 setelah diaktifkan dan menerima pengisian cache, lakukan langkah-langkah berikut: 1. Masuk ke mode cache no-fill. (Atur flag CD di register kontrol CR0 ke 1 dan flag NW ke 0. 2. Siram semua cache menggunakan instruksi WBINVD. 3. Nonaktifkan MTRRs dan atur tipe memori default ke uncached atau atur semua MTRR untuk tipe memori yang tidak di-cache. (lihat pembahasan pembahasan bidang TYPE dan bendera E di Bagian 11.11.2.1, “IA32_MTRR_DEF_TYPE MSR”).

Saya tidak mengetahui modul Python yang mengimplementasikan ini.

Gayus
sumber