- 論壇徽章:
- 0
|
最近在編寫一個(gè)矩陣乘的驅(qū)動(dòng),由于矩陣很大(140M),所以我們事先在內(nèi)存里分配了512M的空間(作為保留內(nèi)存),使用mmap()函數(shù)映射到用戶空間。內(nèi)核中調(diào)用的io_remap_pfn_range來(lái)建立映射關(guān)系,同時(shí)設(shè)置為nocache。在這種情況下矩陣執(zhí)行正確。
由于部分矩陣需要轉(zhuǎn)置(矩陣直接在映射的這片空間),關(guān)閉了cache導(dǎo)致速度很慢,現(xiàn)在使用remap_pfn_range映射,打開(kāi)cache,結(jié)果矩陣執(zhí)行不正確,所以猜測(cè)由于cache的存在,導(dǎo)致數(shù)據(jù)沒(méi)有寫入到物理地址(矩陣乘讀數(shù)寫數(shù)都用連續(xù)的物理地址),最終導(dǎo)致結(jié)果不正確。
現(xiàn)在使用過(guò)msync()、__clear_cache()、flush_cache_all()都沒(méi)有實(shí)現(xiàn)cache中的數(shù)據(jù)寫入物理地址,是否操作系統(tǒng)不管這部分保留內(nèi)存了?還是我cache使用有問(wèn)題?
望不吝賜教! |
|