簡體   English   中英

大的物理連續存儲區

[英]Large physically contiguous memory area

對於我的碩士 論文中,我必須對Intel內部在CPU中使用的哈希函數進行反向工程,以在Sandy Bridge和更新一代中的Last Level Cache片之間分配數據。 為此,我正在Linux中開發一個應用程序,該應用程序需要一個物理上連續的內存區域才能進行測試。 想法是從該區域讀取數據,以便對其進行緩存,探查是否已清除較舊的數據(通過延遲措施或LLC未命中計數器),以查找沖突的內存地址,並最終通過比較這些沖突的地址來發現哈希函數。 研究人員已經在Windows中使用了相同的步驟,並且證明該步驟有效。

為此,我需要分配一個必須大(64 MB或更大)且完全可緩存的區域,因此在TLB中沒有DMA友好選項。 如何執行此分配?

為了完全控制分配(即,它實際上在物理上是連續的),我的想法是編寫一個Linux模塊,從用戶空間中導出設備並mmap(),但是我不知道如何分配這么多內核中的連續內存。 我聽說過Linux連續內存分配器(CMA),但是我不知道它是如何工作的

應用程序看不到物理內存, 進程虛擬內存 有一些地址空間 閱讀有關MMU的信息 (在虛擬空間中什么是連續的,在物理上可能並不是真正連續的,反之亦然)

您可能想使用mlock(2)鎖定一些內存

但是您的應用程序將被調度,並且其他進程(或調度的任務)將弄臟您的CPU緩存 另請參見sched_setaffinity(2)

(甚至可能搶占了內核代碼)

有關內核新手的頁面,有關內存分配的一些想法。 但是get_free_pages的最大值看起來像8MiB。 (也許這是編譯時的約束?)

由於這是完全自定義的,因此您可以探索linux內核的mem= boot參數。 這將限制使用的內存量,並且您可以在沒有任何人知道的情況下共享剩余的所有內存。 哎呀,如果您啟動一個busybox系統,您可能可以執行mem=32M ,但是如果您不啟動GUI,那么即使mem=256M應該可以工作。

您還將需要查看Offline Scheduler (和此處 )。 它可以從Linux中“拔出” CPU,因此您可以完全控制在其上運行的所有代碼。 (其中的某些部分已經在主線內核中,也許全部都在。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM