<em id="5xgjh"></em>
    <nav id="5xgjh"><code id="5xgjh"></code></nav>
  1. <sub id="5xgjh"><address id="5xgjh"></address></sub>
    <form id="5xgjh"></form>
    <sub id="5xgjh"><address id="5xgjh"></address></sub>
      <sub id="5xgjh"></sub>
    1. <nav id="5xgjh"></nav>

        首頁 > 軟件 > 正文
        分享到:

        Linux 6.2 今日合并了來自華為鄭磊代碼:核心內核功能的速度提高了 715 倍

        時間:2022-12-14 23:25:56 來源: 評論:0 點擊:0

          12 月 14 日消息:Linux 6.2 今日合并了來自華為鄭磊(Zhen Lei,音譯)的代碼,將核心內核功能的速度提高了 715 倍。

          在合并代碼模塊介紹中寫道:“得益于 Zhen Lei 的代碼,Tux(Linux 的吉祥物,這里指 Linux)在 kallsyms_lookup_name () 平均查找性能提高了 715 倍,將我們的舊實現從 O (n) 升級到 O (log (n)),同時還保留了 / proc / kallsyms 上的舊實現支持”。

          了解到,kallsyms_lookup_name () 函數用于根據一個符號的名稱查詢其地址,并可用于內核符號表內任何符號的查詢。

          華為的 Zhen Lei 在之前的補丁貼中描述了對 kallsyms_lookup_name 的優化:

          目前,為了搜索一個符號,我們需要將 'kallsyms_names' 中的符號逐一展開,然后使用展開后的字符串進行比較。這是 O (n)。

          如果我們像地址一樣將名字按升序排序,我們也可以使用二進制搜索。而這就是 O (log (n))。

          為了不改變“/proc/ kallsyms”的實現,表 kallsyms_names [] 仍然以升序與地址一一對應的方式存儲。

          增加數組 kallsyms_seqs_of_names [],它以排序后的名字的序列號為索引,對應的內容是排序后的地址的序列號。

          例如,假設 NameX 在數組 kallsyms_seqs_of_names [] 中的索引是 'i',kallsyms_seqs_of_names [i] 的內容是 'k',那么 NameX 的對應地址是 kallsyms_addresses [k]。kallsyms_names [] 中的偏移是 get_symbol_offset (k)。

          注意,內存使用量將增加 (4 * kallsyms_num_syms) 字節,接下來的兩個補丁將減少 (1 * kallsyms_num_syms) 字節并正確處理 CONFIG_LTO_CLANG=y 的情況。

          性能測試結果(在 x86 平臺上):

          之前:

          min=234. max=10364402. avg=5206926

          min=267. max=11168517. avg=5207587

          之后:

          min=1016. max=90894. avg=7272

          min=1014. max=93470. avg=7293

          kallsyms_lookup_name () 的平均查詢性能提高了 715 倍。這是 kallsyms_lookup_name 一次重大改進,也是 Linux 6.2 的圣誕禮物。

        美女精品一区二区