add_to_swapを使用して特定のページを交換しています。しかし、成功()を返すこの関数を呼び出した後でも、ページテーブルエントリpte_tがまだ存在することを示すシステムが存在します。 add_to_swapはページをスワップするための適切な関数ですか、あるいは私が見なければならないLINUXカーネルの他の関数がありますか? 私はKSWAPDモジュールを見てきましたが、特定のページを交換するためにどの機能が使用されているのかわかりませんでした。LINUX KERNELで特定のページを交換する
答えて
add_to_swap
はスペースを割り当てるだけで、ページをスワップしません。 try_to_unmap
とだから、スワップのスペースを割り当てた後、ページはプロセスのVM(仮想メモリ)にすべてのマッピングのためにチェックされている
http://lxr.free-electrons.com/source/mm/vmscan.c?v=4.4#L1043
903 while (!list_empty(page_list)) {
1043 /*
1044 * Anonymous process memory has backing store?
1045 * Try to allocate it some swap space here.
1046 */
1047 if (PageAnon(page) && !PageSwapCache(page)) {
1050 if (!add_to_swap(page, page_list))
1051 goto activate_locked;
1052 may_enter_fs = 1;
1054 /* Adding to swap updated mapping */
1055 mapping = page_mapping(page);
1056 }
1058 /*
1059 * The page is mapped into the page tables of one or more
1060 * processes. Try to unmap it here.
1061 */
1062 if (page_mapped(page) && mapping) {
1063 switch (try_to_unmap(page,
1064 ttu_flags|TTU_BATCH_FLUSH))
1076 if (PageDirty(page)) {
1078 * Only kswapd can writeback filesystem pages to
1109 try_to_unmap_flush_dirty();
1110 switch (pageout(page, mapping, sc)) {
1136 * If the page has buffers, try to free the buffer mappings
1177 if (!mapping || !__remove_mapping(mapping, page, true))
1178 goto keep_locked;
1180 /*
1181 * At this point, we have no other references and there is
1182 * no way to pick any more up (removed from LRU, removed
1183 * from pagecache). Can use non-atomic bitops now (and
1184 * we obviously don't have to worry about waking up a process
1185 * waiting on the page lock, because there are no references.
1186 */
1187 __clear_page_locked(page);
、マップされていない:機能、which calls add_to_swap
、mm/vmscan.c
のshrink_page_list
をチェック書き戻し(ダーティページ、アプリケーションによって変更されたページ、まだFSに保存されていないページ)をチェックし、バッファーをチェックし、再度マッピングをチェックしました...スワップアウトしようとしているページのタイプは?スワップするページの実際の書込みがどこで行われているのかわからない...恐らくpageout
はmapping
のwritepage
メソッドを呼び出すためです。のみ変更された(あるいは汚れ)ページがスワップファイルに保存されている - http://www.tldp.org/LDP/tlk/mm/memory.html
スワップキャッシュ:
pageout
のソースはhttp://lxr.free-electrons.com/source/mm/vmscan.c?v=4.4#L530531 * pageout is called by shrink_page_list() for each dirty page. 532 * Calls ->writepage(). 534 static pageout_t pageout(struct page *page, struct address_space *mapping, 535 struct scan_control *sc) 574 if (clear_page_dirty_for_io(page)) { 584 SetPageReclaim(page); 585 res = mapping->a_ops->writepage(page, &wbc); 597 trace_mm_vmscan_writepage(page, trace_reclaim_flags(page)); 598 inc_zone_page_state(page, NR_VMSCAN_WRITE);
は、我々はまた、スワップおよびLinuxミリメートルが何であるかを理解する必要がありますと言います。
彼らはその後、スワップファイルにページがページとしてスワップファイルにそれを書く必要が ありませんスワップアウトされ、次回の に書き込まれた後に、これらのページが変更されない限りは、すでにあります スワップファイル。その代わりに、ページを単に破棄することができます。 のスワップシステムでは、多くの不要な高価なディスク 操作が節約されます。
はまた、 "3.8スワップアウトと廃棄ページの" http://www.tldp.org/LDP/tlk/mm/memory.html
のセクションをチェック- 1. linux kernel/Documentationの特定のプログラムをコンパイルする
- 2. Linux:メモリ内のページを特定する
- 3. 特定のサブパーティションのパーティション交換ロード
- 4. 特定の配列要素を交換する際の問題
- 5. は、文字列の数を特定し、交換する - VBA
- 6. ファイル形式にpreg_replaceでのみ特定のグループを交換し
- 7. 交換用のControlTemplateを交換する
- 8. Linuxでドライバを一時的に交換する方法は?
- 9. LinuxのFastaQファイルに特定のヌクレオチドを置換する
- 10. 新しいデータフレームと、データフレーム内の特定の値を交換
- 11. armv7m kernel kernel-4.4.5がcalibrate_delay_converge()でハングする
- 12. 特定の単語の最初の出現後のsedと交換 - のLinux/Ubuntuの
- 13. onMouseOverイメージの交換UL内のPHPページ
- 14. のJavascript/CSSメニュー特定の領域の内容を交換する
- 15. ドロップダウンメニューを使用してCSSスタイルシートを交換する特定のJavaScript関数
- 16. なぜLinux kernelのアップグレード後にvmware kernel moduleを再コンパイルする必要がありますか?
- 17. Cross Compiled Linux Kernelをデバッグする方法は?
- 18. 特定のワードプレスのページのロゴをCSSと置換する
- 19. Linux特定のファイルをコピー
- 20. サービス担当者のコントローラ交換ページを更新する
- 21. opencartで特定の条件で特定のページにアクセスする
- 22. 交換 - 設定したメールボックス
- 23. 特定のテンプレートでページをループする
- 24. linux kernel 2.6.25で従来のリンカ(libc5を使用)が失敗する
- 25. 特定の番号の後に交換しないでください
- 26. ページをリロードせずにテーマスタイルシートを交換するエレガントな方法
- 27. ページ<ObjectEntity>とページ<ObjectDTO>とのデータを交換する
- 28. 対応するdentryオブジェクトのファイルオブジェクトを取得する方法| linux kernel
- 29. linux kernel - pte_xxx()APIがモジュールプログラミングで動作していません
- 30. ページをリフレッシュせずにHTMLページとJavaサーブレットとの間でデータを交換