Linuxカーネルのメモリは通常unswappable(Do Kernel pages get swapped out?)です。ただし、メモリをスワップアウトできるようにすると便利なことがあります。スワップ可能なメモリをLinuxカーネル内に明示的に割り当てることは可能ですか?私が考えた1つの方法は、ユーザー空間のプロセスを作成し、そのメモリを使用することでした。もっと良いものはありますか?Linuxカーネルにスワップ可能なメモリを割り当てよう
答えて
shm
共有メモリファイルシステムでファイルを作成できます。
const char *name = "example";
loff_t size = PAGE_SIZE;
unsigned long flags = 0;
struct file *filp = shmem_file_setup(name, size, flags);
/* assert(!IS_ERR(filp)); */
ファイルは実際にリンクされていないため、名前は表示されません。フラグには、ページが割り当てられたときのアカウンティングの代わりに、アカウンティングをスキップするためのVM_NORESERVE
が含まれている場合があります。今度はshmem
ファイルがあります。あなたはそうのようなページをマップすることができます。ページが割り当てられる方法を指定することもshmem_read_mapping_page_gfp(..., gfp_t)
あり
struct address_space *mapping = filp->f_mapping;
pgoff_t index = 0;
struct page *p = shmem_read_mapping_page(mapping, index);
/* assert(!IS_ERR(filp)); */
void *data = page_to_virt(p);
memset(data, 0, PAGE_SIZE);
。あなたがそれを完了したときにページを戻すことを忘れないでください。
put_page(p);
ファイルと一緒に。
fput(filp);
これはまさに私が望むようです。ありがとうございました! – qbt937
page_to_virtを使用すると、ここではダイレクトマップでアーチに作用することがありますが、完全に正当化されていません。するべきことはkmap_atomicです。本当に問題はOPがこれを望んでいることですが、もっと重要なことです。 –
- 1. CUDAカーネル内のメモリ割り当て
- 2. Linuxでのメモリ割り当て
- 3. カーネルにキャッシュ不可の物理メモリを割り当てる方法は?
- 4. メモリをmalloc()で割り当てよう
- 5. 可変メモリ割り当てはどのように機能しますか?
- 6. __device/global__内のメモリを動的に割り当てるCUDAカーネル
- 7. カーネル内のcudaMalloc割り当てメモリを削除する
- 8. Linuxカーネルでソケットメモリ割り当てを増やす方法
- 9. メモリ割り当て
- 10. 割り当てメモリ
- 11. 割り当てメモリ
- 12. メモリ割り当て
- 13. メモリ割り当て
- 14. 割り当てメモリ**
- 15. コンパイルされた実行可能メモリ割り当ての変更
- 16. Linuxでのポインタ計算カーネル割り当ての実装
- 17. Linuxでのメモリ割り当てはPAGE_SIZEよりもどのように小さくなりますか?
- 18. 動的割り当て構造のスワップ
- 19. メモリ割り当てを伴う再帰
- 20. メモリ割り当てプロファイリング中にメモリ割り当てが増加し続ける
- 21. Linuxカーネルのデーモンプロセスにpid(プロセスID)がどのように割り当てられていますか?
- 22. Dalvikのメモリ割り当て
- 23. Magentoのメモリ割り当て
- 24. プロセスのメモリ割り当て
- 25. メモリ割り当てとループ
- 26. GtkTreeView treestoreメモリ割り当て
- 27. メモリの割り当て(C)
- 28. メモリ割り当て構造
- 29. iphoneのメモリ割り当て
- 30. MySqlメモリ割り当て
あなたのユースケースを説明する必要があります –