Как я могу профилировать попадания TLB и промахи TLB в Ubuntu - PullRequest
2 голосов
/ 15 февраля 2012

Я написал простую программу на C ++, использующую цикл for для печати чисел от 1 до 100. Я хочу найти количество попаданий и пропусков TLB, происходящих для конкретной программы во время работы.Есть ли возможность получить эти данные?

Я использую Ubuntu.Я использовал перфорированный инструмент.Но это дает разные результаты в разное время.Я очень озадачен тем, какая часть моего кода приводит к такому огромному количеству хитов TLB, пропусков TLB и кешей.

Конечно, могут быть и другие процессы, работающие одновременно, такие как Ubuntu GUI.Но включает ли этот результат и этот процесс?я использовал команду: perf stat -e dTLB-load -e счетчик статистики dTPerformance для './hellocc':

результат: первый раз--

       909,822 dTLB-loads                                                  
         2,023 dTLB-misses               #    0.22% of all dTLB cache hits 
         4,512 cache-misses                                                

   0.006821182 seconds time elapsed

LB-misses ./hellocc

результат: Второй раз - статистика счетчика производительности для './hellocc':

       907,810 dTLB-loads                                                  
         2,045 dTLB-misses               #    0.23% of all dTLB cache hits 
         4,533 cache-misses                                                

   0.006780635 seconds time elapsed

Мой простой код:

#include <iostream>    
using namespace std;    
int main
{    
    cout << "hello" << "\n";    
    for(int i=1; i <= 100; i = i + 1)    
        cout<< i << "\t" ;    
    return 0;    
}

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Один из способов, которым вы могли бы смоделировать это, - использовать cachegrind , часть valgrind.

Cachegrind моделирует, как ваша программа взаимодействует с иерархией кэша компьютера и (необязательно) предиктором ветвления. Он моделирует машину с независимыми кэшами команд и данных первого уровня (I1 и D1), подкрепленными унифицированным кешем второго уровня (L2). Это точно соответствует конфигурации многих современных машин.

Хотя это не ваше аппаратное обеспечение, к которому, я думаю, вы не сможете добраться, это хороший помощник.

2 голосов
/ 15 февраля 2012

Поведение кэша вашей программы зависит от того, что еще происходит в вашей системе в данный момент.

В системе Linux работает много процессов, таких как X-сервер и диспетчер окон, терминал, ваш редактор, различные процессы-демоны и все, что у вас работает (например, веб-браузер).

В зависимости от капризов планировщика и требований, которые эти другие программы предъявляют к вашей системе, данные вашей программы могут или не могут оставаться в кэше (планировщик может даже полностью вывести страницу вашего процесса в файл подкачки), поэтому число количество пропущенных кешей зависит от запущенных приложений.

...