Logo

Linux 核心

6.16.0-rc4

快速搜尋

目錄

  • 開發流程
  • 提交補丁
  • 行為準則
  • 維護者手冊
  • 所有開發流程文件
  • 核心 API
  • 驅動 API
  • 子系統
    • 核心子系統
    • 人機介面
    • 網路介面
      • 網路
      • NetLabel
      • InfiniBand
      • ISDN
      • MHI
    • 儲存介面
    • 其他子系統
  • 鎖定
  • 許可規則
  • 編寫文件
  • 開發工具
  • 測試指南
  • 駭客指南
  • 追蹤
  • 故障注入
  • 即時補丁
  • Rust
  • 管理
  • 構建系統
  • 報告問題
  • 使用者空間工具
  • 使用者空間 API
  • 韌體
  • 韌體和裝置樹
  • CPU 架構
  • 未分類文件
  • 翻譯

本頁

  • 顯示原始碼

面向 netlink 使用者的通用網路統計¶

統計計數器被分組到結構體中

結構體

TLV 型別

描述

gnet_stats_basic

TCA_STATS_BASIC

基本統計資訊

gnet_stats_rate_est

TCA_STATS_RATE_EST

速率估計器

gnet_stats_queue

TCA_STATS_QUEUE

佇列統計資訊

無

TCA_STATS_APP

應用程式特定

收集:¶

宣告您需要的統計結構體

struct mystruct {
        struct gnet_stats_basic bstats;
        struct gnet_stats_queue qstats;
        ...
};

更新統計資訊,僅在 dequeue() 方法中,(當擁有 qdisc->running 時)

mystruct->tstats.packet++;
mystruct->qstats.backlog += skb->pkt_len;

匯出到使用者空間(轉儲):¶

my_dumping_routine(struct sk_buff *skb, ...)
{
        struct gnet_dump dump;

        if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump,
                                TCA_PAD) < 0)
                goto rtattr_failure;

        if (gnet_stats_copy_basic(&dump, &mystruct->bstats) < 0 ||
            gnet_stats_copy_queue(&dump, &mystruct->qstats) < 0 ||
                gnet_stats_copy_app(&dump, &xstats, sizeof(xstats)) < 0)
                goto rtattr_failure;

        if (gnet_stats_finish_copy(&dump) < 0)
                goto rtattr_failure;
        ...
}

TCA_STATS/TCA_XSTATS 向後相容性:¶

struct tc_stats 和 xstats 的先前使用者可以透過呼叫相容性包裝器來保持向後相容性,以繼續提供現有的 TLV 型別

my_dumping_routine(struct sk_buff *skb, ...)
{
    if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS,
                                    TCA_XSTATS, &mystruct->lock, &dump,
                                    TCA_PAD) < 0)
                goto rtattr_failure;
        ...
}

一個 struct tc_stats 將在 gnet_stats_copy_* 呼叫期間被填充並附加到 skb。 如果呼叫了 gnet_stats_copy_app,則提供 TCA_XSTATS。

鎖定:¶

在寫入之前獲取鎖,並在所有統計資訊都寫入後釋放鎖。 在發生錯誤時總是釋放鎖。 您負責確保鎖已初始化。

速率估計器:¶

  1. 準備一個估計器屬性。 最有可能的這將在使用者空間。 這個TLV的值應該包含一個 tc_estimator 結構。 通常,這樣的 TLV 需要 32 位對齊,因此需要適當地設定長度等等。 估計器間隔和 ewma 日誌需要轉換為適當的值。 建議使用 tc_estimator.c::tc_setup_estimator() 作為轉換例程。 它做了一些聰明的事情。 它接受一個以微秒為單位的時間間隔,一個同樣以微秒為單位的時間常數和一個要填充的 struct tc_estimator。 返回的 tc_estimator 可以傳輸到核心。 將這樣的結構以型別為 TCA_RATE 的 TLV 傳輸到核心中的程式碼。

在核心中設定時

  1. 確保您首先設定了基本統計資訊和速率統計資訊。

  2. 確保您已初始化用於設定此類統計資訊的統計資訊鎖。

  3. 現在初始化一個新的估計器

    int ret = gen_new_estimator(my_basicstats,my_rate_est_stats,
        mystats_lock, attr_with_tcestimator_struct);
    
    if ret == 0
        success
    else
        failed
    

從現在開始,每次轉儲 my_rate_est_stats 時,它都會包含最新的資訊。

完成後,呼叫 gen_kill_estimator(my_basicstats, my_rate_est_stats)。 確保在進行此呼叫時 my_basicstats 和 my_rate_est_stats 仍然有效(即仍然存在)。

作者:¶

  • Thomas Graf <tgraf@suug.ch>

  • Jamal Hadi Salim <hadi@cyberus.ca>

©核心開發社群。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 驅動 | 頁面原始碼