Linux內核的冷熱緩存

来源:https://www.cnblogs.com/linhaostudy/archive/2019/01/25/10319818.html
-Advertisement-
Play Games

緩存為什麼會有冷熱? 究其原因,是因為對於記憶體的訪問,可能是CPU發起的,也可以是DMA設備發起的。 如果是CPU發起的,在CPU的硬體緩存中,就會保存相應的頁內容。如果這個頁本來沒有存在於硬體緩存中,那麼它的到來,勢必會將原本為其他的頁緩存的內容擠出硬體緩存。 但是,如果對於記憶體的訪問是由DMA設 ...


緩存為什麼會有冷熱?

究其原因,是因為對於記憶體的訪問,可能是CPU發起的,也可以是DMA設備發起的。

如果是CPU發起的,在CPU的硬體緩存中,就會保存相應的頁內容。如果這個頁本來沒有存在於硬體緩存中,那麼它的到來,勢必會將原本為其他的頁緩存的內容擠出硬體緩存。

但是,如果對於記憶體的訪問是由DMA設備發起的,那麼該頁不會被CPU訪問,就不需要在CPU的硬體緩存中進行緩存,也不會對已經緩存在硬體緩存中的頁內容造成傷害。

在Linux操作系統中,每個記憶體區域(Zone)都分配了hot cache和cold cache,hot cache用來緩存那些很可能被CPU的硬體緩存收納了的頁。

hot/cold cache只處理單頁分配的情況。

   1: /*
   2:  * Really, prep_compound_page() should be called from __rmqueue_bulk().  But
   3:  * we cheat by calling it from here, in the order > 0 path.  Saves a branch
   4:  * or two.
   5:  */
   6: static inline
   7: struct page *buffered_rmqueue(struct zone *preferred_zone,
   8:             struct zone *zone, int order, gfp_t gfp_flags,
   9:             int migratetype)
  10: {
  11:     unsigned long flags;
  12:     struct page *page;
  13:     int cold = !!(gfp_flags & __GFP_COLD);
  14:  
  15: again:
  16:     if (likely(order == 0)) {
  17:         struct per_cpu_pages *pcp;
  18:         struct list_head *list;
  19:  
  20:         local_irq_save(flags);
  21:         pcp = &this_cpu_ptr(zone->pageset)->pcp;
  22:         list = &pcp->lists[migratetype];
  23:         if (list_empty(list)) {
  24:             pcp->count += rmqueue_bulk(zone, 0,
  25:                     pcp->batch, list,
  26:                     migratetype, cold);
  27:             if (unlikely(list_empty(list)))
  28:                 goto failed;
  29:         }
  30:  
  31:         if (cold)
  32:             page = list_entry(list->prev, struct page, lru);
  33:         else
  34:             page = list_entry(list->next, struct page, lru);
  35:  
  36:         list_del(&page->lru);
  37:         pcp->count--;
  38:     } else {
  39:         if (unlikely(gfp_flags & __GFP_NOFAIL)) {
  40:             /*
  41:              * __GFP_NOFAIL is not to be used in new code.
  42:              *
  43:              * All __GFP_NOFAIL callers should be fixed so that they
  44:              * properly detect and handle allocation failures.
  45:              *
  46:              * We most definitely don't want callers attempting to
  47:              * allocate greater than order-1 page units with
  48:              * __GFP_NOFAIL.
  49:              */
  50:             WARN_ON_ONCE(order > 1);
  51:         }
  52:         spin_lock_irqsave(&zone->lock, flags);
  53:         page = __rmqueue(zone, order, migratetype);
  54:         spin_unlock(&zone->lock);
  55:         if (!page)
  56:             goto failed;
  57:         __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order));
  58:     }
  59:  
  60:     __count_zone_vm_events(PGALLOC, zone, 1 << order);
  61:     zone_statistics(preferred_zone, zone, gfp_flags);
  62:     local_irq_restore(flags);
  63:  
  64:     VM_BUG_ON(bad_range(zone, page));
  65:     if (prep_new_page(page, order, gfp_flags))
  66:         goto again;
  67:     return page;
  68:  
  69: failed:
  70:     local_irq_restore(flags);
  71:     return NULL;
  72: }

buffered_rmqueue用於從冷熱分配器中分配單頁的緩存頁。

如果gfp_flags中指定的__GFP_COLD,則從冷緩存中分配一頁,否則,從熱緩存中分配。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • sn.exe 和ilasm.exe 是系統自帶程式。如果顯示無此命令,可以從“我的電腦”直接搜索。將dll文件放入目錄下,用VS開發人員命令執行以下命令即可。(以Interop.Scripting.dll為例)1.創建一個新的隨機密鑰對:sn -k Interop.Scripting.snk2.反編 ...
  • ASP.NET Core 可以用作傳統的web服務、RESTful服務、遠程過程調用(RPC)服務、微服務,這歸功於它的跨平臺支持和輕量級設計 ...
  • CultureInfo類位於System.Globalization命名空間內,這個類和命名空間許多人都不是很熟悉,實際我們在寫程式寫都經常間接性的接觸這個類,當進行數字,日期時間,字元串匹配時,都會進行CultureInfo的操作,也就是說,也就是不同的CultureInfo下,這些操作的結果可能 ...
  • 一.概述 中間件(也叫中間件組件)是一種裝配到應用管道以處理請求和響應的軟體。 每個組件:(1)選擇是否將請求傳遞到管道中的下一個組件;(2)可以在管道中的下一個組件之前和之後執行工作。 請求委托用於生成請求管道。 請求委托會處理每個 HTTP 請求。使用以下方法配置請求委托:Run, Map, U ...
  • ??操作符:叫做空合併操作符,它會對左右兩個操作數進行判斷,如果左邊的數不為空,就返回左邊的數,否則返回右邊的數。 ?操作符:語法糖,表示可空類型,可空類型也是值類型,它是包含null值的值類型,可通過HasValue屬性來判斷可空類型是否有值,可通過GetValueDefault()方法來返回預設 ...
  • 問題:前臺checkbox控制項,選中值為1,不選值為0; 解決方案: 插入一行 <input type="hidden" name="RemberPwd" value="0"/> name值和checkbox值一致,當不選中該覆選框時,asp會預設取同name的控制項值。後臺通過response.fo ...
  • 超級用戶: root賬號通常用於系統的維護和管理,具有所有訪問許可權,一般不推薦直接使用root賬號登錄系統, 在Linux系統安裝過程中,系統會自動創建一個 用戶賬號,這個預設的用戶就稱為“標準 用戶” sudo: su 是 substitute user的縮寫,表示使用另一個用戶的身份 sudo命 ...
  • 用戶是Linux系統工作中重要的一環,用戶管理包括 用戶 和 組 管理 在Linux系統中,不論是由本機或遠程登錄系統,每個系統都必須擁有一個賬號,並且對不同的系統資源擁有不同的使用許可權 在Linux中,可以指定每一個用戶針對不同的文件或目錄的不同許可權 為方便管理,提出了組的概念,不需要為每個人設置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...