Как интерпретировать LLC-Load-Misses из перф статистики - PullRequest
0 голосов
/ 02 сентября 2018

Я разместил вопрос в аналогичном контексте более здесь

После выяснения некоторых проблем я устранил дрожание.

Я опишу свой сценарий.

Параметры загрузки моего ядра выглядят так:

nmi_watchdog=0 intel_idle.max_cstate=0 processr.max_cstate=0 nohz_full=7-11 isolcpus=7-11 mce=off rcu_nocbs=7-11 nosoftlockup cpuidle.off=1 powersave=off nonmi_ipi nnwatchdog

У меня есть модуль ядра, который отвечает за отправку некоторых пакетов с заданным интервалом (здесь я отправляю каждые 1 мс).

  • У меня есть генератор пакетов, прикрепленный к CPU 9
  • У меня есть модуль ядра (или Kthread), прикрепленный к CPU 8
  • Я установил привязку IRQ моей очереди rx к CPU 10

Таким образом, я выполнил следующую команду, чтобы получить статистику перфоратора

sudo ./perf stat -a -d -I 1000 --cpu=8 taskset -c 9 ./test.sh

Ниже я опубликовал отрывок из полученных результатов. С помощью приведенной выше команды я пытаюсь профилировать события моего CPU Core 8.

Таким образом, эти компоненты не должны мешать друг другу.

     5.002780500        1000.296809      cpu-clock (msec)          #    1.000 CPUs utilized
     5.002780500                  0      context-switches          #    0.000 K/sec
     5.002780500                  0      cpu-migrations            #    0.000 K/sec
     5.002780500                  0      page-faults               #    0.000 K/sec
     5.002780500             88,531      cycles                    #    0.000 GHz
     5.002780500             29,738      instructions              #    0.33  insn per cycle
     5.002780500              6,639      branches                  #    0.007 M/sec
     5.002780500                118      branch-misses             #    1.72% of all branches
     5.002780500              7,677      L1-dcache-loads           #    0.008 M/sec
     5.002780500                318      L1-dcache-load-misses     #    4.04% of all L1-dcache hits
     5.002780500                196      LLC-loads                 #    0.196 K/sec
     5.002780500                169      LLC-load-misses           #   84.08% of all LL-cache hits
Round 0
     6.330091222        1327.302728      cpu-clock (msec)          #    1.327 CPUs utilized
     6.330091222                  1      context-switches          #    0.001 K/sec
     6.330091222                  1      cpu-migrations            #    0.001 K/sec
     6.330091222                  0      page-faults               #    0.000 K/sec
     6.330091222      2,401,268,484      cycles                    #    2.276 GHz
     6.330091222      1,700,438,285      instructions              #    4.25  insn per cycle
     6.330091222        400,075,413      branches                  #  379.216 M/sec
     6.330091222              9,587      branch-misses             #    0.01% of all branches
     6.330091222        300,135,708      L1-dcache-loads           #  284.487 M/sec
     6.330091222             12,520      L1-dcache-load-misses     #    0.03% of all L1-dcache hits
     6.330091222              6,865      LLC-loads                 #    0.007 M/sec
     6.330091222              5,177      LLC-load-misses           #  394.69% of all LL-cache hits
Round 1
     7.343309295        1013.219838      cpu-clock (msec)          #    1.013 CPUs utilized
     7.343309295                  2      context-switches          #    0.002 K/sec
     7.343309295                  1      cpu-migrations            #    0.001 K/sec
     7.343309295                  0      page-faults               #    0.000 K/sec
     7.343309295      2,401,313,050      cycles                    #    2.289 GHz
     7.343309295      1,700,446,830      instructions              #    2.48  insn per cycle
     7.343309295        400,076,590      branches                  #  381.375 M/sec
     7.343309295              9,722      branch-misses             #    0.01% of all branches
     7.343309295        300,137,590      L1-dcache-loads           #  286.108 M/sec
     7.343309295             12,429      L1-dcache-load-misses     #    0.01% of all L1-dcache hits
     7.343309295              6,787      LLC-loads                 #    0.006 M/sec
     7.343309295              5,167      LLC-load-misses           #  246.77% of all LL-cache hits

Слова «Round« x »» означают, что мы отправляем 1 пакет каждые мс, то есть 1000 пакетов каждые мс, таким образом, каждый раунд.

Из вышеприведенного дампа я не смог понять, что такое LLC-load-misses. Или, если быть точным, я не могу найти способ углубиться в источник этой проблемы.

Любые материалы по этому вопросу были бы очень полезны.

С уважением, Kushal.

1 Ответ

0 голосов
/ 02 сентября 2018

Число LLC-load-misses следует интерпретировать как количество нагрузок, которые отсутствуют в кэше последнего уровня (обычно L3 для современных чипов Intel) за измеренный интервал.

На уровне, который измеряется, я полагаю, что нагрузки, приходящиеся на одну и ту же строку кэша, уже были "объединены" буферами заполнения строки: если вы получаете доступ к нескольким значениям, все одна и та же строка кэша, которая не представлена ​​в LLC, все они «пропускают» с точки зрения вашего процесса (использование любого из этих значений будет ожидать полной продолжительности промаха), но я считаю, что это только один промах для счетчика LLC-load-misses.

...