Làm cách nào để tắt bộ đệm L1 và L2 của bộ xử lý?


10

Có thể tắt bộ đệm L1 và / hoặc L2 trên Ubuntu 14.04 (tốt nhất là bằng ngôn ngữ cấp cao hơn như Python) không? Nếu vậy thì thế nào?

Ngoài ra, việc vô hiệu hóa bộ đệm sẽ khác nhau đáng kể giữa các kiến ​​trúc khác nhau? Nếu vậy, tôi quan tâm hơn đến ARM Cortex-A15.

BIÊN TẬP

Trong khi nghiên cứu cách vô hiệu hóa bộ đệm, tôi đã tìm hiểu về tệp "drop_caches" trong / Proc / sys / vm / từ tài liệu kernel.org

"Viết thư này sẽ khiến kernel bỏ bộ nhớ cache sạch, cũng như các đối tượng phiến có thể lấy lại được như răng và inodes. Sau khi thả, bộ nhớ của chúng sẽ tự do."

...

"Tập tin này không phải là một phương tiện để kiểm soát sự phát triển của các bộ đệm hạt nhân khác nhau (inodes, dentries, pagecache, v.v.) Những đối tượng này được kernel tự động lấy lại khi cần bộ nhớ ở nơi khác trên hệ thống."

Điều này dường như không giống như những gì tôi đang tìm kiếm vì không chỉ có vẻ như nó sẽ vô hiệu hóa bộ đệm, tôi nghĩ rằng bộ nhớ ảo nằm trong hệ điều hành chứ không phải trên phần cứng. Mục tiêu của tôi là vô hiệu hóa bộ đệm để bộ nhớ mong muốn phải được tìm ở nơi khác, chẳng hạn như trong RAM.

BIÊN TẬP

Để làm rõ, tôi hiểu việc vô hiệu hóa bộ đệm sẽ làm gì với hệ thống. Tuy nhiên, đây là một kỹ thuật phổ biến được sử dụng trong các ứng dụng không gian để tăng độ tin cậy cho các ứng dụng quan trọng về an toàn. Dưới đây là một số tài nguyên ghi lại hiện tượng này:

Giảm các lỗi phần mềm nhúng do bức xạ thông qua bộ nhớ cache

Hướng dẫn kiểm tra bức xạ mặt đất của bộ vi xử lý trong môi trường bức xạ không gian

Thậm chí có những cuốn sách về chủ đề này:

Hiệu ứng bức xạ ion hóa trong điện tử: Từ ký ức đến hình ảnh


Nếu bạn đang cố gắng thực hiện những việc như vô hiệu hóa bộ đệm, bạn đang thực hiện lập trình nhúng, nếu bạn đang lập trình nhúng, có lẽ bạn nên sử dụng ngôn ngữ nhúng (C) và tôi sẽ không sử dụng HĐH. Vì việc vô hiệu hóa bộ nhớ cache sẽ làm chậm hệ thống của bạn.
Sam

Tôi có các cách khác để tăng tốc hệ thống của mình mà không cần bộ đệm, nhưng tôi không thể biết hiệu quả của các phương pháp này cho đến khi tôi vô hiệu hóa bộ đệm và chạy điểm chuẩn. Tôi rất biết C hoặc lắp ráp là lựa chọn ưa thích cho các ứng dụng nhúng. Tuy nhiên, có một số điều cấp cao xảy ra có ý nghĩa hơn đối với Python. Sẽ thuận tiện hơn nếu Python có hỗ trợ làm việc gì đó như vô hiệu hóa bộ đệm cho ứng dụng cụ thể của tôi. Đối với việc tước bỏ hệ điều hành, kim loại trần không phải là một lựa chọn cho tôi không may.
AustinTICS

Câu trả lời:


2

Bạn không thể làm điều đó trực tiếp trong Python, vì bạn cần một mô-đun hạt nhân để làm điều đó (và quyền root để tải mô-đun đó).

Xem http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 để biết những gì cần thiết để vô hiệu hóa bộ đệm L1 (không hợp lệ, không vô hiệu hóa).

Các kiến ​​trúc CPU khác nhau (ví dụ x86 so với ARM) yêu cầu mã lắp ráp khác nhau (hướng dẫn CPU) để tắt bộ đệm. Tôi không chắc liệu nhân Linux có khả năng vô hiệu hóa bộ đệm L1 / L2 / L3 / L4 hay không và nếu có, tôi tin rằng nó sẽ chỉ được sử dụng nội bộ trong một khoảng thời gian ngắn, vì CPU chậm không có những bộ đệm này

Xem Có cách nào để tắt bộ đệm CPU (L1 / L2) trên hệ thống Linux không? cho một liên kết về cách bạn có thể vô hiệu hóa bộ đệm trên hệ thống x86 / x64 (bạn cần thay đổi thanh ghi cr0). Đối với ARM kiểm tra Cache hành vi bị vô hiệu hóa .

Tôi không chắc chắn rằng bạn hoàn toàn hiểu những gì bộ nhớ CPU làm. Bạn có thể giải thích lý do tại sao bạn muốn làm tê liệt hiệu suất của hệ thống của bạn?


Ứng dụng này là máy tính nhúng hiệu năng cao cho ngành hàng không vũ trụ. Thời gian hoạt động quan trọng đối với ứng dụng của tôi hơn hiệu năng. Tôi biết điều này nghe có vẻ lạ, nhưng hiện tượng này được ghi lại rõ ràng.
AustinTICS 18/10/2016

Làm thế nào bạn có thể có một ứng dụng "hiệu suất cao" mà không có bộ đệm CPU? Cache phải làm gì với thời gian hoạt động?
tehnicaorg

2
Tôi là một nhà phát triển phần mềm trong R & D, chúng tôi làm rất nhiều điều điên rồ. Xin lỗi nếu có vẻ như tôi bỏ thông tin hoặc mơ hồ trong các phản hồi của mình, nhưng tôi không thể truy cập nhiều như tôi muốn vì đó là thông tin hữu ích. Nếu bạn quan tâm bộ nhớ cache phải làm gì với thời gian hoạt động trong các ứng dụng hàng không vũ trụ, thì đây là một bài báo JPL có sẵn công khai . Đây là một bài báo trên đó là tốt.
AustinTICS

1
Trớ trêu thay, việc vô hiệu hóa bộ đệm L1 có ý nghĩa, ngay hôm nay!
Đổ chuông

4

Bạn có thể thực hiện điều này với một mã ASM nhỏ, xem chương 11 của Hướng dẫn lập trình hệ thống Intel

11.5.3 Ngăn chặn bộ nhớ đệm

Để vô hiệu hóa bộ đệm L1, L2 và L3 sau khi chúng được kích hoạt và đã nhận được bộ đệm đầy bộ đệm, hãy thực hiện các bước sau: 1. Nhập chế độ bộ đệm không điền. (Đặt cờ CD trong thanh ghi điều khiển CR0 thành 1 và cờ NW thành 0. 2. Xóa tất cả bộ đệm bằng lệnh WBINVD. 3. Tắt MTRR và đặt loại bộ nhớ mặc định thành không bị chặn hoặc đặt tất cả MTRR cho loại bộ nhớ không bị chặn (xem phần thảo luận về cuộc thảo luận về trường TYPE và cờ E trong Phần 11.11.2.1, IA IA32_MTRR_DEF_TYPE MSR tựa).

Tôi không biết về một mô-đun Python thực hiện điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.