Вы находитесь на странице: 1из 117

JOAO CLAUDIO MUSSI DE ALBUQUERQUE

ANALISE DO COMPORTAMENTO DA HIERARQUIA DE MEMORIA COM OPROFILE ESTENDIDO

Dissertao apresentada como requisito parca cial ` obteno do grau de Mestre. Proa ca grama de Ps-Graduao em Informtica, o ca a Setor de Cincias Exatas, Universidade Fee deral do Paran. a Orientador: Prof. Dr. Roberto Andr Hexsel e

CURITIBA 2009

JOAO CLAUDIO MUSSI DE ALBUQUERQUE

ANALISE DO COMPORTAMENTO DA HIERARQUIA DE MEMORIA COM OPROFILE ESTENDIDO

Dissertao apresentada como requisito parca cial ` obteno do grau de Mestre. Proa ca grama de Ps-Graduao em Informtica, o ca a Setor de Cincias Exatas, Universidade Fee deral do Paran. a Orientador: Prof. Dr. Roberto Andr Hexsel e

CURITIBA 2009

DEDICATORIA
` ` A minha av, Palmira. Aos meus pais, Joo Liro e Maria Ana. A minha sobrinha e o a ` alhada, Valentina. Aos meus irmos Humberto Luis e Paulo Henrique. A minha irm a a Ana Maria. Aos demais familiares que tambm no lero esta dissertao. A qualquer e a a ca pessoa que justique a existncia deste trabalho, lendo-o. e

ii

AGRADECIMENTOS
Aos meus familiares, pela pacincia e apoio incondicionais. Aos grandes amigos, amigas e e demais pessoas especiais, pela torcida e compreenso durante a minha ausncia: Aristeu, a e Daniel, Cassio, Bruno, Ike, Rapha, Betam, Enrico, Tati, Nissin, Carlos, Anna, Maur cio, Maria, Felipe, Kika, Jepi, Z e, especialmente ` Mell, a auxiliar de encadernao. e a ca Ao meu orientador Roberto, principalmente pela pacincia e pela f no meu trabalho. e e ` A Juclia, secretria do DINF, pela prestatividade. Aos amigos e colegas do SIMEPAR e a pela compreenso e apoio, Sato em especial. Aos doutores Marcelo Oliveira, Erasto Cichon a e Julio Batista, pela minha segunda chance. A voc, pelo seu interesse e ateno. e ca

iii

SUMARIO

LISTA DE FIGURAS LISTA DE TABELAS RESUMO ABSTRACT 1 INTRODUCAO 2 REVISAO BIBLIOGRAFICA 2.1 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

vii viii ix x 1 5 5

2.2 OProle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3 OPROFILE ESTENDIDO 15

3.1 Alteraes na coleta dos dados . . . . . . . . . . . . . . . . . . . . . . . . . 15 co 3.2 Ps-processamento e anlise das amostras . . . . . . . . . . . . . . . . . . 16 o a 4 METODOLOGIA 5 AMBIENTE DE TESTES 6 ANALISE DAS FALTAS NAS TLBS 20 25 27

6.1 Descrio do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ca 6.2 Preparao do Experimento . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ca 6.2.1 6.2.2 Parmetros dos Programas . . . . . . . . . . . . . . . . . . . . . . . 28 a Congurao do OProle Estendido . . . . . . . . . . . . . . . . . . 29 ca

6.3 Resultados dos Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.3.1 6.3.2 Buer de 0 a 349 pginas . . . . . . . . . . . . . . . . . . . . . . . . 29 a Buer de 22 a 42 Pginas . . . . . . . . . . . . . . . . . . . . . . . 32 a

iv 6.3.3 Buer de 250 a 280 Pginas . . . . . . . . . . . . . . . . . . . . . . 34 a 38

7 ANALISE DA MULTIPLICACAO DE MATRIZES

7.1 Estudo das Otimizaes Testadas . . . . . . . . . . . . . . . . . . . . . . . 39 co 7.1.1 7.1.2 7.1.3 7.1.4 Multiplicao Convencional . . . . . . . . . . . . . . . . . . . . . . 39 ca Multiplicao com Padding . . . . . . . . . . . . . . . . . . . . . . 41 ca Multiplicao com Blocagem . . . . . . . . . . . . . . . . . . . . . . 42 ca Multiplicao com Padding e Blocagem . . . . . . . . . . . . . . . . 42 ca

7.2 Preparao do Experimento . . . . . . . . . . . . . . . . . . . . . . . . . . 43 ca 7.2.1 7.2.2 Parmetros dos Programas . . . . . . . . . . . . . . . . . . . . . . . 43 a Conguraes do OProle Estendido . . . . . . . . . . . . . . . . . 46 co

7.3 Resultados dos Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.3.1 7.3.2 7.3.3 7.3.4 Comportamento dos Programas . . . . . . . . . . . . . . . . . . . . 47 Contagem dos Eventos . . . . . . . . . . . . . . . . . . . . . . . . . 48 Utilizao da Hierarquia de Memria . . . . . . . . . . . . . . . . . 50 ca o Anlise das Taxas dos Eventos Medidos . . . . . . . . . . . . . . . . 55 a 63

8 ANALISE DO MERGESORT

8.1 Descrio dos Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 ca 8.2 Preparao do Experimento . . . . . . . . . . . . . . . . . . . . . . . . . . 64 ca 8.2.1 8.2.2 Parmetros dos Programas . . . . . . . . . . . . . . . . . . . . . . . 64 a Conguraes do OProle Estendido . . . . . . . . . . . . . . . . . 65 co

8.3 Resultados das Medidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.3.1 8.3.2 Comportamento dos Programas e Contagem dos Eventos . . . . . . 66 Anlise das Taxas das Medidas . . . . . . . . . . . . . . . . . . . . 75 a 83

9 INTERFERENCIA NAS MEDIDAS

9.1 Faltas nas TLBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 9.2 Multiplicao de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 ca 9.3 Mergesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

v 10 DIVERGENCIAS NAS MEDIDAS 88

10.1 Faltas nas TLBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 10.2 Multiplicao de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 ca 10.3 Mergesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 11 CONCLUSAO A EVENTOS SUPORTADOS PELO OPROFILE ESTENDIDO B MULTIPLICACAO DE MATRIZES BLOCADA C FUNCAO READTSC D EXEMPLO DE CONFIGURACAO DO OPROFILE ESTENDIDO BIBLIOGRAFIA 93 96 98 99 100 104

vi

LISTA DE FIGURAS
2.1 Esquema simplicado do OProle. . . . . . . . . . . . . . . . . . . . . . . . 14 3.1 Alteraes realizadas no OProle. . . . . . . . . . . . . . . . . . . . . . . . 16 co 3.2 Ocorrncia de diferentes eventos medidos pelo OProle Estendido. . . . . . 17 e 3.3 Eventos ajustados para comparao visual. . . . . . . . . . . . . . . . . . . 18 ca 3.4 Leitura do ciclo do processador durante a execuo do programa . . . . . . 19 ca 4.1 Contagem dos eventos do OProle Estendido. . . . . . . . . . . . . . . . . 22 4.2 Taxas das contagens dos eventos do OProle Estendido. . . . . . . . . . . . 23 4.3 Contagem discriminada dos eventos do OProle Estendido. . . . . . . . . . 24 5.1 Diagrama do processador. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.1 Cdigo C do programa que causa faltas controladas nas TLBs. . . . . . . 28 o 6.2 Faltas na L1 e L2 DTLB percorrendo buers entre 0 e 349 pginas. . . . . . . . 30 a 6.3 Faltas na L1 DTLB percorrendo buers entre 22 e 41 pginas. . . . . . . . . . 32 a 6.4 Transio entre o regime de funcionamento normal e o thrashing na L1 DTLB. 34 ca 6.5 Acima: faltas na L2 DTLB percorrendo buers entre 250 e 279 pginas. Abaixo: a
ampliao do grco demontrando a transio entre buers. . . . . . . . . . . . ca a ca

36

7.1 Endereos acessados na multiplicao de matrizes convencional. . . . . . . . . . 40 c ca 7.2 Endereos acessados na multiplicao de matrizes com padding. . . . . . . . . . 41 c ca 7.3 Endereos acessados na multiplicao de matrizes com blocagem. . . . . . . . . 43 c ca 7.4 Endereos acessados na multiplicao de matrizes com padding e blocagem. . . . 44 c ca 7.5 Monitoramento da cache de dados durante a multiplicaao convencional c (acima) e a multiplicao com padding e blocagem. . . . . . . . . . . . . . 49 ca 7.6 Comportamento dos eventos durante a multiplicao convencional (acima) ca e a otimizada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.7 Interferncia durante a multiplicao de matrizes convencional (topo) e a otimizada. 54 e ca

vii 7.8 Acessos ` cache por ciclos de relgio na multiplicao convencional (acima) a o ca e na com padding e blocagem. . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.9 Acertos na L2 por acessos ` cache na multiplicao convencional (acima) e a ca na multiplicao com padding e blocagem. . . . . . . . . . . . . . . . . . . 58 ca 7.10 Faltas na L2 por acessos ` cache na multiplicao convencional e na blocada. 61 a ca 8.1 Acima, execuo do Mergesort. Abaixo Tiled Mergesort no mesmo vetor. . 67 ca 8.2 Ciclos da ordenao; topo Mergesort e acima Tiled Mergesort. . . . . . . . 69 ca 8.3 Acessos ` cache do Mergesort e Tiled Mergesort, faixas do tamanho da L2. a 72

8.4 Faltas na L1 para o Mergesort no topo e para o Quicksort na base. . . . . . 74 8.5 Faltas na L2 para o Mergesort no topo e para o Quicksort na base. . . . . . 76 8.6 Taxas de acessos por ciclos para Mergesort (topo) e Quicksort. . . . . . . . 78 8.7 Taxas de faltas por acessos na L1 para o Mergesort (topo) e Quicksort. . . 80 8.8 Taxas de faltas na L2 por acessos, Mergesort (topo) e Quicksort. . . . . . . 82

viii

LISTA DE TABELAS
6.1 Trecho do log do OProle no qual ocorre o degrau da Figura 6.2. . . . . . . 31 6.2 Faltas na L1d-TLB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 7.1 Tempo de execuo da multiplicao de matrizes variando bloco e padding. ca ca 46

7.2 Contagem dos eventos para os programas de multiplicaao de matrizes. . . 48 c 8.1 Contagem de ciclos para os programas de ordenao. . . . . . . . . . . . . 65 ca 8.2 Contagem de eventos para o trecho da execuo dos programas. . . . . . . 70 ca 9.1 Overhead do OProle e do OProle Estendido para faltas nas TLBs. . . . . 84 9.2 Overhead do OProle e do OProle Estendido no produto de matrizes. . . 85 9.3 Overhead do OProle e do OProle Estendido na ordenao de vetores. . . 87 ca 10.1 Divergncia na contagem de faltas de pginas. . . . . . . . . . . . . . . . . 89 e a 10.2 Divergncia na contagem de eventos no produto de matrizes. . . . . . . . . 90 e 10.3 Divergncia na contagem de eventos na ordenao de vetores. . . . . . . . . 91 e ca

ix

RESUMO
O Oprole um programa de monitoramento de desempenho cujo funcionamento basee e ado na amostragem de dados dos contadores de desempenho em hardware (CDHs). Esta dissertao descreve uma extenso ao Oprole, o Oprole Estendido, que adiciona uma ca a referncia de tempo absoluta e o estado de todos os contadores de desempenho `s amostras e a periodicamente coletadas. A referncia de tempo, obtida do Time Stamp Counter, pere mite observar o comportamento temporal dos eventos monitorados na resoluo denida ca pelo usurio, desde que suportada pelo projeto da CPU. a Com um conjunto de amostras, cada uma contendo o valor de todos os contadores de desempenho e a referncia de tempo, poss estabelecer relaes entre as interaes de e e vel co co eventos que ocorrem em frequncias distintas. e Trs experimentos mostram a utilizao do Oprole Estendido: (i) um programa de e ca teste que provoca um n mero controlado de faltas nos dois n u veis da TLB do sistema; (ii) programas de multiplicao de matrizes com diferentes n ca veis de otimizao; e (iii) a ca comparao de desempenho, com relao ` hierarquia de memria, da ordenao com duas ca ca a o ca verses do algoritmo de ordenao Mergesort: uma implementao simplria, e outra que o ca ca o divide o vetor em faixas do tamanho das caches e emprega o Quick sort nestas faixas. Os resultados dos experimentos mostram que: (i) o Oprole Estendido fornece dados importantes sobre o desempenho do sistema estudado; (ii) o Oprole Estendido ajuda na compreenso do modo como os programas monitorados utilizam a hierarquia de memria; a o (iii) o Oprole Estendido apresenta uma interferncia prxima ` do Oprole em alguns e o a experimentos, cuja intensidade se altera de acordo com a taxa de amostragem utilizada; e (iv) o Oprole Estendido proporciona uma anlise mais completa das sequncias dos a e eventos ao longo da execuo dos testes da que poss de se obter com o Oprole. ca e vel

ABSTRACT
Oprole is a performance monitoring tool based on hardware performance counters (HPC) data sampling. This dissertation describes an extension to Oprole, Oprole Estendido, which adds an absolute time reference and the state of all performance counters to the periodically collected samples. The time reference allows observing the temporal behavior of the monitored events at a user dened resolution, provided that resolution is supported by the processor. The time reference is acquired from the Time Stamp Counter (TSC). With a set of samples, each containing the values of all performance counters and the time reference, it is possible to establish relations between the interactions of the dierent events that occur at distinct frequencies. Three experiments show Oprole Estendidos usage: (i) a simple test program that causes a controlled number of faults on both levels of the systems TLB; (ii) matrix multiplication programs with dierent optimization levels; and (iii) a performance comparison, from the memory hierarchy point of view, between two Mergesort algorithms: a simple implementation and a complex one, which divides the vector in cache-sized tiles and applies Quick sort on these tiles. The experiments show that: (i) Oprole Estendido provides invaluable data on the performance of the system under study; (ii) Oprole Estendido helps to improve the understandig on the way that monitored programs use the memory hierarchy; (iii) Oprole Estendidos interference on the system under study is similar to that caused by Oprole, and the level of interference is related to the sampling rates; and (iv) Oprole Estendido allows a more thorough analysis of the sequences of events than is possible with Oprole.

CAP ITULO 1 INTRODUCAO


Contadores de Desempenho em Hardware (CDHs) so dispositivos de monitoramento a dispon veis em CPUs de alto desempenho. Estes dispositivos possibilitam monitorar e contabilizar eventos ocorridos no processador durante a execuo de programas e so ca a amplamente utilizados na otimizao de aplicaes. ca co As ferramentas de depurao de desempenho dispon ca veis at o advento dos CDHs eram e capazes de fornecer a ordem das chamadas das funes e o tempo aproximado de execuo co ca de cada uma, bem como o n mero de vezes em que elas eram invocadas [15]. Com base u nesses dados, observava-se o comportamento do programa nos trechos cr ticos de cdigo o e deduzia-se o que era poss otimizar no programa para melhorar o seu desempenho. vel Informaes mais detalhadas relacionadas ` execuo de um programa tambm poco a ca e dem ser adquiridas atravs de simuladores [3, 30], que so dif e a ceis de ajustar adequadamente [34], so demorados para executar, alm de gerarem um grande volume de dados a e e de no serem capazes de reproduzir tudo o que ocorre num processsador real durante a a execuo do programa. ca A implementao dos CDHs viabilizou o monitoramento de eventos ocorridos no proca cessador durante a execuo de programas, o que desencadeou o desenvolvimento de ca novas ferramentas de depurao de desempenho, que so capazes de fornecer informaes ca a co complementares `s j existentes, com a nalidade de facilitar a identicao de gargalos a a ca presentes nos sistemas. Dentre as ferramentas dispon veis para a utilizao dos CDHs encontram-se: (i) drivers ca de acesso aos contadores [29]; (ii) bibliotecas para leitura e escrita dos CDHs [6, 16]; (iii) aplicativos de monitoramento [5, 2, 10, 7] que funcionam sem nenhuma alterao ca no programa estudado; e (iv) ferramentas para a visualizao dos dados coletados [11]. ca Cada processador que suporta CDHs prov um certo conjunto de eventos observveis, e a

2 que incluem acessos ` cache, desvios tomados, instrues completadas e faltas na cache a co da tabela de pginas (TLB) entre outros. A quantidade de eventos monitorveis simula a taneamente, bem como as formas de acesso aos contadores so tambm distintas para a e cada CPU. Apesar dessas restries, os instrumentos dispon co veis possibilitaram a realizao de ca pesquisas que resultaram em tcnicas para otimizao do desempenho de aplicaes e e ca co compiladores baseadas no uso dos CDHs [8, 9], estudos relacionados ` acurcia e cona a abilidade dos contadores [33, 26, 18, 35] e pesquisas referentes aos mtodos de coleta de e dados dos CDHs e dos programas monitorados [27, 4, 34, 28]. O Oprole um instrumento de depurao de desempenho baseado na utilizao de e ca ca CDHs capaz de observar (ou monitorar) simultaneamente tantos eventos quanto permitidos pelo processador [24] sem causar perturbaes signicativas na execuo do programa co ca monitorado. As amostras coletadas pelo Oprole no contm informao referente ao a e ca instante em que um evento ocorreu, nem informaes a respeito do estado dos demais co contadores naquele mesmo instante. Aps a execuo de um programa monitorado pelo Oprole obtm-se informaes eso ca e co tat sticas, similares a um histograma, a respeito dos eventos ocorridos durante a medio, ca tais como: (i) o n mero de eventos causados pelo programa observado; (ii) o n mero u u de eventos causados pelos demais binrios em execuo; (iii) estat a ca sticas das medidas; (iv) estat sticas de eventos sobre os s mbolos de programas compilados com a opo de ca depurao -g do gcc (GNU Compiler Collection). ca A primeira parte do trabalho aqui apresentado consistiu em expandir as funcionalidades do Oprole, de forma que cada amostra coletada passasse a conter o ciclo de relgio o (clock) em que ocorreu a coleta do dado e o estado dos demais contadores naquele mesmo instante. Esta informao complementar do ciclo em que ocorre a coleta dos dados ca permitiu observar a evoluo da contagem dos eventos ao longo do tempo. ca Outras extenses consistiram em disponibilizar, em arquivos diferentes dos utilizados o pelo Oprole, os registros de todas as amostras coletadas durante uma sesso de monia toramento com o Oprole Estendido, nomes dos binrios que causaram os eventos e seus a

3 respectivos PIDs (Process ID) e GIDs (Group ID). As novas informaes coletadas precisaram ser contextualizadas para viabilizar a sua co interpretao correta. Para isso foi utilizada uma funo independente do Oprole que ca ca l o ciclo de relgio do processador (readtsc()). Esta funo foi inserida no cdigo dos e o ca o programas monitorados e foi utilizada para delimitar o momento em que se inicia um trecho da execuo do programa cujo comportamento se queria observar. ca A segunda parte do trabalho consistiu em utilizar essa verso modicada do Oprole a e a funo readtsc() para: (i) estudar a distribuio temporal dos eventos monitoraca ca dos durante uma medio; (ii) investigar o comportamento de programas com base na ca observao das faltas na L1, L2 e TLB; e (iii) demonstrar as perturbaes que tanto o ca co Sistema Operacional (SO) quanto o Oprole podem causar em uma aplicao durante a ca sua execuo. ca Os programas que foram investigados com o aux da ferramenta, apresentados em lio ordem crescente de complexidade, so: (i) programas que acessam dados em memria a o para estimar o tamanho das TLBs; (ii) multiplicao de matrizes com diferentes n ca veis de otimizao; e (iii) programas de ordenao. ca ca Os estudos descritos em (i) e (ii) destinam-se a renar a aplicao da metodologia e ca eventualmente ajustar as ferramentas. Com (iii) pretende-se estudar o comportamento da hierarquia de memria L1 e L2 cache durante a execuo de programas baseados em o ca recurso trabalhando com conjuntos de dados de tamanhos distintos. a Parte dos resultados dos estudos contidos neste trabalho foi utilizada no artigo OProle Estendido para Depurao de Desempenho [1], apresentado no VI Workshop de Sisca temas Operacionais (WSO2009). O restante do trabalho est organizado como descrito a seguir: o Cap a tulo 2 apresenta uma discusso sobre os trabalhos relacionados a esta dissertao e uma descrio mais a ca ca detalhada do Oprole. As alteraes feitas no Oprole e os detalhes a respeito das inco formaes complementares coletadas esto descritas no Cap co a tulo 3. O Cap tulo 4 descreve a metodologia para a utilizao do Oprole Estendido enquanto o Cap ca tulo 5 apresenta o ambiente de testes utilizado. Os Cap tulos 6, 7 e 8 descrevem e discutem os experimentos

4 e resultados obtidos, enquanto o Cap tulo 9 discute a interferncia causadas pelo Oprole e Estendido nas medidas. O Capitulo 10 apresenta uma discusso a respeito da divergncia a e encontrada entre os valores obtidos com o Oprole e com o Oprole Estendido em cada experimento. Finalmente, o Cap tulo 11 apresenta as concluses e estudos futuros eno quanto os Apndices A, B, C e D contm a listagem dos eventos suportados pelo Athlon, e e os cdigos de programas e funes utilizadas no trabalho, e um exemplo de arquivo de o co congurao para o Oprole Estendido. ca

CAP ITULO 2 REVISAO BIBLIOGRAFICA 2.1 Trabalhos Relacionados

Existem duas modalidades de programao e leitura dos CDHs durante o monitoramento ca da execuo de um programa, que so: contagem (counting) e amostragem (sampling). ca a Contagem consiste na leitura dos CDHs antes e depois da execuo do programa. Nesta ca abordagem, a quantidade total de eventos obtida atravs da subtrao dos valores e e ca registrados em cada uma das leituras. Amostragem baseada na leitura de um CDH a cada overow do mesmo. Neste modo, e quando o contador atinge o seu limite, uma interrupo de hardware permite a leitura do ca valor do contador e o disponibiliza para a aplicao de monitoramento, que por sua vez, ca contabiliza este evento nas estat sticas das medidas. Em [27] apresentado um estudo a respeito dessas duas modalidades de uso dos e contadores e das implicaes de cada uma na ecincia e acurcia das medidas. O estudo co e a foi realizado com a ferramenta de medida PAPI, inicialmente descrita em [7]. O trabalho cita alguns processadores as modalidades de coleta por eles suportada. O trabalho conclui que ambos os modos so importantes e devem ser suportados em todas as plataformas de a hardware poss veis. Conclui ainda, que necessrio mais trabalho para se determinar as e a caracter sticas desejveis em uma interface multi-plataforma de acesso a CDHs, alm de a e sugerir estudos relacionados ` calibrao dos mesmos, a m de melhorar a preciso das a ca a medidas. A acurcia dos CDHs estudada em [33]. Para estimar a preciso das medidas foa e a ram criados microbenchmarks capazes de causar uma quantidade previs vel de eventos monitorveis por CDHs, como faltas na TLB (Translation Lookaside Buer). Os microa benchmarks foram executados em um processador MIPS R12000 monitorado pelos CDHs e em um simulador deste processador.

6 No processador, os dados dos CDHs foram lidos por intermdio das ferramentas de e acesso dispon veis para a plataforma SGI MIPS, perfex e libperfex. A quantidade de eventos registrada nos CDHs foi comparada com os valores das simulaes e com os co valores estimados. Os resultados demonstram que, para cada tipo de microbenchmark e mtodo de acesso aos CDHs, distintos n e veis de acurcia eram atingidos. Alm disso, as a e leituras realizadas com perfex e libperfex divergiram nos mesmos testes. Dentre os eventos medidos esto: (i) instrues decodicadas; (ii) leituras em memria; a co o (iii) escritas em memria; e (iv) desvios condicionais resolvidos. Destes, apenas (iii) no o a atingiu um ndice de erro inferior a 10% depois dos microbenchmarks serem executados por tempo suciente para que os valores lidos convirjam at os os valores estimados ou e obtidos nas simulaes. No so analisadas as causas das diferenas entre as medidas co a a c obtidas com perfex e libperfex. Uma continuao do estudo de acurcia descrito em [33] apresentada em [26]. Neste ca a e trabalho foi utilizada uma metodologia semelhante ` apresentada em [33], alm da fera e ramenta PAPI [7] para realizar medidas em diferentes processadores. Algumas das diferenas observadas entre a previso de eventos e a leitura dos CDHs nos microbenchmarks c a foram atribu das ` busca antecipada de dados em alguns dos processadores. Este proa blema foi contornado alterando-se nos microbenchmarks a sequncia de acesso aos dados e em memria, de linear para aleatria. o o Os resultados obtidos permitiram tipicar as divergncias entre as estimativas e os e valores obtidos nas medies da seguinte forma: (i) overhead representa uma diferena co c constante entre a medida prevista e a medida adquirida, possivelmente causada pela ferramenta de monitoramento, ou por uma perturbao, atribu pelos autores a algum ca da outro cdigo no identicado; (ii) multiplicativa o resultado obtido o produto da o a e medida esperada por um fator; (iii) aleatria diferena que se apresenta apenas no o c in da medio e que tende a desaparecer ` medida que o microbenchmark prossegue a cio ca a sua execuo; e (iv) desconhecida no se enquadra nas demais categorias. ca a Diante desses resultados os autores propem a incluso de fatores de correo para os o a ca contadores nas ferramentas de anlise dos dados para melhorar a preciso das medidas. a a

7 Tanto este estudo quanto o seu precedente no detalham o mtodo de leitura dos registraa e dores nem qual o overhead que este processo causa de acordo com a sua implementao ca nas diferentes plataformas analisadas, possivelmente pelo trabalho ter sido realizado em plataformas proprietrias. a Estes trabalhos tambm no consideram que algumas das perturbaes observadas nas e a co medidas podem ser causadas pelo prprio Sistema Operacional, uma vez que as leituras o dos CDHs so diretamente comparadas com os resultados das simulaes e clculos de a co a previso, os quais no contemplam as interferncias causadas pelo SO. a a e Em [14], os autores demonstram como a ferramenta de monitoramento para clusters RVision [13] teve sua funcionalidade extendida para suportar a leitura dos CDHs. Para isso foi criada uma biblioteca de acesso aos contadores que utiliza o driver de acesso aos CDHs dispon vel em [29]. Esta extenso do aplicativo foi utilizada para monitorar a a execuo de uma verso paralela do benchmark SPEC Swim [32]. ca a Aps a anlise do resultado das medies de taxas de faltas na cache durante execuo o a co ca do Swim, um problema de conito de mapeamentos em cache foi detectado e resolvido atravs de uma pequena alterao no cdigo do programa. Aps essa alterao, o tempo e ca o o ca de execuo melhorou em 25%. ca Outras informaes relevantes so apresentadas neste trabalho [14], como a anlise da co a a intruso das medidas no desempenho dos programas monitorados, alm da listagem de a e algumas mtricas derivadas dos eventos monitorveis, tais como operaes completadas e a co por ciclo, taxa de escritas e leituras por ciclo entre outras. Duas tcnicas para contornar algumas das limitaes dos CDHs so apresentadas e co a em [4]. A primeira consiste aumentar o n mero de contadores dispon u veis para uma medio, multiplexando os eventos monitorveis entre os contadores existentes no proca a cessador durante a execuo da medida. Para isso, criado um contexto contendo os ca e dados dos contadores para cada processo em execuo na mquina. Cada contexto acuca a mula as informaes obtidas dos contadores ` medida que os eventos monitorveis so co a a a multiplexados aleatoriamente ao longo da medio. ca Os contextos de contadores so trocados a cada troca de contexto do SO de forma a

8 que, para cada processo seja levantado o seu perl de execuo, sem que este perl sofra ca a interferncia dos demais processos existentes. Uma comparao entre os dados medidos e ca atravs dessa tcnica e os dados medidos sem a multiplexao dos eventos nos contadores e e ca indicou que a diferena entre as medidas obtidas era de aproximadamente 15%. c A segunda metodologia proposta associa especulativamente as paradas (stalls) do processador a um componente que seja o potencial causador da parada. Essa metodologia foi implementada a partir da ferramenta de multiplexao de CDHs e os resultados dos expeca rimentos demonstraram que as medidas obtidas atravs desse mtodo so razoavelmente e e a precisas. Alm das duas metodologias descritas, o trabalho [4] tambm apresenta algumas e e relaes entre a taxa de amostragem dos registradores e o overhead observado no sisco tema, assim como uma descrio detalhada das caracter ca sticas de funcionamento dos processadores superescalares. A ferramenta para anlise de desempenho PAPI descrita em [7]. Essa ferramenta a e disponibiliza uma srie de mtricas que podem ser utilizadas na depurao de desempenho e e ca de aplicaes. Sua arquitetura implementada em camadas, sendo que apenas a camada co e de aquisio dos dados dos contadores dependente da arquitetura do processador e do ca e SO, enquanto as demais so facilmente portveis entre Sistemas Operacionais distintos. a a A ferramenta PAPI contm conjuntos de contadores de eventos pr-denidos, alm e e e de suportar multiplexao de contadores, fazer medies estat ca co sticas e medies em thco reads. PAPI suporta as plataformas Intel Pentium Pro/II/III no Linux, SGI/MIPS

R10000/R12000 no IRIX 6.x, IBM Power 604/604e/630 no AIX 4.3, Compaq Alpha EV4/5/6 no Unix Tru64 e Cray T3e/Ev5 no Unicos/mk. O trabalho [7] tambm cita as vrias ferramentas de visualizao dos dados obtidos e a ca atravs da PAPI como o performeter e profometer, alm de mencionar o fato desses dados e e serem compat veis com outras ferramentas de anlise de desempenho como o vprof [20] e a o SvPablo [11]. Uma abordagem alternativa ` anlise de desempenho baseada em eventos ocorridos nos a a CDHs apresentada em [10]. Nesse trabalho demonstrado como efetuar uma anlise e e a

9 do desempenho de um programa a partir do perl de execuo de pares de instrues ca co escolhidos aleatoriamente. Para isso, necessrio hardware adicional no dispon em e a a vel todos os processadores. A funo destes circuitos adicionais registrar o que ocorre no processador durante ca e a execuo de uma determinada instruo. Os eventos observados incluem: (i) faltas ca ca nas caches de instrues e dados; (ii) faltas nas TLBs de instrues e dados; (iii) desvios co co previstos tomados; (iv) erro da previso de desvios tomados; (v) instrues completadas; a co e (vi) latncia, em ciclos, de cada estgio de execuo da instruo no pipeline. e a ca ca Com essas informaes e mais algumas mtricas a elas associadas, poss encontrar co e e vel gargalos nos sistemas examinados. Outras potenciais aplicaes da ferramenta citadas co pelos autores so: otimizaes de compiladores, melhorias no escalonamento das instrues a co co e aumento nas taxas de acertos das caches e TLBs. Outra tcnica alternativa ` anlise de desempenho baseada nos CDHs a instrue a a e mentao no kernel estudada em [22, 23]. Neste trabalho desenvolvida uma ferramenta ca e de depurao de desempenho, denominada PANALYSER, que adquire as amostras a partir ca das chamadas de sistema ptrace(), getrusage() e wait4(). O PANALYSER compae rado `s demais ferramentas de monitoramento do sistema que adquirem as informaes a co a partir do pseudo sistema de arquivos /proc e concluiu-se que a instrumentao do ca kernel demanda menos processamento e, consequentemente, apresenta um overhead inferior ao das ferramentas baseadas na leitura do /proc. Apesar da instrumentao do ca kernel causar menos perturbao no sistema do que a leitura do /proc, ela ainda causa ca um overhead superior ao da leitura dos CDHs. Uma anlise dos eventos contados em processadores x86 apresentada em [35]. Neste a e trabalho, vrios processadores dessa mesma arquitetura so utilizados para medir insa a trues completadas e ciclos em que o processador no est parado. Uma vez que todos co a a os processadores so da mesma arquitetura, o n mero de intrues necessrias para exea u co a cutar o mesmo programa no deve variar entre os processadores. a As medidas iniciais demonstraram, a priori, uma divergncia de aproximadamente 1% e entre os processadores testados. Foi ento realizado um estudo que incluiu caracter a sticas

10 de layout de memria, anlise de instrues dos benchmarks, anlise do modo de execuo o a co a ca entre 32 e 64 bits, gerenciamento de memria e a prpria implementao dos contadores. o o ca Com os resultados e padronizaes obtidas a partir dos dados deste estudo, os expeco rimentos foram realizados novamente e a margem de erro obtida entre os processadores baixou para menos de 0,002%. Apesar da alta preciso da medida, ela apenas se refere a ` quantidade de instrues executadas. Os demais eventos dispon a co veis nos processadores no so testados. a a Em [18] feita uma comparao entre resultados de medidas obtidas com contadores e ca de desempenho de diferentes processadores para os mesmos benchmarks. Paralelamente, caracter sticas dos benchmarks tais como previsibilidade de desvios, conjunto de trabalho (working set), quantidade de memria utilizada foram analisados. o Comparando os resultados das medidas dos contadores com as caracter sticas de cada programa examinado, foi constatado que benchmarks com caracter sticas diferentes podem apresentar comportamentos similares em algumas arquiteturas, se analisados apenas pelo vis dos contadores de desempenho. Destas comparaes, foi observado que as concluses e co o referentes ao perl de execuo de programas, quando obtidas a partir apenas dos dados ca dos CDHs em uma determinada arquitetura, no devem ser generalizadas para as demais. a Dados coletados de contadores de desempenho so utilizados para denir o melhor a conjunto de ags de compilao para programas de benchmark em [9]. O processo consiste ca na utilizao de redes neurais para fazer o mapeamento entre o comportamento dos eventos ca e as ags que devem ser ligadas ou desligadas para a compilao. Aps a realizao de ca o ca um treinamento exaustivo na rede neural com vrios tipos de programas, o mapeamento a obtido e utilizado como base para estabelecer o melhor conjunto de ags para um e programa qualquer. Normalmente o conjunto de ags denido em aproximadamente e trs compilaes e execues monitoradas. e co co As medidas de desempenho realizadas nos programas compilados com o conjunto de ags estabelecido pela ferramenta demonstraram que houve um ganho de desempenho superior a 10% em relao ao melhor conjunto de ags de otimizao pr-denidos em ca ca e um compilador comercial.

11 De acordo com [34], simuladores no-comerciais so dif a a ceis de utilizar em pesquisas por serem mal documentados e implementados sobre bibliotecas velhas. Alm disso, os e modelos de processadores suportados so defasados e esto longe de simular a arquitetura a a dos processadores atuais. Partindo deste cenrio, trs tipos de anlises so realizadas e comparadas para um a e a a conjunto de benchmarks: execues com simuladores, execues com ferramentas de Insco co trumentao Dinmica Binria (IDB) e execues com contadores de desempenho. Os ca a a co testes foram realizados no simulador mais parecido com o processador utilizado nos experimentos e os valores obtidos com os contadores de desempenho foram a referncia de e medida convel. a A concluso indica que, apesar de trabalhosas e imprecisas na maioria das ocasies, as a o simulaes ainda so necessrias. Alm disso, foi conclu tambm que de acordo com o co a a e do e grau de detalhe necessrio para a anlise dos programas, as ferramentas de IDB podem a a oferecer vantagens por serem mais simples e mais rpidas, apesar de fornecerem menos a detalhes sobre as execues. co

2.2

OProle

O Oprole uma ferramenta de monitoramento de desempenho baseada no uso dos CDHs e composta por: (i) componentes dependentes de arquitetura (DA) cdigo responsvel o a pelo gerenciamento, congurao e manipulao dos CDHs em cada arquitetura suporca ca tada; (ii) oprolefs pseudo lesystem que armazena os arquivos responsveis por infora mar e receber conguraes do espao de usurio, alm de outras informaes referentes co c a e co aos eventos monitorveis; (iii) CPU Buer e Event Buer reas de armazenamento que a a mantm as amostras em espao de SO at que elas sejam transferidas para a rea de e c e a usurio; (iv) driver genrico para o kernel recebe as amostras enviadas pelo compoa e nente DA e armazena-as no buer apropriado at transfer e -las para o daemon no espao c de usurio; (v) OProle daemon responsvel por receber as amostras do kernel e escreva a e las em disco, sendo as amostras separadas e salvas em diferentes arquivos; (vi) ferramentas de ps processamento selecionam as amostras requeridas pelo usurio associando-as aos o a

12 binrios relevantes, apresentando a informao num formato compreens a ca vel. Durante a execuo do Oprole, cada CDH dispon no processador inicializado ca vel e e congurado para monitorar um determinado evento que, quando ocorre, causa um incremento do contador apropriado. No momento em que o contador atinge o valor limite, uma interrupo causa a execuo do cdigo do driver (DA), que l o valor do ca ca o e PC e o n mero do contador que entrou em overow, reiniciando-o e inserindo os valores u do contador e do PC no CPU Buer. O cdigo do driver DA tambm registra no CPU o e Buer as trocas de processos em execuo, assim como as trocas de modo de execuo ca ca entre usurio e sistema. a Periodicamente, o CPU Buer sincronizado com o Event Buer pelo driver genrico e e do OProle, que alm de converter o valor do PC em um oset relativo ao binrio causador e a do evento, insere os dados das amostras e do oset referente ao PC no Event Buer, junto com um identicador do binrio em execuo no momento do registro da amostra. Os a ca dados so ento transferidos para o espao de usurio pelo OProle daemon, que trata os a a c a dados coletados criando e mantendo em disco arquivos de amostras para cada binrio em a execuo. ca Para cada binrio mantido um conjunto de arquivos, um arquivo para cada evento a e monitorado. O arquivo contm uma srie de registros com o valor do PC no momento em e e que a interrupo do contador foi atendida, alm do n mero de interrupes j atendidas ca e u co a para cada um dos valores de PC registrados. O n mero de registros, multiplicado pelo u n mero de ocorrncias, corresponde ao n mero de interrupes associadas ao contador e u e u co e portanto proporcional ` contagem de eventos. No ps-processamento poss associar o a o e vel valor de cada PC a um s mbolo do binrio, caso este tenha sido compilado com a opo -g a ca do gcc. A gura 2.1 descreve o trajeto percorrido por uma amostra durante uma medio do ca Oprole. Primeiramente, os contadores so congurados e inicializados pelas chamadas a setup() e start(), contidas na poro dependente de arquitetura do driver do Oprole. ca Aps algum tempo, o contador 0 entra em overow. Neste momento, uma interrupo de o ca hardware executa o cdigo que descobre qual contador entrou em overow, qual o valor o

13 do PC, qual a tarefa em execuo e envia essas informaes para o driver genrico atravs ca co e e da funo oprofile_add_sample(). ca A amostra e demais informaes so ento armazenadas no CPU Buer. No Oprole co a a h um CPU Buer para cada processador no sistema. O CPU Buer tambm armazena a e informaes a respeito da troca de processos em execuo e da troca de modo de operao co ca ca entre modo usurio e modo sistema ao longo de uma sesso de monitoramento. a a Periodicamente, os dados so transferidos para o buer principal, denominado Event a Buer. O cdigo contido no arquivo buffer_sync.c responsvel pela sincronizao dos o e a ca buers, pela criao de identicadores unicos (dcookie) para cada binrio executado no ca a sistema e pelo armazenamento de informaes complementares. co As amostras so ento transferidas para o espao de usurio atravs do OProle daa a c a e emon, responsvel por essa transferncia, pela criao de novos arquivos ` medida que a e ca a amostras de novos binrios lhe so entregues na sincronizao peridica dos arquivos. a a ca o Para cada binrio executado, um arquivo por evento monitorado criado e mapeado em a e memria. Cada um desses arquivos de dados contm os totais de amostras para cada o e valor de PC que tenha causado um overow. O daemon organiza os ponteiros para os arquivos numa lista encadeada tanto em LRU (Last Recently Used) quanto pelo ndice gerado a partir do hash do nome do binrio a monitorado. A sincronizao dos arquivos de amostras mapeados com o disco ocorre ca periodicamente at o trmino da execuo do Oprole. Maiores informaes a respeito e e ca co desse processo e das ferramentas de ps-processamento dispon o veis no Oprole podem ser encontradas em [25].

14

PC 1:PC/Total,PC/Tot.. Processador
Dependente de Arquitetura

Disco

3:PC/Total 2:PC/Total,PC/Total n:PC/Total,...

4:PC/Total,PC/Tot.. CTR 2 CTR 3 n-1:PC/Total

CTR 0

CTR 1

setup() start() stop() oprofile_add_sample (PC,0)

Daemon OProfile

Lista encadeada e LRU


Driver Genrico

Hash 1 EVENT BUFFER DCOOKIE, OFFSET TASK SWITCH DCOOKIE, OFFSET daemon/ opd_trans.c Hash 3

CPU BUFFER PC, CTR TASK SWITCH PC, CTR buffer_sync.c KERNEL SWITCH PC, CTR PC, CTR

Hash 2

Hash 4

KERNEL SWITCH DCOOKIE, OFFSET DCOOKIE, OFFSET

Hash n-1

Hash n
Ponteiros para arquivos mapeados

Figura 2.1: Esquema simplicado do OProle.

15

CAP ITULO 3 OPROFILE ESTENDIDO


O cdigo do Oprole foi alterado pelo autor, de forma que cada amostra coletada cono tenha uma referncia de tempo, alm do estado dos demais contadores no momento da e e interrupo. Este cap ca tulo descreve as alteraes realizadas no cdigo do Oprole que co o resultaram no Oprole Estendido.

3.1

Alteraes na coleta dos dados co

As primeiras alteraes realizadas foram inseridas no cdigo do driver DA do Oprole, co o e so executadas no momento em que ocorre a interrupo que permite a leitura dos a ca contadores de desempenho e determina o contador em overow. A referncia de tempo e foi obtida implementando neste trecho de cdigo uma funao que l o Time Stamp Counter o c e (TSC)1 no momento em que este cdigo executado. A informao referente ao estado o e ca dos demais contadores foi obtida alterando o cdigo que verica os contadores, de forma o que os valores de todos fossem copiados para um array. O valor do TSC e o array contendo os valores de todos os contadores foram inclu dos nos parmetros da chamada da funo oprofile_add_sample(), para que pudessem ser a ca inseridos no CPU Buer junto aos demais dados. Os cdigos das estruturas CPU Buer o e Event Buer foram alterados para incluir os valores do TSC e dos demais contadores a cada nova amostra. Os arquivos buffer_sync.c e daemon/opd_trans.c tambm foram e alterados para incluir esses valores nas operaes de sincronizao e transferncia entre co ca e os buers. No cdigo do daemon, foram inseridos dois novos arquivos opd_logfile.c e opd_ o logtable.c. O cdigo contido em opd_logfile.c responsvel por mapear um arquivo o e a de registro contendo, para cada amostra, o valor do TSC, as informaes sobre o estado da co
TSC um contador de 64 bits que conta o n mero de ciclos de relgio do processador a partir do e u o instante da inicializaao do computador. c
1

16
TSC PC Disco

Processador
Dependente de Arquitetura

1:PC/Total,PC/Tot.. 2:PC/Total,PC/Total

n:PC/Total,... n-1:PC/Total HASH,BINRIO

CTR 0

CTR 1

CTR 2

CTR 3 TSC,CO,CTRS,HASH

setup() start() stop() oprofile_add_sample (PC,0,CTRS,TSC)

Driver Genrico

Daemon OProfile

opd_log{file,table}.c CPU BUFFER PC, CTR,CTRS,TSC TASK SWITCH PC, CTR,CTRS,TSC KERNEL SWITCH PC, CTR,CTRS,TSC PC, CTR,CTRS,TSC EVENT BUFFER DCOOKIE, OFFSET, CTRS, TSC TASK SWITCH daemon/ opd_trans.c Lista encadeada e LRU Hash 1

DCOOKIE, OFFSET, CTRS, TSC buffer_sync.c KERNEL SWITCH DCOOKIE, OFFSET, CTRS, TSC

Hash 2 Hash n-1

Hash n DCOOKIE, OFFSET,CTRS, TSC


Ponteiros para arquivos mapeados

Figura 3.1: Alteraes realizadas no OProle. co

contagem dos CDHs e o valor do hash do binrio que estava sendo executado, bem como a seus respectivos PIDs e GIDs. As amostras so inseridas no arquivo de log mapeado a em memria ` medida que so processadas e o arquivo em disco atualizado a cada o a a e sincronizao do SO. ca O arquivo opd_logtable.c contm o cdigo para manter um arquivo de e o ndice contendo o hash e o nome do binrio de cada programa em execuo que tenha gerado dados a ca de amostras durante a monitorao do Oprole. O arquivo de ca ndice atualizado a cada e novo nome de binrio observado pelo Oprole. A gura 3.1 contm o diagrama simplia e cado do Oprole original com as alteraes realizadas no trabalho. co

3.2

Ps-processamento e anlise das amostras o a

A anlise dos resultados obtidos com o Oprole Estendido baseada no registro gerado a e a partir os dados coletados que, ps-processados, podem fornecer grcos, contagens dos o a eventos em trechos da execuo, etc. Todas as rotinas relacionadas ao ps processamento ca o dos dados foram desenvolvidas ` parte do cdigo original do Oprole e as principais a o

17
Contadores de Desempenho 500000 450000 400000 350000 Contagem de Eventos 300000 250000 200000 150000 100000 50000 0 0 1e+08 2e+08 Ciclos L1_DTLB_MISSES_L2_DTLD_HITS 450K L1_AND_L2_DTLB_MISSES 450K DATA_CACHE_REFFILLS_FROM_L2 450K 3e+08 4e+08 5e+08

Figura 3.2: Ocorrncia de diferentes eventos medidos pelo OProle Estendido. e

caracter sticas das ferramentas de ps processamento dos dados esto descritas a seguir. o a A coleta de amostras do Oprole Estendido controlada somente pelo contador que e acumula os ciclos de relgio em que o processador est ativo (cpu_clk_unhalted). Deo a pendendo do grau de resoluo que se queira na medio, o n mero de eventos registrado ca ca u por unidade de tempo pode ser muito elevado por conta da frequncia do relgio dos e o processadores atuais, o que torna mais lenta a gerao de grcos de eventos tempo. A ca a visualizao do eixo do grco que representa os ciclos de relgio tambm prejudicada ca a o e e em funo do tamanho dos valores inicial e nal inseridos na escala. ca Para melhorar a visualizao desses dados nos grcos a escala de ciclos foi deslocada ca a para zero, subtraindo-se o valor do primeiro ciclo registrado pelo Oprole Estendido dos demais ciclos. Dessa forma, alm de melhorar a visualizao do grco, poss estabee ca a e vel lecer um ponto inicial na execuo de um programa, o que torna poss a comparao ca vel ca entre grcos de medidas de diferentes execues do mesmo programa. a co O Oprole capaz de monitorar vrios eventos. De acordo com a natureza do evento e a monitorado, provvel que ele ocorra numa frequncia mais alta que a dos demais, fae a e

18
Contadores de Desempenho: Escala Ajustada 7e+06

6e+06

5e+06

Contagem

4e+06

3e+06

2e+06

1e+06

0 0 1e+08 2e+08 Ciclos L1_DTLB_MISSES_L2_DTLD_HITS: 0,96 L1_AND_L2_DTLB_MISSES: 0,06 DATA_CACHE_REFFILLS_FROM_L2 3e+08 4e+08 5e+08

Figura 3.3: Eventos ajustados para comparao visual. ca

zendo com que um contador atinja seu limite e seja reinicializado mais vezes do que os outros. Isso causa um efeito de serra no grco da contagem dos eventos, como mostra a a Figura 3.2. Observa-se na gura que, enquanto Data_Cache_Refills_from_L2 ocorre aproximadamente na mesma frequncia que L1_DTLB_Misses_L2_DTLD_Hits ambos e atingindo o pico do grco aproximadamente quatorze vezes L1_and_L2_DTLB_Misses a atinge o pico do grco apenas uma vez, denotando uma frequncia de ocorrncia aproa e e ximadamente quatorze vezes inferior. Para corrigir esse problema, foi implementada uma rotina que soma, a cada valor lido, o valor total da contagem at a ultima re-inicializao do contador. Deste modo, a linha e ca em forma de serra plotada como uma linha que cresce de forma monotnica. Para evitar e o que a inclinao da linha do evento que ocorre em maior quantidade torne invis ca veis as variaes na linha do evento que ocorre em menor quantidade, ao nal da rotina de soma, co todos os pontos da linha so ajustados em relao ` escala do evento que ocorreu o maior a ca a n mero de vezes. Desta forma, as linhas do grco so plotadas em escalas diferentes mas u a a facilmente comparveis, como mostrado na gura 3.3. O fator de ajuste de cada curva a e

19
Contadores de Desempenho: Escala Ajustada 7e+06

6e+06

5e+06

Contagem

4e+06

3e+06

2e+06

1e+06

0 0 1e+08 2e+08 Ciclos L1_DTLB_MISSES_L2_DTLD_HITS: 0,96 L1_AND_L2_DTLB_MISSES: 0,06 DATA_CACHE_REFFILLS_FROM_L2 Passos do programa 3e+08 4e+08 5e+08

Figura 3.4: Leitura do ciclo do processador durante a execuo do programa ca

mostrado na legenda da gura. Para delimitar pontos interessantes da execuo do programa, assim como o in e ca cio o trmino da execuo do mesmo, foi escrita uma funo readtsc(), cujo cdigo est e ca ca o a listado no Apndice C que l o ciclo do processador registrado no Time Stamp Counter. e e O resultado da insero da funo readtsc() no cdigo do programa monitorado pode ca ca o ser visualizado na gura 3.4. As linhas verticais denotam os instantes em que a funo ca readtsc() invocada. e Estas so as ferramentas utilizadas para facilitar a anlise dos dados coletados pelo a a Oprole Estendido. Na medida que mais testes foram concebidos e realizados, mais ferramentas se tornaram necessrias e foram desenvolvidas. Neste mesmo processo, novas a potencialidades do Oprole Estendido foram enxergadas e exploradas, o que ser demonsa trado no Cap tulo 4, nas formas de visualizao apresentadas. ca

20

CAP ITULO 4 METODOLOGIA


Para analisar o comportamento de um determinado programa com o Oprole Estendido a seguinte metodologia deve ser utilizada. Primeiramente, necessrio fazer uma anlise da natureza da aplicao monitorada e e a a ca denir o tipo de evento que pode estar relacionado aos problemas de desempenho inerentes ` aplicao1 . Por exemplo, analisar as faltas nas caches e TLBs em um programa que exea ca cuta operaes matemticas em grandes quantidades de dados pode ser mais interessante co a a priori do que medir as falhas nas previses de desvios do mesmo programa. o Monitorar diferentes eventos durante uma mesma execuo permite identicar as ca relaes entre os eventos. E poss co vel, por exemplo, saber a proporo das faltas na cache ca L1 que causam faltas na L2, ou mesmo nas demais estruturas presentes nos outros n veis da hierarquia de memria. E poss tambm relacionar um per o vel e odo de muitas faltas nas TLBs a uma queda na taxa de instrues completadas e assim por diante. co Denidos os eventos a serem monitorados, necessrio vericar a taxa de amostragem e a ideal para coletar os dados. Durante uma medio com o Oprole Estendido, o prica meiro contador congurado para contar os ciclos de relgio do processador (Cpu_Clk_ e o Unhalted). Cada vez que aquele entra em overow, coletada a amostra do programa e em execuo e o estado dos demais contadores. A frequncia com que o primeiro contador ca e entra em overow denida como taxa de amostragem e pode ser alterada pelo usurio. e a A taxa de amostragem utilizada depende da resoluo requerida pela aplicao em ca ca teste e do tempo de execuo da mesma. Por exemplo, eventos monitorados na cache ca L1 podem requerer uma taxa de amostragem mais alta do que eventos monitorados na TLB, uma vez que os eventos da TLB so menos frequentes. Por outro lado, monitorar a eventos na TLB com a mesma frequncia que se monitora eventos na cache resulta em e
1

Os eventos suportados pelo Athlon esto listados no Apndice A a e

21 um overhead de processamento desnecessrio. a Da mesma forma, monitorar os eventos ainda que na frequncia recomendada e durante muito tempo gera uma quantidade de dados enorme, dos quais de acordo com o caso grande parte podem ser seguramente descartada sem que a visualizao do grco ca a seja prejudicada. Este caso tambm ilustra uma situao onde boa parte do overhead da e ca medida poderia ser evitado. Denido o valor ideal da taxa de amostragem, o cdigo do programa a ser medido o deve ser analisado e a funo readtsc() inserida no cdigo para delimitar os pontos mais ca o interessantes a serem investigados. Tambm interessante inserir uma chamada desta e e funo no in e no nal da execuo do programa, de forma que o overhead da carga e ca cio ca da destruio do processo medido no interra nos dados analisados. ca a Com o Oprole Estendido, poss visualizar os dados para a anlise de trs fore vel a e mas distintas: (i) a contagem dos eventos; (ii) a taxa dos eventos; e (iii) a contagem discriminada dos eventos. Cada um dos mtodos de visualizao pode exigir opes de e ca co congurao diferentes no momento da coleta de dados. Alm disso, o ps-processamento ca e o dos dados das amostras tambm so distintos para cada um dos casos. e a Na visualizao da contagem dos eventos, o conjunto de dados tratado com o ajuste ca e das curvas e a demarcao dos pontos interessantes do programa com o aux da funo ca lio ca readtsc(), como visto no Cap tulo 3. A Figura 4.1 mostra a evoluo da contagem ca dos eventos ICache_Fetches e ICache_Misses durante a carga de um programa. A linha vertical pontilhada, delimita o in da execuo do programa e foi obtida com a execuo cio ca ca da funo readtsc(). ca A visualizao da taxa obtida dividindo-se as variaes () de um evento entre duas ca e co amostras consecutivas pela variao de outro evento nas mesmas duas amostras. Os evenca tos so escolhidos de acordo com a informao que se queira visualizar. Na Figura 4.2, a ca o mesmo trecho de carga de programa apresentado, mas as linhas plotadas represene tam as taxas dos eventos ICache_Accesses/Ciclos e ICache_Misses/ICache_ Accesses. A taxa dos eventos apresenta oscilaes em alguns trechos da execuo da medida. Isto co ca

22
OProfile Estendido: Contagem dos eventos 1,6e+06

1,4e+06

1,2e+06

1e+06 Contagem

800000

600000

400000

200000

0 0 5e+06 1e+07 1,5e+07 2e+07 Ciclos ICACHE_FETCHES ICACHE_MISSES Incio do Programa 2,5e+07 3e+07 3,5e+07

Figura 4.1: Contagem dos eventos do OProle Estendido.

acontece porque a execuo da interrupo que l a amostra do Oprole Estendido no ca ca e a ocorre instantaneamente, uma vez que ela depende do atendimento pelo processador, que pode demorar de centenas a milhares de ciclos de relgio de acordo com a carga da CPU. o Devido a estas variaes no tempo de atendimento da coleta da amostra, a contagem co dos eventos monitorados pode sofrer alguma alterao entre momento em que ocorre o ca overow e o momento da leitura do contador. Esta variao praticamente invis na ca e vel visualizao da contagem mas torna-se bastante evidente na taxa. ca A visualizao discriminada apresenta, alm da contagem dos eventos, o binrio que ca e a estava sendo executado no momento em que foi realizada a leitura dos contadores e outras informaes. E poss co vel gerar este tipo de visualizao porque o Oprole capaz de ca e distinguir as amostras dos binrios monitorados entre: (i) lib cdigo de bibliotecas a o compartilhadas, (ii) kernel cdigo de kernel executado, (iii) cpu em qual processador o o cdigo foi executado, (iv) thread caso o mesmo programa seja executado em threads, o separa as amostras por thread e (v) all todas as opes. co De acordo com as opes de congurao escolhidas na coleta das amostras, cada uma co ca

23
OProfile Estendido: Taxas dos eventos 0,4

0,35

0,3

0,25 Taxa

0,2

0,15

0,1

0,05

0 0 5e+06 1e+07 1,5e+07 2e+07 Ciclos ICACHE_FETCHES / Ciclos ICACHE_MISSES / ICACHE_FETCHES Incio do Programa 2,5e+07 3e+07 3,5e+07

Figura 4.2: Taxas das contagens dos eventos do OProle Estendido.

delas conter informaes complementares como nome do binrio, nome da biblioteca, a co a n mero do PID e n mero do GID. Considerando a quantidade de programas rodando em u u um sistema, as bibliotecas utilizadas na implementao de cada um, alm do respectivo ca e PID ou GID que diferentes instncias do mesmo programa podem possuir, nota-se que a invivel plotar um grco contendo todas estas informaes. Neste caso, as amostras e a a co coletadas tem de ser reagrupadas de forma que a visualizaao dos dados se torne poss c vel, alm de manter-se apenas as informaes relevantes ao experimento em questo. e co a Um exemplo desta visualizao demonstrada na Figura 4.3 que mais uma vez ca e apresenta o mesmo trecho de carga do programa dinamico no qual todas as amostras foram separadas e reagrupadas de acordo com a convenincia de visualizao. Cada padro e ca a de ponto representa a sequncia da contagem de um evento. Cada cor atribu aos pontos e da equivale a um binrio detectado pelo Oprole Estendido durante a monitorao. Os dados a ca coletados que no fazem parte do conjunto que se quer observar (oprole, ld, libc, libm e a dinamico) foram agrupados em um grupo e plotados como resto. Os trechos em que h a uma grande distncia entre os pontos representam stalls (paradas) do processador. a

24

OProfile Estendido: Contagem Discriminada 1200

1000

800 Contagem

600

400

200

0 0 5e+06 1e+07 1,5e+07 2e+07 Ciclos ICACHE_FETCHES oprofile ICACHE_FETCHES resto ICACHE_FETCHES ld ICACHE_FETCHES libc ICACHE_FETCHES vmlinux ICACHE_FETCHES libm ICACHE_FETCHES dinamico ICACHE_MISSES oprofile ICACHE_MISSES resto ICACHE_MISSES ld ICACHE_MISSES libc ICACHE_MISSES vmlinux ICACHE_MISSES libm ICACHE_MISSES dinamico Incio 2,5e+07 3e+07 3,5e+07

Figura 4.3: Contagem discriminada dos eventos do OProle Estendido.

25

CAP ITULO 5 AMBIENTE DE TESTES


Todos os testes apresentados neste trabalho foram realizados na mesma mquina. Os a experimentos realizados com o Oprole Estendido foram executados no GNU Linux-2.6.8 com as alteraes nos drivers do Oprole original. A verso do Oprole usada como base co a para o desenvolvimento do Oprole Estendido foi a verso 0.9.2. a O processador utilizado nos experimentos o AMD AthlonTM XP 2400+, fam 6, e lia modelo 8. A maioria das informaes aqui descritas foram obtidas no seu manual [19], co assim como a Figura 5.1, que contm um diagrama do processador com os elementos da e sua hierarquia de memria destacados em vermelho. As informaes no encontradas na o co a documentao do Athlon foram complementadas com os dados fornecidos pelo programa ca x86info [21]. A hierarquia de memria do Athlon tem dois n o veis de memria cache. A cache o primria separada entre cache de dados e cache de instrues. A cache de dados tem a e co capacidade de 64 Kbytes com 512 conjuntos, cada conjunto contendo dois blocos (associatividade binria), cada um com 64 bytes e a reposio ocorre sobre o elemento menos a ca recentemente utilizado (Least Recently Used). A escrita de dados funciona com escrita preguiosa (write back) e alocao em falta na escrita. c ca A cache de instrues tem capacidade para 64 Kbytes, associatividade de duas vias e co armazena 64 bytes por bloco. A reposio dos blocos Least Recently Used (LRU) e cada ca e busca de instruo recupera da L2, ou da memria principal, os 64 bytes que preenchem ca o uma linha inteira, alm dos 64 bytes da linha seguinte, tirando proveito da localidade e espacial. O segundo n da cache unicado para dados e instrues, com associatividade de vel e co 16 vias, 64 bytes por bloco e capacidade de 256 Kbytes. A hierarquia de TLBs organizada em dois n e veis, sendo o primeiro n separado para vel

26

Figura 5.1: Diagrama do processador.

instrues e dados. A TLB de dados do n 1 contm 32 mapeamentos para pginas co vel e a de 4 Kbytes e 8 mapeamentos para pginas de 2 ou 4 Mbytes, alm de ser totalmente a e associativa e com reposio LRU. Na TLB de instrues do primeiro n h 16 blocos ca co vel a para pginas de 4 Kbytes e 8 blocos para pginas de 2 ou 4 Mbytes, a reposio LRU e a a ca e a associatividade total. e O segundo n da TLB deste processador tambm separado para dados e instrues. vel e e co Tanto a TLB de instrues quanto a de dados do n 2 mantm 256 mapeamentos com co vel e associatividade de 4 vias. As duas TLBs possuem apenas mapeamentos para pginas de a 4 Kbytes [19].

27

CAP ITULO 6 ANALISE DAS FALTAS NAS TLBS


Este cap tulo descreve um experimento que visa a monitorar as faltas na TLB durante a execuo de um programa que causa um n mero denido de faltas nesta estrutura. ca u O objetivo dos experimentos observar o comportamento das faltas na L1 e L2 TLB ` e a medida que o tamanho do buer percorrido na execuo do programa supera a capacidade ca do n da TLB testado. vel

6.1

Descrio do programa ca

Para causar a quantidade de faltas esperadas durante a sua execuo, a cada passo do ca teste, o programa aloca um conjunto de n pginas e as percorre 500 vezes, efetuando uma a leitura em cada pgina. Dessa forma espera-se que a cada passo ocorra ao menos uma a falta a mais que no passo anterior. O algoritmo do programa mostrado em linguagem e C na Figura 6.1. Uma rea de tamanho n/5 a
1

alocada para separar a rea original de tamanho n e a

daquela que ser alocada com tamanho n + 1. As reas de tamanho n e n/5 so liberadas a a a somente aps a alocao da nova rea, que ento percorrida 500 vezes. O separador o ca a e a de tamanho n/5 diminui a probabilidade de que dois testes consecutivos usem o mesmo conjunto de pginas, o que reduziria a ocorrncia de faltas pelo reaproveitamento dos a e mapeamentos na TLB.

6.2

Preparao do Experimento ca

Esta seo descreve os valores e padres utilizados nos programas para cada teste, alm ca o e dos parmetros de congurao utilizados no Oprole Estendido. a ca
1

n/5 foi o valor escolhido. Entretanto, este poderia ser qualquer outro valor, tal como n/3, n/7, etc.

28
... /* aloca o tamanho inicial do buffer */ buffer1 = malloc (n); do { /* repete 500 itera~es */ co for (i = 0; i < 500; i ++) /* acessa todo o buffer, pgina por pgina */ a a for (size = 0; size < n; size + pagesize) tmp = buffer1[size]; /* incrementa o buffer em uma pgina para a prxima sequ^ncia de 500 a o e acessos */ n+=pagesize; /* separa duas aloca~es consecutivas */ co buffer2 = malloc(n/5); /* aloca um buffer novo */ buffer3 = malloc(n); free(buffer2); free(buffer1); /* aponta buffer1 para o buffer recm alocado */ e buffer1 = buffer3; } while (n < max); ...

Figura 6.1: Cdigo C do programa que causa faltas controladas nas TLBs. o

6.2.1

Parmetros dos Programas a

Os tamanhos inicial e nal do buer so denidos pelo usurio. O programa tambm a a e aceita o n mero de iteraes que o loop deve executar e o incremento da quantidade de u co pginas a cada sequncia de iteraes do loop. Em cada experimento, o programa executou a e co 500 iteraes do loop acrescentando 1 pgina ao buer a cada sequncia de iteraes. co a e co Trs medies foram realizadas com este programa. A primeira ao percorrer um buer e co variando entre 0 e 349 pginas, na qual foram medidas as faltas nas TLBs de primeiro e a segundo n veis. A segunda, percorrendo um buer variando entre 22 e 41 pginas em que a foram medidas as faltas na L1 TLB e a terceira, percorrendo um buer variando de 250 a 279 pginas, na qual foram medidas as faltas na L2 TLB. a

29

6.2.2

Congurao do OProle Estendido ca

A congurao utilizada no Oprole Estendido foi a mesma em todos os testes: (i) Cpu_ ca Clk_Unhalted, 150.000 eventos; (ii) Data_Cache_Accesses, 500.000 eventos; (iii) L1_ Dtlb_Misses_L2_Dtld_Hits, 500.000 eventos; e (iv) L1_And_L2_Dtlb_Misses, 500.000 eventos. A taxa de amostragem denida pelo evento Cpu_Clk_Unhalted. Os demais evene tos esto congurados apenas para ajustarem os contadores aos eventos a se monitorar. a Apesar de todos estes eventos serem monitorados em todos os testes, apenas os eventos relevantes a cada teste so apresentados nos resultados. a

6.3 6.3.1

Resultados dos Experimentos Buer de 0 a 349 pginas a

O grco da Figura 6.2 apresenta as faltas ocorridas durante a execuo do programa a ca percorrendo buers com tamanho de 0 a 349 pginas. A primeira linha vertical slida a o demarca a capacidade do buer em 32 pginas, a segunda linha vertical slida representa o a o ponto em que o buer atinge 256 pginas e as duas faixas verticais pontilhadas demarcam a o in cio e o nal da execuo do programa. A linha superior representa as faltas na ca L1d-TLB e a inferior as faltas na L2-TLB com fator de escala de 0, 186. O degrau nas duas linhas que medem as faltas nas TLBs prximo ao ciclo 2109 decorre o da execuo de cdigo do kernel, libc e Oprole Estendido. Este degrau nas contagens ca o dos eventos associado ` execuo de cdigo do OProle indica o momento em que o SO a ca o pra a execuo do programa monitorado e passa a executar o cdigo do OProle para a ca o sincronizar os buers do OProle bem como salvar dados das amostras coletadas. A Tabela 6.1 mostra o que executado pelo processador no trecho do log de amostras e do Oprole Estendido extra do intervalo em que ocorre o degrau. Na primeira coluna da do Tabela 6.1 esto os valores referentes ao ciclo em que foi realizada a leitura dos contadores, a na segunda coluna esto os nomes dos binrios que estavam sendo executados no momento a a da leitura, na terceira, quarta e quinta coluna esto os valores ajustados dos contadores que a

30
Faltas na DTLB

2,5e+07

2e+07

Contagem

1,5e+07

1e+07

5e+06

0 0 5e+08 1e+09 1,5e+09 Ciclos L1_DTLB_MISSES_L2_DTLD_HITS L1_AND_L2_DTLB_MISSES: 0,186 Execuo Buffer = 32 ou 256 2e+09 2,5e+09 3e+09

Figura 6.2: Faltas na L1 e L2 DTLB percorrendo buers entre 0 e 349 pginas. a

registram os eventos Cpu_Clock_Unhalted, L1_Dtlb_Misses_L2_Dtld_Hits e L1_and_ L2_DTLB_Misses respectivamente. Os nomes dos binrios na segunda coluna mostram a que o programa tlb_teste parou de ser executado durante este intervalo da medida, enquanto o Oprole Estendido realizou a sincronizao dos seus registros. ca Sobre o comportamento das faltas na hierarquia de memria apresentado na Figura 6.2, o durante a metade esquerda do grco as faltas na L1 TLB aumentam a partir do ponto a em que o buer atinge 32 pginas a capacidade da L1 TLB na primeira linha vertical a slida. A partir deste ponto, as faltas nesse n continuam ocorrendo na medida em que o vel mais e mais pginas so alocadas. a a Quando o tamanho do buer se aproxima da capacidade da L2 TLB, o n mero de u faltas naquela aumenta lentamente. Quando a capacidade da L2 ultrapassada centro e da gura o n mero de faltas na L2 TLB aumenta gradativamente a medida em que u mais pginas so alocadas para o buer, enquanto a contagem de faltas na L1 TLB a a parece diminuir. A reduo na contagem das faltas na L1 TLB se deve ` prpria denio do evento ca a o ca

31
Ciclo 2004291143 2004442118 2004455914 2004592743 2004743619 2004894172 2005044853 2005195523 2005346466 2005371143 2014107167 2014258021 2014408780 2014559754 2014645408 2014710594 2014861908 2015012886 2015163807 2015314592 Binrio a tlb teste oprole oprole oprole oprole oprole vmlinux vmlinux vmlinux oprole vmlinux libc-2.3.6.so vmlinux libc-2.3.6.so vmlinux oproled vmlinux vmlinux vmlinux vmlinux Clock Unhalted 235494181 235548720 235555491 235627403 235710063 235795961 235876816 235960173 236042444 236055612 ... 237882634 237931057 237976297 238020696 238056054 238071539 238133560 238179766 238229001 238274002 L1 M L2 H 20996488 20996736 20996736 20996736 20996736 20996736 20996737 20996738 20996739 20996739 20997489 20997527 20997547 20997582 20997605 20997610 20997652 20997664 20997702 20997721 L1 & L2 M 990284 990402 990404 990410 990416 990423 990430 990448 990457 990458 1016162 1016803 1017637 1018400 1018955 1019272 1020043 1021159 1021916 1023022

Tabela 6.1: Trecho do log do OProle no qual ocorre o degrau da Figura 6.2.

monitorado, uma vez que ele conta faltas na L1 com acertos na L2 TLB. A partir do momento em que as faltas na L1 no correspondem a acertos na L2, a contagem desses a eventos na L1 tende a diminuir uma vez que aumentam as faltas na L2 TLB. Outro fator que colabora para a reduo das faltas na L1 TLB na segunda metade do ca experimento o custo mais elevado das faltas na L2: o n mero de ciclos decorridos entre e u duas faltas na L2 TLB superior ao de duas faltas na L1 TLB com acertos na L2 TLB. e As faltas na L2 TLB causam uma reduo na taxa de faltas por ciclos, mas no no total ca a de faltas. O resultado deste experimento coincide com o esperado: enquanto as pginas percora ridas so todas mapeadas pela L2 TLB, a taxa de faltas na L1 TLB aproximadamente a e constante. Quando o n mero de pginas percorridas excede a capacidade da L2 TLB, u a o n mero de faltas nesta aumenta gradativamente, assim como diminui a contagem de u faltas na L1 com acertos na L2 TLB. Outro efeito do aumento das faltas na L2 TLB o e aumento do custo relativo de cada falta na L1 TLB.

32
Faltas na L1DTLB 200000

150000

Contagem

100000

50000

0 0 5e+06 1e+07 1,5e+07 2e+07 Ciclos L1_DTLB_MISSES_L2_DTLD_HITS Execuo do programa Buffer = 32 2,5e+07 3e+07 3,5e+07

Figura 6.3: Faltas na L1 DTLB percorrendo buers entre 22 e 41 pginas. a

6.3.2

Buer de 22 a 42 Pginas a

A Figura 6.3 mostra as faltas ocorridas na L1 DTLB enquanto o programa percorre buers com tamanhos entre 22 e 41 pginas. As linhas verticais pontilhadas representam a o intervalo de tempo em que o programa foi executado e a linha vertical slida marca o o ponto em que o buer atinge o tamanho de 32 pginas, que a capacidade da L1 TLB. a e A linha plotada apresenta a contagem de faltas na L1 TLB ao longo da execuo do ca programa. Como visto no Cap tulo 5, a hierarquia de TLBs do Athlon possui dois n veis. A TLB de primeiro n vel, L1d-TLB contm 32 mapeamentos, totalmente associativa com e e reposio least recently used (LRU) [19]. E esperado que, antes da utilizao de 32 pginas, ca ca a cada ciclo de 500 acessos acumule apenas o n mero de faltas correspondente ao espao u c alocado: um buer de 27 pginas causa 27 faltas na primeira volta do loop, enquanto que a nas outras 499 voltas nenhuma falta ocorre porque os 27 mapeamentos j esto carregadas a a na TLB. Acima do limite de 32 pginas, espera-se que todos os acessos realizados em todas a

33 as iteraes do loop causem faltas, o que caracteriza o estado de thrashing na L1d-TLB. co Isso esperado porque, sendo a reposio por LRU, cada nova pgina mapeada alm das e ca a e 32 expurga um mapeamento que ser reutilizado em breve. a Considerando que programa usa ao menos uma pgina adicional para sua pilha, podea se considerar que o limite de thrashing na L1d-TLB 31 pginas. Desta forma, o n mero e a u de faltas esperado quando o programa de testes percorre de 22 a 31 faltas o somatrio de e o todos estes valores: 265 faltas. Na segunda metade do experimento, quando so percora ridas de 32 a 41 pginas, o valor estimado a soma dos valores do intervalo multiplicado a e pelo n mero de iteraes do loop: 182.500 faltas. O total de faltas esperado 182.765 u co e faltas, que a soma dos valores estimados nas duas etapas do teste. e A Figura 6.3 mostra a contagem de faltas na medida em que o tamanho do bloco percorrido aumenta de 22 a 41 pginas. Antes da medio atingir o ponto de interesse, a ca aps a carga do programa, faltas decorrentes da alocao da pilha e de dados do programa o ca so registradas, totalizando 1.258 faltas. No momento em que o teste propriamente dito a se inicia, as faltas crescem linearmente com o tamanho da rea alocada pois ainda h a a registros livres na L1-TLB. Quando so alocadas mais de 2830 pginas, a L1d-TLB a a entra em thrashing, como esperado. Ao nal do teste, desprezados os valores anteriores ` a execuo do programa, so contabilizadas 188.953 faltas, 3% acima do esperado. ca a E importante observar que a estimativa para o n mero de faltas no modela elmente u a o que ocorre no processador, enquanto este executa o programa sobre um SO multitarefa, concorrentemente `s demais aplicaes. A decincia da estimativa torna-se evidente a co e quando se observa a ampliao do grco na Figura 6.4: cada echa indica o tamanho do ca a buer a ser percorrido (n mero de pginas). E poss observar que entre o regime normal u a vel e o de thrashing, h um regime intermedirio entre 29 e 31 pginas no qual a taxa a a a de faltas aumenta muito, possivelmente em virtude dos conitos de mapeamento entre o programa de teste e os demais processos, mas ainda no o suciente para caracterizar o a thrashing, evidenciado a partir do ponto em que o buer atinge o tamanho de 32 pginas, a quando a inclinao do grco se aproxima da vertical. ca a E poss vel observar degraus no grco da Figura 6.4, o que nos permite contar o a

34
Faltas na L1DTLB: Transio at o estado de thrashing 3200

32 2800 31 Contagem 2400 30

2000 29 28

1600

1,2e+07

1,3e+07

1,4e+07

1,5e+07 Ciclos

1,6e+07

1,7e+07

1,8e+07

L1_DTLB_MISSES_L2_DTLD_HITS Execuo do programa

Buffer=32

Figura 6.4: Transio entre o regime de funcionamento normal e o thrashing na L1 DTLB. ca

n mero de faltas para cada tamanho de buer percorrido. A Tabela 6.2 apresenta a u comparao entre valores contados nos degraus e os valores estimados para alguns trechos ca da execuo do programa, e o total de faltas medidas no experimento. ca
Intervalo [pg] a 23 24 36 37 Total Medido 42 33 18.427 20.197 188.953 Estimado 23 24 18.000 18.500 182.765

Tabela 6.2: Faltas na L1d-TLB.

6.3.3

Buer de 250 a 280 Pginas a

O grco na poro superior da Figura 6.5 mostra as faltas ocorridas na L2 DTLB ena ca quanto o programa percorre buers com tamanho variando de 250 a 279 pginas. As a linhas verticais pontilhadas demarcam o intervalo em que o programa foi executado enquanto a linha vertical slida marca o ponto em que o buer atinge o tamanho de 256 o

35 pginas. a No in cio da execuo do programa, quando so alocadas 250 pginas, a contagem ca a a de faltas na L2 TLB aumenta de forma gradativa, antes mesmo do buer atingir 256 pginas. Isso ocorre porque o programa comea a execuo utilizando um tamanho de a c ca buer prximo do limite da TLB, o que gera conitos de mapeamento entre os endereos o c utilizados pelo buer no programa e os endereos utilizados pelo SO ou pelos demais c programas em execuo na mquina. ca a A partir do momento em que o buer atinge o tamanho da L2 TLB, a inclinao da ca linha aumenta a cada incremento no tamanho do buer. A poro inferior da Figura 6.5 ca apresenta a ampliao de um trecho da execuo no qual poss identicar os pontos em ca ca e vel que ocorrem aumentos no tamanho do buer. No grco, cada degrau da linha equivale a a um novo buer, de tamanho n + 1, percorrido pelo programa. Conrmando a relao entre os degraus no grco e o tamanho do buer no programa, ca a nesta gura poss e vel contar seis degraus na linha vermelha antes do ponto em que o n mero de pginas do buer chega a 256, lembrando que o programa inicia a sua execuo u a ca com um buer de 250 pginas. Existem 30 degraus ao longo de toda a extenso da mesma a a linha, na poro superior da Figura 6.5. ca Era esperado que a taxa de faltas na L2 TLB apresentasse um comportamento similar ao da L1 TLB na Figura 6.3. Entretanto, comparando as estruturas das duas TLBs, apresentadas no Cap tulo 5, e vericando o grco de cada uma, conclui-se que a difea rena entre o comportamento das duas TLBs ocorre porque, enquanto a L2 TLB possui c associatividade quaternria, a L1 TLB possui associatividade total e reposio LRU. a ca Enquanto a L1 TLB se comporta como descrito na Seo anterior, a L2 TLB mapeia ca 256 pginas com associatividade 4, distribuindo-as em 64 linhas, cada uma com 4 possia bilidades de lugar para inserir um dado mapeamento. O local de insero varia de acordo ca com o mtodo de reposio utilizado. No in da execuo, por ainda haverem registros e ca cio ca ` livres na TLB, quase no ocorrem faltas. A medida que o tamanho do buer aumenta, a a quantidade de faltas cresce lentamente. Quando o tamanho do buer supera o tamanho da L2 TLB, o reaproveitamento pro-

36
Faltas na L2DTLB 450000

375000

300000 Contagem

225000

150000

75000

0 0 5e+07 1e+08 1,5e+08 2e+08 Ciclos L1_AND_L2_DTLB_MISSES Execuo do programa Faltas na L2 TLB 75000 Buffer = 256 2,5e+08 3e+08 3,5e+08

60000

Contagem

45000 5 4 30000 2 1 15000 3

0 0 2,5e+07 5e+07 7,5e+07 Ciclos 1e+08 1,25e+08 1,5e+08

L1_AND_L2_DTLB_MISSES Execuo do programa

Tamanho do buffer = 256

Figura 6.5: Acima: faltas na L2 DTLB percorrendo buers entre 250 e 279 pginas. Abaixo: a ampliao do grco demontrando a transio entre buers. ca a ca

37 porcionado pela associatividade quaternria da L2 TLB piora e a quantidade de faltas a cresce gradativamente. Caso este experimento fosse executado para um intervalo maior de pginas, o ponto a partir do qual a linha plotada no grco se tornasse uma linha reta, a a similar `quela da Figura 6.3, representaria o ponto da execuo em que a L2 TLB entrou a ca em thrashing. Assim como apresentado para a L1 TLB na Figura 6.3, o estado de thrashing na L2 TLB caracterizado por um aumento no tamanho do buer sem um aumento proe porcional na inclinao da reta que representa a contagem de faltas nesta estrutura. Isto ca ocorre quando o limite da TLB excedido ao ponto de no se conseguir mais reaproveie a tar nenhum endereo presente nesta estrutura. Deste instante em diante, cada acesso ` c a pgina do buer causa uma falta e a contagem de faltas aproximadamente a mesma que a e a contagem de acessos at o trmino do teste. e e

38

CAP ITULO 7 ANALISE DA MULTIPLICACAO DE MATRIZES


Programas de multiplicao de matrizes so simples e tm um padro de acessos ` memria ca a e a a o ruim. O acesso aos elementos dispostos em colunas causa faltas na cache a cada elemento acessado. No melhor caso, ao se multiplicar matrizes pequenas, o acesso aos elementos da primeira coluna de uma matriz faz com que os elementos seguintes sejam carregados automaticamente no bloco da cache, reduzindo as faltas compulsrias nos acessos o subsequentes. ` A medida que o tamanho das matrizes aumenta, os elementos dispostos nas colunas que j esto carregados na cache conitam com novos elementos da mesma coluna quando a a a capacidade da cache atingida. Por este motivo, o desempenho do programa piora e drasticamente. Para evitar este comportamento indesejado, existem diferentes otimizaes co que reduzem conitos de mapeamento e tiram proveito da hierarquia de memria a m o de melhorar o tempo de execuo desses programas. ca O experimento descrito nesta seo tem como objetivo demonstrar a medio de falca ca tas nas caches L1 e L2 do sistema, durante a execuo de programas de multiplicao de ca ca matrizes com diferentes n veis de otimizao. Este experimento tambm avalia a interca e ferncia nas medidas causada pelo Oprole Estendido durante a execuo dos testes. A e ca interferncia discutida em mais detalhe no Cap e e tulo 9. Apesar do experimento medir apenas eventos nas caches do sistema, a importncia a das TLBs no desempenho dos programas no foi ignorada. Para que a ecincia dos a e programas otimizados seja evidenciada necessria a utilizao de matrizes de tamanho e a ca superior ` capacidade da L2 TLB do sistema. Dessa forma, o programa que zer o melhor a uso da hierarquia de memria do processador obter desempenho superior. o a Neste experimento foram utilizadas matrizes de 1.024 linhas por 1.024 colunas com elementos do tipo double, ocupando cada matriz 8Mbytes. A L2 TLB do Athlon possui

39 256 elementos [19] para pginas de 4Kbytes, totalizando aproximadamente 1Mbyte de a capacidade de mapeamento. A L1 cache do processador possui 512 linhas com dois blocos de 64 bytes cada, totalizando 64Kbytes de capacidade. No caso, uma linha da matriz ocupa 128 blocos da cache em linhas distintas. Quatro programas para a multiplicao de matrizes foram selecionados para a reaca lizao deste teste, so eles: (i) Multiplicao de matrizes convencional, no otimizado; ca a ca a (ii) Multiplicao de matrizes com padding; (iii) Multiplicao de matrizes com blocagem; ca ca e (iv) Multiplicao de matrizes com padding e blocagem. ca

7.1

Estudo das Otimizaes Testadas co

Esta seo descreve o funcionamento dos programas de multiplicao de matrizes e suas ca ca otimizaes, sob o ponto de vista da hierarquia de memria. co o

7.1.1

Multiplicao Convencional ca

Boa parte do mau desempenho da multiplicao de matrizes decorrente de conitos ca e de endereamento entre as matrizes: as posies de uma matriz que esto sendo acessac co a das num determinado instante podem estar mapeadas na mesma regio da cache que as a posies equivalentes das duas outras matrizes envolvidas na multiplicao. Nesse caso, co ca cada acesso a um determinado elemento de cada matriz pode causar uma falta em qualquer das estruturas da hierarquia de memria, o que anula os benef o cios de acesso rpido a proporcionados por esta hierarquia. A Figura 7.1 apresenta o padro de referncias acessados durante a multiplicao de a e ca matrizes quadradas de ordem 64 pelo programa normal em que A B = C. Cada linha dessas matrizes ocupa 8 linhas da cache e os pontos em vermelho, verde e azul indicam endereos das matrizes A, B e C respectivamente. O eixo vertical indica a linha da c cache L1 acessada e o eixo horizontal representa o tempo: a cada elemento multiplicado, os endereos dos operandos so impressos. Todas as demais guras referentes a acessos c a de endereos seguirem este padro e utilizaram as mesmas matrizes. c a

40

Figura 7.1: Endereos acessados na multiplicao de matrizes convencional. c ca

No programa, para obter o valor de um elemento da coluna C, preciso que uma e linha inteira de A multiplique uma coluna inteira de B. Na Figura 7.1 observa-se que enquanto as colunas de B so acessadas, os pontos do grco que representam o endereo a a c de B so plotados na vertical pois cada coluna se encontra numa linha de cache diferente. a Enquanto isso, ` medida que a mesma linha de A acessada, a variao vertical a e ca dos pontos de A de 8 linhas, ou a regio ocupada por uma linha da matriz na cache. e a A cada ciclo de multiplicao de linha de A por coluna de B, um endereo de C ca c e acessado. Finalmente, a cada 8 endereos sequenciais acessados para C, a linha de cache c do endereo de C muda. c Este padro de acessos se repete durante toda a execuo do programa e os pontos a ca do grco nos quais os endereos das trs matrizes so plotados no mesmo lugar indicam a c e a conitos de endereamento. Neste grco especicamente, nota-se as matrizes A e C c a esto mapeadas nas mesmas linhas da cache, o que causa um constante conito de ena dereos entre as duas matrizes. Dependendo do ciclo da multiplicao tambm ocorrem c ca e conitos de mapeamento entre as trs matrizes. e

41

Figura 7.2: Endereos acessados na multiplicao de matrizes com padding. c ca

7.1.2

Multiplicao com Padding ca

Para resolver o problema dos conitos de mapeamento, utiliza-se a tcnica de padding, e que consiste em separar as faixas de endereos das matrizes de forma que elas sejam mac peadas em diferentes linhas de cache. Para isso, entre cada declarao de matriz que ser ca a multiplicada declarado um vetor do tamanho de uma ou mais linhas de cache que no e a e utilizado durante a execuo do programa. Os vetores vazios deslocam o mapeamento dos ca endereos das matrizes, alterando a linha de cache onde elas sero mapeadas e reduzindo c a os conitos de memria e, consequentemente, o desempenho do programa melhora. A o Figura 7.2 apresenta o padro de acesso de endereos do programa que realiza a multia c plicao de matrizes com padding. Nesta gura poss observar que a matriz C est ca e vel a mapeada em linhas de cache distintas das de A, devido ` separao das diagonais que a ca representam os endereos dessas matrizes, diferentemente da Figura 7.1. c

42

7.1.3

Multiplicao com Blocagem ca

Outra forma de melhorar o desempenho da multiplicao de matrizes aumentar o aproca e veitamento das caches do sistema. Para se obter um linha de C, uma mesma linha de A multiplica cada coluna de B. Para a prxima linha de C, a mesma linha de A o multiplica cada coluna de B novamente. Considerando o caso em que as matrizes sejam grande demais para a L1, periodicamente os dados das matrizes so expurgados da cache a e tm de ser recuperados na memria principal a cada ciclo de acessos, o que piora o e o desempenho j que acessos ` memria so custosos. a a o a A blocagem tira proveito da hierarquia de memria dividindo as matrizes em blocos o de tamanhos menores, compat veis com o da cache, otimizando a quantidade de operaes co realizadas entre cada busca de elementos das matrizes na memria principal. O cdigo o o da multiplicao com blocagem utilizado o mesmo apresentado em [17]. ca e O comportamento dos acessos aos endereos similar ao da multiplicao de matrizes c e ca convencional mas o espao de memria percorrido menor. Na Figura 7.3, poss c o e e vel observar que o espao vertical representado pelos acessos `s colunas de B ocupa apenas c a 256 linhas a cada bloco utilizado ao invs de toda a cache. Isso ocorre porque apenas um e bloco da matriz B est sendo acessado, coluna por coluna, para cada linha dos blocos a de A e C que so percorridas. Nota-se tambm que o tamanho das marcas no grco a e a que representam os acessos a A e C so menores do que as marcas apresentadas na a Figura 7.1, tambm por causa da blocagem j que a linha do bloco mais curta do que a e a e linha da matriz. Ainda poss visualizar a troca de blocos em C durante a execuo e vel ca do programa.

7.1.4

Multiplicao com Padding e Blocagem ca

E poss vel combinar as duas tcnicas, separando a faixa de endereos das matrizes na e c declarao para evitar conitos de mapeamento e utilizando a tcnica de blocagem para ca e otimizar a utilizao da hierarquia de memria. O padro de acessos ` memria durante a ca o a a o multiplicao das matrizes com a combinao de padding e blocagem pode ser observado ca ca na Figura 7.4, na qual poss vericar o mesmo comportamento da Figura 7.3 mas e vel

43

Figura 7.3: Endereos acessados na multiplicao de matrizes com blocagem. c ca

com os endereos das linhas de bloco da matriz C separados dos da matriz A. O cdigo c o do programa de multiplicao com blocagem e padding est no Apndice B. ca a e

7.2

Preparao do Experimento ca

Esta seo descreve os valores de bloco e padding utilizados nos experimentos de medida ca que deniram os casos a serem estudados, assim como as conguraes utilizadas no co Oprole Estendido para cada programa monitorado.

7.2.1

Parmetros dos Programas a

Trs fatores foram levados em conta para a preparao dos testes: o tamanho de uma e ca linha da cache do sistema, o tamanho da cache do sistema e o n mero de linhas de cache u que uma linha de matriz ocupa. O tamanho da linha da cache do sistema foi utilizado para determinar o tamanho m nimo do padding utilizado na separao das matrizes: o tamanho do padding deve ser ca

44

Figura 7.4: Endereos acessados na multiplicao de matrizes com padding e blocagem. c ca

sempre um m ltiplo da linha de cache, que tem 64 bytes ou 8 doubles. Dessa forma, u cada in de linha da matriz coincide com um in de linha de cache, o que otimiza cio cio o acesso aos dados, uma vez que a carga do primeiro elemento de uma linha de cache resulta na carga antecipada de todos os elementos da mesma linha. Este valor tambm e foi utilizado para determinar o passo do aumento do bloco no teste de blocagem: blocos de tamanho m ltiplo da linha de cache tambm tiram proveito da busca antecipada e u e obtm um desempenho superior. e O tamanho da cache do sistema foi utilizado para determinar o melhor tamanho de bloco para o programa. O ideal que a cache do sistema comporte os trs blocos acessados e e durante cada etapa da multiplicao. Neste caso, o tamanho mximo que um bloco pode ca a ter 48 elementos (48 linhas 48 colunas 3 blocos 8 bytes por elemento = 55.296 e bytes). O prximo valor de bloco a ser testado seria de 56 elementos, o que totaliza um o espao de 75.264 bytes, maior que capacidade da L1 que de 65.536 bytes. c e O n mero de linhas de cache ocupadas por uma linha da matriz pode ser utilizado para u denir um tamanho de padding que seja mais apropriado do que o de apenas uma linha

45 da cache. Se o padding no for grande o suciente para separar as linhas das matrizes A a e C, haver na cache uma rea de sobreposio entre as duas matrizes que ocasionar a a ca a faltas por conito durante a multiplicao. Se cada linha da matriz ocupa 128 linhas ca de cache, este valor seria suciente para evitar essa sobreposio. Porm, sendo 128 uma ca e potncia de 2, existe a possibilidade dos mapeamentos das matrizes coincidirem na mesma e regio da cache. Por isso, foram utilizados os valores de padding de 133 linhas entre A e a B e 135 linhas entre B e C. Denidos os valores, blocos variando de 0 a 48 elementos e padding escolhido dentre 0, 1 e 133 e 135 linhas, o desempenho dos programas foi medido para cada combinao ca de parmetros. Medidas de tempo foram realizadas durante vinte execues de cada um a co dos programas com o utilitrio time. A mdia dessas medidas serviu para a denio a e ca do tamanho ideal de padding e de bloco utilizados nos programas, de forma que fossem obtidos os menores tempos de execuo. A partir desses resultados, os programas com ca melhor e pior desempenho foram selecionados para a anlise com o Oprole Estendido. a Os resultados das medidas de tempo podem ser vistos na Tabela 7.1, em que a primeira coluna apresenta o tamanho dos blocos utilizados, a segunda coluna apresenta os resultados de tempo para execues sem padding, a terceira coluna apresenta os resultaco dos para padding de uma linha de cache entre cada matriz e a quarta coluna o resultado para padding de 133 linhas de cache entre a primeira e a segunda matriz e de 135 entre a segunda e a terceira matriz. A primeira linha da Tabela 7.1 apresenta os tempos em segundos para a multiplicao ca de matrizes convencional, sem blocagem, para os diferentes valores de padding utilizados. Dos demais valores da tabela poss concluir que nem sempre h ganho de desempenho e vel a utilizando padding diferente de uma linha e que o tamanho ideal de bloco est entre 16 e a 32 elementos: valores de bloco maiores ou menores que estes degradam o desempenho do programa neste processador. Para a anlise com o Oprole Estendido, cada experimento foi realizado 20 vezes a e os resultados apresentados nos grcos e tabelas das prximas sees representam a a o co mdia das 20 execues, exceto quando explicitamente mencionado. Os casos selecionados e co

46
Bloco 0 8 16 24 32 40 48 0 214,7 30,6 26,6 25,5 25,7 69,6 107,3 Padding 1 133 e 135 99,8 98,9 30,1 30,3 24,1 24,2 22,7 22,8 22,8 22,3 51,8 25,4 97,7 101,3

Tabela 7.1: Tempo de execuo da multiplicao de matrizes variando bloco e padding. ca ca

para a anlise com o Oprole Estendido pelo critrio do melhor e pior tempo foram a a e multiplicao convencional, sem otimizaes e a multiplicao com padding de 133 e 135 ca co ca linhas e blocos de 32 elementos.

7.2.2

Conguraes do OProle Estendido co

Os eventos selecionados para a observao nesses experimentos foram: (i) Data_Cache_ ca Accesses; (ii) Data_Cache_Refills_from_L2 e; (iii) Data_Cache_Refills_from_System. O contador de ciclos de relgio Cpu_Clock_Unhalted foi congurado de acordo com o o tempo de execuo de cada um dos experimentos de forma que a quantidade de informao ca ca registrada pelo Oprole Estendido seja equivalente. Sendo o tempo mdio de execuo do programa de multiplicao de matrizes normal e ca ca aproximadamente 9 vezes maior do que o tempo mdio de execuo da multiplicao de e ca ca matrizes otimizada, o contador de ciclos foi congurado para interromper o processador a cada 1.800.000 ciclos ativos durante a multiplicao normal. Na multiplicao com ca ca padding e blocagem, o valor de overow do contador foi ajustado em 250.000 ciclos. A diferena entre o valor de leitura da funo readtsc() e os valores dos contadores c ca registrados no ciclo de relgio mais prximo do in ou do trmino da execuo do o o cio e ca trecho do programa que se quer monitorar no apresenta problemas para a visualizao dos a ca dados nos grcos. No entanto, dependendo da frequncia da amostragem dos contadores, a e pode-se perder preciso na medida da contagem total dos eventos. a Para contornar esse problema e obter as contagens dos eventos monitorados no ponto

47 em que ocorreu a chamada ` funo readtsc(), feita uma aproximao calculando a a ca e ca variao do n mero de eventos monitorados em relao a variao do n mero de ciclos ca u ca ` ca u registrados. A variao do n mero de eventos ento multiplicada pela diferena entre a ca u e a c ultima leitura do TSC ocorrida antes da chamada ` readtsc() e o valor retornado por a esta funo. Dessa forma, esperado que se mantenha um grau razovel de conabilidade ca e a na medida mesmo utilizando taxas de amostragem distintas.

7.3

Resultados dos Experimentos

Esta seo apresenta os resultados dos experimentos assim como algumas solues adotaca co das na apresentao dos mesmos. ca

7.3.1

Comportamento dos Programas

A multiplicao convencional apresentou um comportamento bastante estvel em todas ca a as execues. Aparentemente, o uso da hierarquia de memria por esse programa ruim a co o e ponto do seu desempenho no ser prejudicado por interferncias do Sistema Operacional a e (SO). No caso da multiplicao com blocagem e padding, o tempo de execuo varia ca ca bastante entre as medidas, em razo deste programa tirar um bom proveito da hierarquia a de memria e consequentemente ser mais sens `s interferncias do SO. o vel a e Para contornar o problema da instabilidade nas medidas de tempo da multiplicao ca com padding e blocagem, foram realizadas, ao invs de 20, 60 medidas de execuo deste e ca programa com o Oprole Estendido. A execuo com os valores de ciclos e contagem de ca faltas mais prximas `s das mdias das 60 medidas foi utilizada para plotar os grcos o a e a apresentados nessa e nas sees que referenciem este experimento. Os demais dados co apresentados, contagens e taxas, so referentes ` mdia das contagens das 60 execues. a a e co Nos grcos que apresentam as medidas do Oprole Estendido para cada programa a monitorado, a primeira linha da legenda representa os acessos ` cache L1, a segunda linha a representa as faltas ocorridas na L1 que corresponderam a acertos na L2, a terceira linha representa as faltas da L1 que ocasionaram faltas na L2, a quarta linha indica o in e cio

48 o nal da execuo do programa e os eixos X e Y representam os ciclos de relgio e a ca o contagem de eventos respectivamente. Os valores apresentados ao lado de cada linha na legenda indicam os fatores de ajuste de cada uma, que o valor pelo qual a linha deve ser multiplicada para que ela entre na e sua escala normal. A linha de evento sem fator de ajuste apresenta a contagem do evento obtida diretamente atravs do Oprole Estendido. e

7.3.2

Contagem dos Eventos

Apesar do programa de multiplicao otimizado ser 8,5 vezes mais rpido do que o proca a grama normal, os grcos plotados a partir do registro do Oprole Estendido para os dois a programas so praticamente iguais, a menos dos valores das contagens de eventos e os a fatores de ajuste apresentados em cada legenda dos grcos da Figura 7.5. Em princ a pio, no h evidncia visual que justique a diferena de desempenho entre os programas alm a a e c e da discreta separao entre a linha que conta os acessos ` cache e as linhas que contam ca a as faltas nessa estrutura, que pode ser observada na poro inferior da Figura 7.5. ca Os valores aproximados das medidas obtidas no registro do Oprole Estendido so a mostrados na Tabela 7.2. Nessa tabela, a primeira coluna apresenta os tipos de programas estudados, a segunda coluna o total de ciclos, a terceira coluna os acessos ` cache a (Data_Cache_Accesses), a quarta e quinta colunas apresentam as recargas oriundas da L2 (Data_Cache_Refills_from_L2) e do sistema (Data_Cache_Refills_from_System) respectivamente. O total de faltas na L1 calculado a partir da soma das recargas proe venientes da L2 e do sistema. Analisando as contagens dos eventos, a multiplicao normal realiza pouco mais do ca que a metade dos acessos ` cache efetuados pela multiplicao otimizada. Ainda assim, a a ca multiplicao normal precisa de uma quantidade de ciclos 8,5 vezes maior que a utilizada ca
Programa Convencional Otimizado Ciclos 4,32 1011 5,05 1010 Acessos ` L1 a 1,66 1010 2,96 1010 Faltas na L1 2,15 109 1,06 109 L1 L2 1,08 109 1,03 109 L1 sistema 1,07 109 3,4 107

Tabela 7.2: Contagem dos eventos para os programas de multiplicao de matrizes. ca

49
Mmatriz convencional 1,8e+10 1,6e+10 1,4e+10 1,2e+10 Contagem 1e+10 8e+09 6e+09 4e+09 2e+09 0 0 5e+10 1e+11 1,5e+11 2e+11 Ciclos DATA_CACHE_ACCESSES DATA_CACHE_REFILLS_FROM_L2: 0,064 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,064 Execuo Mmatriz com padding e blocagem 3e+10 2,5e+11 3e+11 3,5e+11 4e+11

2,5e+10

2e+10 Contagem

1,5e+10

1e+10

5e+09

0 0 1e+10 2e+10 Ciclos DATA_CACHE_ACCESSES DATA_CACHE_REFILLS_FROM_L2: 0,034 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,0008 Execuo 3e+10 4e+10 5e+10

Figura 7.5: Monitoramento da cache de dados durante a multiplicao convencional ca (acima) e a multiplicao com padding e blocagem. ca

50 pelo programa otimizado. No caso, a multiplicao normal realiza acessos ` cache a uma ca a taxa de 0,038 acessos para cada ciclo de relgio enquanto a multiplicao otimizada atinge o ca a taxa de 0,586 acessos por ciclo. Este aumento na taxa de acessos ocorre porque, na multiplicao otimizada, alm dos dados serem acessados de maneira diferente, a maioria ca e das faltas na cache L1 resultam em acertos na cache L2. Sendo os acessos ` L2 mais a rpidos do que os acessos ` memria principal, o n mero de ciclos em que o processador a a o u ca parado aguardando os dados da memria menor no programa otimizado. o e Na multiplicao normal, 12,9% dos acessos ` cache L1 realizados resultam em faltas. ca a Deste percentual, 50,4% so repostos pela L2 e 49,6% pelo sistema de memria. No caso a o do programa otimizado, 3,5% dos acessos ` L1 resultam em faltas, das quais 97,1% so a a repostos pela L2 e 2,9% pelo sistema, indicando uma melhora signicativa na utilizao ca da L2 e, consequentemente, no desempenho do programa. O ganho de desempenho ocorre porque o processador capaz de continuar executando outras instrues, independentes e co dos dados faltantes, enquanto espera por uma recarga da L2 [17]. Os dados apresentados nesta seo foram obtidos a partir do registro do Oprole Esca tendido. As mesmas informaes tambm podem ser obtidas com o Oprole convencional. co e Entretanto, h uma variao entre as medidas destas ferramentas que ocorre em funo a ca ca da natureza do mtodo de amostragem de cada uma que pode alterar os resultados, e comprometendo a preciso da medida do Oprole. As diferenas entre as medidas realia c zadas com o Oprole Estendido e o Oprole, bem como as suas causas so discutidas no a Cap tulo 10.

7.3.3

Utilizao da Hierarquia de Memria ca o

Ampliando um pequeno trecho da execuo de cada um dos grcos da Figura 7.5, ca a e poss observar as diferenas entre o comportamento de cada programa durante a fase da vel c execuo mostrada no intervalo da ampliao. Na multiplicao convencional, mostrada ca ca ca na Figura 7.6 (topo) nota-se que enquanto os acessos ` cache so relativamente constantes, a a os rells provenientes da L2 ocorrem numa taxa mais baixa do que os 6,4% indicados no fator de ajuste, salvo quando ocorrem pequenos degraus verticais na linha que representa

51 este evento. A linha que representa as recargas ` L1 provenientes do sistema apresenta uma elevao a ca pouco superior aos 6,4% indicados na legenda, mas ela apresenta discretos degraus horizontais nos mesmos pontos em que a linha que representa as recargas da L2 apresenta os ` degraus verticais. A exceo dessa perturbao peridica, o comportamento dos eventos ca ca o no apresenta qualquer variao devido ao padro de acessos ` memria realizado pelo a ca a a o programa. A quantidade de conitos de endereos ocorridos ao longo da execuo do c ca programa constante. e Uma anlise do registro do Oprole Estendido nos trechos onde ocorrem as pera turbaes indica que esta alterao no comportamento dos programas decorrente de co ca e uma descarga (dump) dos buers do Oprole Estendido. Nesta seo, esta interferncia ca e ser utilizada como referncia na comparao entre a utilizao da memria dos dois a e ca ca o programas. No Cap tulo 9 ser apresentada uma anlise mais detalhada da interferncia. a a e No caso da multiplicao otimizada, enquanto os acessos a cache ocorrem com taxa ca ` aparentemente constante, as recargas provenientes da L2 oscilam na faixa dos 3,4% (poro inferior da Figura 7.6). E poss ca vel perceber um padro na oscilao da linha, a ca ocasionado pelas fases da blocagem durante a execuo do programa. Um comportaca mento semelhante apresentado pela linha que representa as recargas da L1 pelo sistema, e que oscila na faixa de 0,08% em relao aos acessos ` cache. ca a Esta oscilao reete o comportamento das faltas na cache ` medida que as colunas de ca a um mesmo bloco b1 so multiplicadas pelas linhas de outro bloco b2. Enquanto a faixa de a endereos ocupada por b1, que est sendo acessada coluna a coluna permanece constante, c a o bloco b2, que percorrido linha por linha, ocupa da primeira ` ultima linha da matriz. e a Dessa forma, o tempo gasto para cada linha de b2 que carregada na cache compensado e e multiplicando-se a linha pelas colunas de b1 que j esto carregadas na cache. a a Devido ao comportamento do programa e ao tamanho das matrizes, ocorrem conitos de endereamento entre as prprias colunas de b1. Pode tambm ocorrer de a linha de b2 c o e estar no mesmo endereo de algum outro dado utilizado. Esses conitos de endereamento c c reetem os trechos com maior inclinao nas linhas que indicam as recargas na L1. Por ca

52
Mmatriz convencional 9,4e+09 9,2e+09 9e+09 8,8e+09 Contagem 8,6e+09 8,4e+09 8,2e+09 8e+09 7,8e+09 2,05e+11 2,1e+11 2,15e+11 2,2e+11 Ciclos DATA_CACHE_ACCESSES DATA_CACHE_REFILLS_FROM_L2: 0,064 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,064 Execuo Mmatriz com padding e blocagem 2,25e+11 2,3e+11 2,35e+11 2,4e+11

1e+10

9e+09 Contagem

8e+09

7e+09

6e+09

1e+10

1,1e+10

1,2e+10

1,3e+10

1,4e+10 Ciclos

1,5e+10

1,6e+10

1,7e+10

1,8e+10

DATA_CACHE_ACCESSES DATA_CACHE_REFILLS_FROM_L2: 0,034 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,0008 Execuo

Figura 7.6: Comportamento dos eventos durante a multiplicao convencional (acima) e ca a otimizada.

53 serem usados conjuntos pequenos de dados na blocagem, a grande maioria das faltas na L1 so preenchidas por dados da L2. a Alm desses conitos, ` medida que os blocos da matriz que esto sendo percorridos e a a linha a linha so trocados por outros, podem ocorrer sobreposies entre os endereos de a co c cache ocupados pelos os novos blocos da matriz e os endereos ocupados por b1. Ao longo c da execuo do programa, ` medida que os blocos das matrizes se movimentam pelas ca a linhas da cache, as faltas causadas pelos blocos sobrepostos causam a discreta ondulao ca nas linhas que medem as reposies das faltas na L1, mostrada na poro inferior da co ca Figura 7.5. E poss ainda observar que, alm do padro ondulado apresentado nas linhas que vel e a contam as recargas na L1, h tambm a interferncia peridica causada pelo Oprole Esa e e o tendido semelhante ` interferncia da multiplicao convencional representada por um a e ca degrau horizontal na linha das recargas vindas do sistema e por uma inclinao cont ca nua na linha das recargas pela L2 nos mesmos pontos. A poro superior da Figura 7.7 mostra ca a ampliao de um trecho da interferncia ocorrida no programa de multiplicao convenca e ca cional, onde poss observar claramente que enquanto os acessos ` cache permanecem e vel a estveis, o n mero de recargas provenientes da L2 aumenta rapidamente e as recargas do a u sistema permanecem estveis durante o mesmo per a odo. Uma ampliao semelhante para a multiplicao otimizada mostrada na parte inferior ca ca e da Figura 7.7. Os eventos nesse grco aparentemente apresentam o mesmo comportaa mento: h um aumento, ainda que leve, na inclinao da linha que mede os acertos na L2 a ca e uma reduo na inclinao da linha que mede as faltas na L2. No trecho em que ocorre ca ca essa oscilao, a linha que mede os acessos ` cache permanece constante. ca a Analisando a Figura 7.7 poss comparar visualmente a utilizao da cache L2 pelos e vel ca dois programas, tomando como referncia a perturbao causada pelo Oprole Estendido. e ca Observando-se o aumento da inclinao na linha que mede as recargas provenientes da L2 ca durante o dump do Oprole Estendido, constata-se que utilizao da L2 na multiplicao ca ca convencional pior do que a utilizao da L2 durante a execuo do Oprole Estendido. e ca ca No caso da multiplicao otimizada, ocorre uma perturbao nas recargas da L2, mas a ca ca

54

Mmatriz convencional

9,3e+09

9,28e+09 Contagem

9,26e+09

9,24e+09

9,22e+09

2,404e+11

2,405e+11

2,406e+11 Ciclos

2,407e+11

2,408e+11

DATA_CACHE_ACCESSES DATA_CACHE_REFILLS_FROM_L2: 0,064 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,064 Execuo Mmatriz com padding e blocagem 2,13e+10

2,12e+10

2,11e+10 Contagem

2,1e+10

2,09e+10

2,08e+10 3,49e+10 3,495e+10 3,5e+10 3,505e+10 Ciclos 3,51e+10 3,515e+10 3,52e+10

DATA_CACHE_ACCESSES DATA_CACHE_REFILLS_FROM_L2: 0,034 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,0008 Execuo

Figura 7.7: Interferncia durante a multiplicao de matrizes convencional (topo) e a otimizada. e ca

55 inclinao da linha que mede estas recargas quase no se altera. Disto constata-se que a ca a utilizao da L2 similar entre o programa otimizado e o Oprole Estendido. Maiores ca e detalhes referentes aos valores das taxas dos eventos medidos em cada programa so a apresentados na prxima seo. o ca Todos os dados e guras apresentados nesta seo foram obtidos a partir do registro ca do Oprole Estendido no sendo poss a vel obter estes mesmos dados com o Oprole e auxiliam a compreenso do funcionamento da hierarquia de memria do processador a o durante a execuo de cada um dos programas de multiplicao de matrizes. Com a ca ca distribuio temporal da contagem de eventos, poss observar e deduzir os estgios ca e vel a da multiplicao das matrizes bem como o comportamento da hierarquia de memria em ca o cada um destes estgios. a

7.3.4

Anlise das Taxas dos Eventos Medidos a

Os resultados apresentados na Seo 7.3.2 mostram as contagens de acessos, de faltas e de ca algumas taxas obtidas durante a execuo dos dois experimentos sem apresentar a variao ca ca delas ao longo do tempo. Os resultados da Seo 7.3.3 apresentam essa variao nos ca ca eventos ao longo do tempo, mas devido ao fator de ajuste das linhas, dif estabelecer e cil valores mais precisos nas variaes dos eventos ao longo da execuo dos programas. co ca Para complementar as informaes das sees anteriores, as taxas das medidas dos co co experimentos foram calculadas, dividindo as variaes (1 ) de um evento por outro, co seguindo as mesmas mtricas dos resultados j apresentados: a taxa dos acessos ` cache e a a e Data_Cache_Accesses/Ciclos, a de acertos na L2 Data_Cache_Refills_from_ e L2/Data_Cache_Accesses, enquanto a taxa das faltas na L2 Data_Cache_Refills_ e from_System/Data_Cache_Accesses. Em todos os grcos apresentados nesta seo, o eixo Y apresenta a variao da taxa a ca ca da medida, o eixo X representa a contagem dos ciclos de relgio ao longo do tempo, o os pontos correspondem aos valores da mtrica para cada ciclo amostrado e as linhas e verticais pontilhadas indicam o in e o m da execuo do programa. cio ca
1

x = ...x2 x1 , x3 x2 ..., y = ...y2 y1 , y3 y2 ..., sendo x e y eventos plotados nos eixos x e y.

56

Figura 7.8: Acessos ` cache por ciclos de relgio na multiplicao convencional (acima) e a o ca na com padding e blocagem.

57 A anlise da taxa dos acessos ` cache por intervalo pode ser observada no topo da a a Figura 7.8 para a multiplicao convencional. O grco, mostra que na maior parte do ca a tempo de execuo do programa a taxa de acessos por ciclo de 0,035. Numa frequncia ca e e bem mais baixa ocorre tambm uma convergncia do valor da taxa de acessos em 0,076. e e A taxa mais baixa representa os acessos `s colunas da matriz enquanto a taxa mais a alta representa os acessos `s linhas da matriz, situao em que poss a ca e vel obter algum reaproveitamento dos dados nas caches. Nos curtos intervalos em que a taxa oscila entre 0,6 e 0,75 ocorre a interferncia causada pelo dump do Oprole Estendido. e Para o caso da multiplicao com padding e blocagem, apresentado na Figura 7.8, a ca maior parte dos acessos ` L1 ocorrem na faixa entre 0,68 e 0,7 acessos por ciclo. Logo a abaixo h um outro patamar menos denso entre 0,62 e 0,63. Possivelmente esses patamares a tambm indiquem os acessos da linha do bloco da matriz e da coluna do bloco da matriz e durante cada fase da multiplicao. As demais concentraes de pontos abaixo desses ca co valores indicam as interferncias entre os blocos que causam as oscilaes das faltas na L1 e co e na L2. Os intervalos com pontos acima de 0,7 so causados tambm pela interferncia a e e do daemon do Oprole Estendido. A reduo da taxa de acertos na L2 por acessos ` cache pode signicar duas coisas: ca a (i) que a taxa de acertos na L1 aumentou; (ii) que as faltas na L2 aumentaram. Por isso, para complementar o estudo do comportamento dos acertos na L2, os grcos contidos a na Figura 7.9 apresentam as faltas por acesso na L1, plotadas em vermelho, e os acertos na L2, plotados em verde. Dessa forma, poss e vel estabelecer a origem da causa da diminuio nas faltas na L2. ca Os acertos por acesso na L2 plotados em verde para a multiplicao convencional se ca mantm na faixa dos 0,07 como mostrado no topo da Figura 7.9. Tambm poss obe e e vel servar mais trs faixas de valores nas quais ocorrem convergncias dos pontos: a primeira e e em 0,033, a segunda em 0,072 e a terceira em 0,085. Em razo da densidade das trs faixas de valores ser parecida, alm de baixa, dif esa e e e cil tabelecer uma correlao entre elas e as fases da multiplicao das matrizes. Comparandoca ca se a taxa de acertos na L2, que oscila em 0,033, com a taxa de faltas na L1 (em vermelho),

58

Figura 7.9: Acertos na L2 por acessos ` cache na multiplicao convencional (acima) e a ca na multiplicao com padding e blocagem. ca

59 em 0,064, poss associar a reduo dos acertos na L2 com a reduo das faltas na L1. e vel ca ca Dessa associao, poss relacionar a faixa mais baixa de valores de recargas da L2 a ca e vel acessos `s linhas da matriz e a faixa superior aos acessos `s colunas da matriz. a a As faltas na L1 (em vermelho), que oscilam em torno de 0,154, causam a elevao ca da taxa dos acertos na L2 (em verde) para 0,085. Considerando o tamanho da L2 e o tamanho do conjunto de trabalho utilizado para acessar as colunas da matriz, muito e dif atribuir os acertos na L2 ao acesso de colunas e, portanto, essas taxas tambm cil e devem ser atribu das aos acessos `s linhas da matriz. a Os demais acessos e faltas realizados pelo programa, faltas na L1 na faixa de 0,142 com acertos na L2 na faixa de 0,072 representam os acessos `s colunas da matriz. A a pequena separao entre na faixa plotada em 0,072 pode representar alguma melhoria ca no reaproveitamento de dados das colunas, mas ainda nada que represente um ganho de desempenho signicativo. O valor da taxa de acertos na L2 oscila entre 0,035 e 0,036 para a multiplicao ca otimizada, na poro inferior da Figura 7.9. Os picos pouco acima dessa faixa no so ca a a causados por interferncias, mas pelo prprio programa. Ocorre ainda uma pequena e o concentrao em 0,005, decorrente de um aumento nos acertos da L1, como pode ser ca vericado pela reduo da taxa de faltas. ca Ainda sobre a taxa de faltas, poss perceber que apesar da sua variao, os acertos e vel ca na L2 permanecem em um n constante. Os picos na taxa de faltas entre 0,04 e 0,05 vel causam uma reduo quase impercept ca vel na taxa de acertos da L2. As faltas na L1 causadas pelo Oprole Estendido que elevam a taxa acima de 0,065 causam um aumento na taxa dos acertos na L2 para 0,062 enquanto as que reduzem a taxa de faltas para quase 0 tambm reduzem os acertos. e A anlise da taxa das recargas provenientes do sistema por acesso ` cache pode ser a a observada no topo da Figura 7.10 para a multiplicao convencional. O grco mostra ca a que, na maior parte do tempo, a taxa de faltas na L2 de 0,07. H tambm um patamar e a e na taxa de acessos em 0,03. A taxa mais alta representa os acessos `s colunas da matriz a enquanto a taxa mais baixa representa os acessos `s linhas da matriz, nos quais poss a e vel

60 obter algum reaproveitamento dos dados na L2. As falhas peridicas na faixa inferior o de pontos representam a interferncia do Oprole Estendido, comprovada comparando o e n mero de falhas com a ocorrncia dos dumps indicada no registro do Oprole Estendido. u e Para a multiplicao com padding e blocagem, na parte inferior da Figura 7.10, a ca maior parte das faltas na L2 ocorrem numa faixa muito prxima de 0. Pouco acima dessa o primeira faixa h outro patamar discreto. Estes patamares indicam os acessos da linha a do bloco da matriz e da coluna do bloco da matriz durante cada fase da multiplicao. ca As concentraes de pontos acima desses valores indicam as interferncias entre os blocos co e que causam as faltas na L2. Os dois grcos da Figura 7.10 apresentam um comportamento inverso aos grcos a a correspondentes, apresentados na Figura 7.8. As faltas na L2 interferem diretamente na taxa dos acessos ` cache, uma vez que a penalidade de uma falta nesse n da hierarquia a vel de memria pode bloquear os acessos subsequentes at que o dado que ocasionou a falta o e seja recuperado da memria principal. o Na poro inferior da Figura 7.10 poss identicar trs fases distintas na concenca e vel e trao de pontos entre 0,005 e 0,01. Estas mesmas fases podem ser observadas na poro ca ca inferior da Figura 7.5, em que a discreta variao na inclinao das linhas que medem os ca ca eventos Data_Cache_Refills_from_L1 e Data_Cache_Refills_from_System representa a oscilao da taxa de faltas ao longo das trs fases. Esta variao pode ocorrer devido a ca e ca um padro de sobreposio dos blocos das matrizes na hierarquia de memria do sistema, a ca o ou por um padro de interferncia causada pelo SO ao longo da execuo do programa. a e ca Um estudo dos padres de acesso aos endereos em memria, similar ao apresentado na o c o Figura 7.4 (pgina 44), pode revelar o que ocorre na memria durante as diferentes fases a o no comportamento das faltas. Entretanto, tal estudo em uma matriz de 1.0241.024 elementos resulta em 1.0243 3 endereos para plotar no grco aproximadamente c a 24Gbytes o que inviabiliza a gerao do grco. ca a Os dados e guras apresentados nesta seo complementam os dados apresentados nas ca sees anteriores e tambm foram obtidos a partir do registro do Oprole Estendido. No co e a conhecemos nenhuma outra ferramenta que disponibilize dados sucientes para plotar

61

Figura 7.10: Faltas na L2 por acessos ` cache na multiplicao convencional e na blocada. a ca

62 grcos de eventosXciclo ou taxaXciclo. A distribuio temporal das taxas dos eventos a ca monitorados auxiliam na compreenso do comportamento da hierarquia de memria dos a o dois programas de multiplicao de matrizes, alm de fornecer informaes das taxas de ca e co faltas para cada etapa da execuo dos programas, ao invs de apenas um histograma ou ca e de uma mdia das taxas de faltas das execues dos programas. e co

63

CAP ITULO 8 ANALISE DO MERGESORT


Este cap tulo descreve um conjunto de experimentos para determinar o comportamento da hierarquia de memria durante a execuo de programas que implementam duas verses o ca o do algoritmo de ordenao Mergesort. A primeira uma implementao simples do algoca e ca ritmo Mergesort e a segunda uma verso otimizada para tirar proveito da hierarquia de e a memria, chamada de Tiled Mergesort. o

8.1

Descrio dos Programas ca

A primeira verso do Mergesort ordena um vetor dividindo-o ao meio e fazendo uma a chamada recursiva da prpria funo de ordenao para uma metade do vetor. Essas o ca ca chamadas se repetem at que o vetor tenha apenas um elemento. Neste ponto, a recurso e a volta um estgio e realizada uma chamada para a outra metade do vetor. Na volta da a e segunda recurso chamada uma funo que agrega as duas metades do vetor de forma a e ca ordenada, sobre o vetor original, com o aux de um segundo vetor denominado vetor lio de resultado. O segundo algoritmo, Tiled Mergesort, uma verso do Mergesort convencional em e a que as chamadas recursivas sobre as metades do vetor param quando o vetor atinge o tamanho da cache da mquina. Neste ponto (da recurso) utilizado outro algoritmo de a a e ordenao, para que se tire proveito da localidade espacial dos dados em cache. O outro ca algoritmo utilizado nesta implementao do Tiled Mergesort o Quicksort. ca e O Quicksort um algoritmo que ordena um vetor selecionando um elemento, denoe minado piv, e ordenando os demais componentes do vetor de forma que os elementos o menores do que o piv sejam posicionados antes dele e os maiores sejam posicionados o aps ele. O processo se repete recursivamente para os subvetores ` esquerda do piv, at o a o e que o subvetor possua apenas um elemento. Neste ponto, a recurso retorna um n e a vel

64 a metade direita do subvetor ordenada atravs do mesmo processo. Este procedimento e e se repete at o retorno de todos os n e veis da recurso. a

8.2

Preparao do Experimento ca

Esta seo descreve os valores utilizados nos programas para cada teste, alm dos parmetros ca e a de congurao utilizados no Oprole Estendido. ca

8.2.1

Parmetros dos Programas a

Os dois programas estudados ordenam o mesmo vetor, de 819.200 elementos do tipo double. Este vetor ocupa um espao de 6 Mbytes na memria e portanto, maior do que c o e a capacidade da L1 (1.000 ), da L2 (25 ), da L1dTLB (50 ) e da L2dTLB (6 ). Este tamanho de vetor foi utilizado para que a cada execuo da medida, os dados presentes ca nas caches e TLBs do sistema no fossem reaproveitados. Os resultados apresentados nos a grcos e tabelas dessa seo correspondem ` mdia de 20 execues de cada teste. a ca a e co O vetor utilizado nos programas foi gerado com a funo random() e salvo em um ca arquivo .c. Este vetor foi compilado ` parte e o seu arquivo objeto foi ligado aos proa gramas Mergesort e Tiled Mergesort. No foi utilizado um arquivo separado contendo o a vetor porque a leitura desses dados causaria interferncias indesejadas dos acessos a disco. e Cada programa de ordenao estudado foi monitorado durante a execuo com o ca ca mesmo tamanho da faixa de trabalho na qual o Quicksort era utilizado. A faixa utilizada tem o tamanho da cache L2 do processador. A funo readtsc() foi utilizada nesse teste ca para demarcar o in e o nal da execuo de cada programa, assim como o ponto da cio ca ordenao em que o Tiled Mergesort inicia a execuo da funo quicksort(). O ponto ca ca ca equivalente no Mergesort convencional tambm demarcado pela funo readtsc(), alm e e ca e das chamadas ` funo merge(), que agrega dois vetores recm ordenados. a ca e E importante frisar que, devido ` forma com que os vetores so manipulados pelo a a Mergesort, o trecho delimitado pelas linhas verticais que destaca o momento em que a funo quicksort() executada, demarca duas execues da funo quicksort() ca e co ca

65 Programa Mergesort Tiled Mergesort Diferena Percentual c N mero de ciclos u 1,252109 1,111109 12%

Tabela 8.1: Contagem de ciclos para os programas de ordenao. ca

ou mergesort() uma para cada vetor do tamanho da cache L2. Esta abordagem, de delimitar duas execues de cada funo, foi utilizada por ser mais simples de se co ca implementar de forma correta do que a abordagem que delimita apenas uma execuo ca das funes de ordenao. co ca

8.2.2

Conguraes do OProle Estendido co

Os eventos monitorados com o Oprole Estendido durante a execuo dos programas ca de ordenao Mergesort e Tiled Mergesort foram: (i) Data_Cache_Accesses; (ii) Data_ ca Cache_Misses; e (iii) Data_Cache_Refills_From_System, ou faltas na L2. Em princ pio, o contador de ciclos (Cpu_Clock_Unhalted) seria ajustado de acordo com o tempo de execuo de cada um dos testes, de forma que a quantidade de informao ca ca registrada pelo Oprole Estendido fosse equivalente nos dois experimentos. Entretanto, uma vez que a diferena no tempo de execuo dos programas da ordem de 12%, como c ca e mostrado na Tabela 8.1, optou-se por utilizar a mesma congurao para todos os testes ca de ordenao. ca O contador de ciclos de relgio Cpu_Clock_Unhalted foi congurado para interromper o o processador a cada 75.000 ciclos e os demais contadores foram congurados para entrar em overow a cada 231 1 eventos, o que equivale a no entrarem em overow. a A diferena entre o valor de leitura da funo readtsc() e os valores dos contadores c ca registrados no ciclo de relgio mais prximo do in ou do trmino da execuo do o o cio e ca trecho do programa que se quer monitorar no apresenta problemas para a visualizao a ca dos dados nos grcos. Dependendo da frequncia da amostragem dos contadores, pode-se a e perder preciso na medida da contagem total dos eventos. Quanto mais baixa a amosa tragem maior ser o tempo e a quantidade de eventos ocorridos mas no registrados a a

66 decorrido entre a ultima amostra coletada e a chamada da funo readtsc(). Quanto ca mais curto o tempo de execuo do experimento, maior a sensibilidade dos dados ` baixa ca a taxa de amostragem. Para contornar este problema e obter as contagens dos eventos monitorados no ponto em que ocorreu a chamada ` funo readtsc(), feita uma aproximao calculando-se a a ca e ca variao da contagem dos eventos monitorados em relao ` variao no n mero de ciclos ca ca a ca u registrados. A taxa ento multiplicada pela diferena entre a leitura do TSC obtida da e a c amostra do Oprole Estendido imediatamente anterior ` chamada da funo readtsc() a ca e o valor retornado pela funo. Dessa forma, melhora-se preciso da medida, mesmo ca a utilizando taxas de amostragem mais baixas.

8.3

Resultados das Medidas

Esta seo apresenta os resultados das medidas dos experimentos para os programas ca enquanto ordenam os vetores do tamanho da cache L2.

8.3.1

Comportamento dos Programas e Contagem dos Eventos

A Figura 8.1 mostra os grcos da execuo das duas verses do Mergesort. A linha a ca o Merge indica as chamadas da funo merge(), que agrega os dois vetores. A linha Quick ca indica o ponto no qual o vetor utilizado naquele n da recurso tem o tamanho igual vel a ao dobro da capacidade da cache L2. No Tiled Mergesort, quando o vetor atinge o dobro do tamanho da L2, o programa executa o Quicksort para as duas metades do vetor, cada uma delas com o tamanho da cache L2. No Mergesort a linha de nome Quick serve apenas para comparar o comportamento dos dois programas durante a ordenao dos vetores num mesmo estgio da ca a execuo. ca As demais linhas do grco indicam a contagem dos eventos monitorados pelo Oprole a Estendido. Data_Cache_Accesses mostra a contagem dos acessos ` cache na sua escala a normal. Data_Cache_Misses mostra as faltas na L1, que esto numa escala equivalente a

67
Mergesort L2 7e+08 6e+08 5e+08 Contagem 4e+08 3e+08 2e+08 1e+08 0 0 2e+08 4e+08 6e+08 8e+08 Ciclos DATA_CACHE_ACCESSES DATA_CACHE_MISSES: 0,009 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,001 Merge Quick Tiled Mergesort L2 1e+09 1,2e+09 1,4e+09

5e+08

4e+08

Contagem

3e+08

2e+08

1e+08

0 0 2e+08 4e+08 6e+08 Ciclos 8e+08 1e+09 1,2e+09

DATA_CACHE_ACCESSES DATA_CACHE_MISSES: 0,011 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,002 Merge Quick

Figura 8.1: Acima, execuo do Mergesort. Abaixo Tiled Mergesort no mesmo vetor. ca

68 a 0,009 dos valores obtidos do registro do Oprole Estendido para o Mergesort e 0,011 para o Tiled Mergesort. Finalmente, a terceira linha mostra a contagem das faltas na L2, representadas pelo evento Data_Cache_Refills_From_System; Os valores reais destes eventos esto em 0,001 do valor do grco para o Mergesort e em 0,002 para o Tiled a a Mergesort. Uma ampliao de trechos equivalentes da execuo dos dois programas que ilustra a ca ca sequncia das chamadas de funo pode ser observada nos grcos da Figura 8.2. A linha e ca a vertical slida indica o ponto em que a faixa de trabalho do vetor est com o dobro da o a capacidade da cache L2. Na rea demarcada entre as linhas verticais indicada por A1 , o a Mergesort (topo) continua a sua execuo normal enquanto o Tiled Mergesort executa o ca Quicksort para os dois vetores. A rea indicada por B1 demarca a execuo da funo a ca ca merge(), juntando os dois vetores recm ordenados. Em seguida, a `rea indicada por A2 e a delimita outro par de vetores do tamanho da cache sendo ordenado. Aps essa ordenao, o ca a rea B2 indica os dois vetores recm ordenados sendo agrupados com o aux do vetor a e lio de resultado. Na chamada seguinte ` funo merge() (C1 ) os dois vetores (ordenados em A1 e A2 ) a ca so agregados nas duas ultimas chamadas da merge() com o aux do vetor de resultados. a lio As reas seguintes do grco A3 , B3 , A4 , B4 e C2 indicam este mesmo processo se a a repetindo e, em D1 ocorre o agrupamento de todos os vetores ordenados durante o trecho da execuo dos programas exibido nos grcos da Figura 8.2. ca a Durante a execuo da funo merge(), a taxa de faltas na L2 elevada, uma vez ca ca e que o tamanho do conjunto de dados utilizado , no m e nimo, quatro vezes maior do que a capacidade da L2: cada vetor recm ordenado tem o tamanho da L2 e o vetor de e resultados trabalha copiando todos esses dados, dobrando a rea de memria acessada a o durante a ordenao. Enquanto a taxa de faltas na L2 aumenta, as faltas na L1 se ca mantm constantes e os acessos ` cache diminuem porque a busca dos blocos faltantes e a produz bloqueios no processador. A anlise mais detalhada deste trecho da execuo dos programas utilizando dados a ca do registro do Oprole Estendido mostra que a quantidade de acessos ` L1 cache do a

69
Mergesort L2 3e+08

2,5e+08

Contagem

2e+08 A1 B1 A2 B2 C1 A3 B3 A4 B4 C2 D1

1,5e+08

1e+08 3e+08

3,5e+08

4e+08

4,5e+08 Ciclos

5e+08

5,5e+08

DATA_CACHE_ACCESSES DATA_CACHE_MISSES: 0,009 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,001 Merge Quick Tiled Mergesort L2

1,8e+08

Contagem

1,5e+08

A1

B1

A2

B2 C1

A3

B3

A4

B4 C2

D1

1,2e+08

9e+07

2,8e+08

3,2e+08

3,6e+08 Ciclos

4e+08

4,4e+08

4,8e+08

DATA_CACHE_ACCESSES DATA_CACHE_MISSES: 0,011 DATA_CACHE_REFILLS_FROM_SYSTEM: 0,002 Merge Quick

Figura 8.2: Ciclos da ordenao; topo Mergesort e acima Tiled Mergesort. ca

70 Evento Ciclos Cache Access Cache Misses Rells from System Programa Mergesort L2 Tiled Mergesort L2 Diferena (%) c 2,72108 2,21108 22 1,53108 9,4108 63 854.347 601.180 42 168.521 165.887 1,5

Tabela 8.2: Contagem de eventos para o trecho da execuo dos programas. ca

Mergesort 63% superior ` do Tiled Mergesort. Quanto aos demais eventos medidos, a e a proporo de 42% a mais para as faltas na L1, 1,5% a mais para as faltas na L2 cache ca e e 22% a mais na quantidade de ciclos. Os valores utilizados de base para esses clculos a esto dispostos na Tabela 8.2. a Para comparar o comportamento do Mergesort e do Quicksort durante a ordenao ca da mesma faixa do vetor, um trecho menor da execuo dos dois programas foi ampliado. ca Para estes trechos apresentados, a mdia das 20 execues descaracterizou o comportae co mento dos programas e por isso, os grcos apresentados at o nal desta seo tambm a e ca e mostram os resultados da execuo mais parecida com mdia das 20 execues. Os ca e co valores apresentados no entanto, so das mdias de 20 testes. a e O comportamento dos acessos ` cache mostrado na Figura 8.3. O grco do Mergea e a sort (topo) mostra o momento que a funo mergesort() chamada para o vetor com o ca e dobro do tamanho da L2. O Tiled Mergesort, mostrado na poro inferior da Figura 8.3, ca indica o momento em que a funo quicksort() executada. A contagem dos acessos ca e e de aproximadamente 3, 17 107 para o primeiro programa e de 1, 75 107 para o segundo. O total de ciclos utilizados de 4, 92 107 para Mergesort enquanto para o Quicksort de e e 3, 53 107 ciclos. O comportamento dos acessos do Mergesort comea constante e aproximadamente na c metade do grco, ponto onde ocorre a ultima chamada ` merge(), h uma reduo a a a ca gradativa na contagem de acessos at o ponto em que ela se mantm constante, devido e e ao aumento das faltas e os consequentes stalls do processador. Quando o prximo vetor o comea a ser ordenado, a contagem de acessos volta a subir na mesma taxa e s baixa no c o nal da rea delimitada, quando mais uma vez, a funo merge() chamada e as duas a ca e

71 metades do vetor so ordenadas com o aux do vetor de resultado. a lio Os acessos ` cache executados pelo Quicksort apresentam uma reduo no n mero a ca u de acessos tanto no in cio quanto no meio da rea delimitada pelas linhas verticais do a grco. Cada oscilao dessa representa o in da execuo do Quicksort, quando todos a ca cio ca os elementos do vetor so lidos e movimentados de acordo com o seu valor em relao a ca ao piv. Nessa fase, muitas faltas ocorrem na L2, o que ocasiona bloqueios aos demais o acessos e consequentemente a reduo na contagem. ca O mesmo trecho delimitado pelas linhas verticais, ajustado para mostrar as faltas na L1 para os dois programas exibido na Figura 8.4. A linha que representa as faltas e causadas pelo Mergesort (topo) apresenta o comportamento do programa ao longo da ordenao de dois vetores do tamanho da L2. E poss observar nos degraus causados ca vel pela funo merge() os oito estgios da execuo da ordenao, marcados com echas. ca a ca ca O primeiro estgio (A1 ) representa o nal da ordenao do primeiro quarto do vetor, a ca quando a contagem das faltas aumenta, formando um pequeno degrau na linha. Em B1 , o segundo quarto do vetor comea a ser ordenado at o prximo degrau da linha, mais c e o alto, que representa a ordenao da primeira metade do vetor. O terceiro quarto do vetor ca comea a ser ordenado e termina no terceiro degrau (C1 ). O ultimo quarto do vetor c e ordenado e termina no degrau mais alto, indicado por D1 . Neste ponto, as duas metades de todo o vetor so agregadas, o que causa o aumento nas faltas. Da metade do grco a a adiante, o processo se repete para o segundo vetor, como demonstrado em A2 , B2 , C2 e D2 . Para o Quicksort, no in da ordenao (Figura 8.4, abaixo), ocorrem a maioria das cio ca faltas enquanto todos os elementos do vetor so lidos e reposicionados. Depois dessa a primeira ordenao, apesar das faltas diminuirem elas continuam a ocorrer, uma vez ca que o tamanho do vetor quatro vezes a capacidade da L1. Na ordenao do segundo e ca vetor, o comportamento praticamente o mesmo. O momento em que as faltas ocorrem e depois que a contagem se estabiliza depende do reaproveitamento dos dados em cache. De acordo com a movimentao dos valores no vetor em relao ao piv, o reaproveitamento ca ca o dos elementos pode ser maior ou menor, o que interfere no momento em que as faltas

72
Mergesort L2 1,44e+08

1,36e+08

Contagem

1,28e+08

1,2e+08

1,12e+08

2,2e+08

2,3e+08

2,4e+08 Ciclos Merge Tiled Mergesort L2

2,5e+08

2,6e+08

DATA_CACHE_ACCESSES

Quick

8,5e+07

8e+07

Contagem

7,5e+07

7e+07

1,8e+08

1,85e+08

1,9e+08

1,95e+08 Ciclos

2e+08

2,05e+08

2,1e+08

DATA_CACHE_ACCESSES

Merge

Quick

Figura 8.3: Acessos ` cache do Mergesort e Tiled Mergesort, faixas do tamanho da L2. a

73 ocorrem, mas no na quantidade de faltas. a A contagem total de faltas para cada programa, na rea delimitada pelas linhas vera ticais, de aproximadamente 134.371 para o Mergesort. O Quicksort causa 71.937 faltas e na L1 durante a ordenao do mesmo trecho do vetor. A diferena entre as contagens, ca c de 86%, devida ` baixa associatividade da L1 e tambm ao fato do Mergesort utilizar e a e o vetor de resultados para agregar os vetores. Os trechos da ordenao do Mergesort ca utilizam o dobro de espao necessro ao Quicksort e por isso h uma quantidade maior c a a de faltas e, consequentemente, perda de desempenho. A contagem do evento Data_Cache_Refills_from_System, ou faltas na L2, apresenta um comportamento similar ao das faltas na L1 para os dois programas, como pode ser observado na Figura 8.5. Para o Mergesort, ` medida que a funo merge() executada, a ca e as faltas ocorrem e os dados so armazenados em cache. As chamadas subsequentes da a funo merge() sobre conjuntos maiores do vetor tiram proveito dos dados presentes em ca cache e no causam faltas na L2 at o momento em que ocorre a ultima ordenao do a e ca vetor, quando a quantidade de faltas baixa e aumenta bruscamente, uma vez que a L2 e no acomoda todo o conjunto de dados. a O comportamento da contagem de faltas na L2 apresenta trechos planos indicados por echas onde a contagem de faltas na L1 apresenta degraus, ` exeo do nal de cada a ca ordenao, quando a contagem de faltas na L2 aumenta. Para este programa, o total de ca faltas na L2 contabilizado na rea delimitada pelas linhas verticais de 9.926. a e O Quicksort apresenta na L2 o mesmo comportamento em relao `s faltas na L1. No ca a in da execuo, todo o vetor percorrido e o n mero de faltas aumenta rapidamente. cio ca e u Em seguida, o vetor est carregado na cache e as movimentaes seguintes dos elementos a co causam faltas de acordo com o posicionamento do piv. Aparentemente, a quantidade de o faltas que ocorre na ordenao do segundo vetor maior do que a que ocorre no primeiro ca e vetor. Observando atentamente a linha do grco, h uma pequena falha na asceno das a a ca faltas que signica a troca de vetores. O primeiro vetor apresentou um aumento na taxa de faltas no nal da ordenao, provavelmente devido a alguma interferncia do Sistema ca e Operacional. A contagem neste trecho da ordenao foi de 7.773 faltas. A diferena de ca c

74
Mergesort L2 1,23e+06 D2

1,2e+06 B2 A2 1,17e+06 Contagem D1 1,14e+06 B1 1,11e+06 A1 C1

C2

1,08e+06 2,2e+08 2,3e+08 2,4e+08 Ciclos Merge Tiled Mergesort L2 990000 2,5e+08 2,6e+08

DATA_CACHE_MISSES

Quick

975000

Contagem

960000

945000

930000

915000 1,8e+08 1,85e+08 1,9e+08 1,95e+08 Ciclos 2e+08 2,05e+08 2,1e+08

DATA_CACHE_MISSES

Merge

Quick

Figura 8.4: Faltas na L1 para o Mergesort no topo e para o Quicksort na base.

75 27% entre a quantidade de faltas do Mergesort e do Quicksort no trecho demarcado e devida ` associatividade 4 da L2, que obtm um reaproveitamento de dados superior ao a e da L1, cuja associatividade 2 [19]. e Com a distribuio temporal dos eventos, poss observar o comportamento das ca e vel faltas e acessos ` cache de forma mais clara do que com as demais ferramentas baseadas a em CDHs dispon veis. Assim como na Seo 7.3.2, o Oprole Estendido ajuda na comca preenso da forma com que cada programa utiliza a hierarquia de memria, viabilizando a o a observao e a contagem das faltas e acessos ao longo da execuo dos programas. Esta ca ca observao permite a identicao de cada etapa da execuo dos programas e, conseca ca ca quentemente, um estudo e uma compreenso mais aprofundados da interao entre os a ca programas e a hierarquia de memria do sistema. o

8.3.2

Anlise das Taxas das Medidas a

Da mesma forma que apresentado na Seo 7.3.4, os dados obtidos nas medidas dos expeca rimentos com os programas de ordenao foram utilizados para calcular taxas, dividindo ca as variaes (1 ) de um evento por outro, seguindo as mesmas mtricas dos resultados j co e a apresentados: a taxa dos acessos ` cache Data_Cache_Accesses/Ciclos, a de faltas a e na L1 Data_Cache_Misses/Data_Cache_Accesses, enquanto a taxa das faltas na e L2 Data_Cache_Refills_from_System/Data_Cache_Accesses. e Em todos os grcos apresentados nesta seo, o eixo Y apresenta a variao da taxa a ca ca da medida, o eixo X representa a contagem dos ciclos de relgio ao longo do tempo, os o pontos correspondem aos valores da mtrica para cada intervalo amostrado e as linhas e verticais pontilhadas indicam o in e o m da ordenao do vetor. cio ca Os dados da taxa dos acessos ` cache para os dois programas so mostrados na Fia a gura 8.6. O Mergesort (topo), apresenta uma variao entre 0,50 e 0,74 acessos por ciclo ca durante as ordenaes de pequenos trechos do vetor. Quando ocorrem chamadas ` funo co a ca merge() em pores maiores do vetor j carregadas em cache a taxa de acessos por co a ciclo se estabiliza em aproximadamente 0,7. Os pontos em que a taxa apresenta estabili1

x = ...x2 x1 , x3 x2 ..., y = ...y2 y1 , y3 y2 ..., sendo x e y eventos plotados nos eixos x e y.

76
Mergesort L2

116000

114000 Contagem 112000 110000

2,2e+08

2,3e+08

2,4e+08 Ciclos

2,5e+08

2,6e+08

DATA_CACHE_REFILLS_FROM_SYSTEM Merge Tiled Mergesort L2 113750

Quick

112000

Troca Contagem 110250

108500

106750

1,8e+08

1,85e+08

1,9e+08

1,95e+08 Ciclos

2e+08

2,05e+08

2,1e+08

DATA_CACHE_REFILLS_FROM_SYSTEM Merge

Quick

Figura 8.5: Faltas na L2 para o Mergesort no topo e para o Quicksort na base.

77 dade esto indicados com echas verticais e so os mesmos em que o grco do Mergesort a a a na Figura 8.4 apresenta degraus indicando a ocorrncia de faltas na L1, e o da a Figura 8.5 e apresenta reduo na contagem de faltas na L2. ca O motivo da estabilidade da taxa de acessos nestes pontos a presena dos dados na e c L2 e a ausncia dos mesmos na L1. Nos trechos em que a taxa de acessos mais instvel e e a ocorre que, enquanto os dados so carregados da memria principal durante a ordenao a o ca dos trechos menores do vetor, a taxa de acessos diminui quando o dado no est disponivel a a e aumenta quando eles esto carregados na L1. Como a quantidade de valores ordenados a nestes subvetores ainda muito pequena, h um reaproveitamento desses dados ainda na e a L1, o que causa o aumento na taxa de acessos. ` A medida que a quantidade de dados aumenta, os valores so expurgados da L1 mas a permanecem ainda na L2. Quando estes dados so acessados novamente, a taxa de acessos a por ciclo passa a ser limitada pelo tempo de acesso ` L2 e por isso se mantm constante a e nos trechos demarcados. No centro do grco ocorre a ultima ordenao do vetor, que a ca causa faltas na L2 alm da L1, e causa uma reduo na taxa de acessos. e ca No caso do Quicksort, percebe-se que a taxa de acessos diminui durante a primeira fase da execuo do programa devido `s faltas que estes acessos causam na L1 e na L2. Logo ca a no in cio, a taxa de acessos cai, oscilando entre 0,27 e 0,17 acessos por ciclo, convergindo para 0,23. A seguir, ela se estabiliza em 0,55 acessos por ciclo. Em alguns pontos, a taxa apresenta uma ligeira baixa, atingindo valores prximos a 0,4. Como os ind o cios de faltas na L2, que seriam as poss veis causadoras de tamanha reduo na taxa de acessos, so ca a muito fracos, efetuou-se uma anlise destes trechos diretamente no registro do Oprole a Estendido. Em trs dos pontos de baixa, foram encontradas amostras de execuo de cdigo do e ca o Sistema Operacional. E poss vel, portanto, que os demais pontos de baixa da taxa de acessos tambm representem a execuo de cdigo do SO, no detectada devido ` baixa e ca o a a taxa de amostragem para este tipo espec co de monitoramento. No registro foram encontradas mais amostras de execuo de cdigo de SO na regio ca o a entre 1,96108 e 1,98108, entre a troca dos vetores indicada pela echa vertical, o que

78
Mergesort L2 0,8

0,7

0,6

0,5 Taxa 0,4 0,3 0,2 0,1 2,2e+08 2,3e+08 2,4e+08 Ciclos 2,5e+08 2,6e+08

DATA_CACHE_ACCESSES / Ciclos Merge Tiled Mergesort L2

Quick

0,6

0,5

Taxa

0,4

0,3

0,2

0,1 1,8e+08 1,85e+08 1,9e+08 1,95e+08 Ciclos 2e+08 2,05e+08 2,1e+08

DATA_CACHE_ACCESSES / Ciclos Merge

Quick

Figura 8.6: Taxas de acessos por ciclos para Mergesort (topo) e Quicksort.

79 conrma a hiptese de que a alta contagem de faltas no trecho prximo ao in o o cio da ordenao do segundo vetor com o Quicksort tenha sido causada por interferncia do ca e Sistema Operacional. Em relao `s faltas na L1, mostradas na Figura 8.7 o Mergesort apresenta uma ca a oscilao entre 4 104 e 0,008 com alguns picos em 0,025. Essa variao da taxa de ca ca faltas est relacionada ao comportamento do sistema de memria virtual: os dados so a o a acessados pela primeira vez, causam faltas e aumentam a taxa. Depois de carregados na cache L1, enquanto os vetores ordenados so pequenos, ocorre o reaproveitamento dos a dados, o que reduz a taxa de faltas. Os trechos indicados com as echas na Figura 8.7 so os mesmos indicados nos grcos a a anteriores. Devido ao comportamento das faltas na L1 e na L2 observado nos grcos das a Figuras 8.4 e 8.5, a taxa de faltas por acesso apresenta uma pequena estabilidade nestes pontos, devido ` execuo da funo merge(). O trecho no centro do grco em que a a ca ca a taxa de faltas aumenta temporariamente para 0,025 indica o momento em que ocorre uma chamada para a funo merge() com uma quantidade de dados superior ` capacidade da ca a L1. No in da unio dos vetores os dados acessados ainda esto em cache e a taxa se cio a a mantm em 0.008. A partir do ponto em que os dados ordenados no esto mais presentes e a a em cache, a taxa de faltas sobe para 0,025. No caso do Quicksort, o comportamento da taxa de faltas o esperado. Na fase inicial e da ordenao ocorre a maioria das faltas e a taxa oscila em aproximadamente 0,065 ca faltas por acesso, caindo para aproximadamente 1,4104, mantendo-se neste patamar at ocorrer a interferncia do SO, pouco antes do trmino da ordenao do vetor. As e e e ca pequenas oscilaes que ocorrem depois da fase inicial da ordenao so decorrentes da co ca a pequena capacidade da L1 em relao ao tamanho do conjunto de dados. Cada oscilao ca ca mostrada no grco corresponde a um pequeno degrau do grco da Figura 8.4. a a Analisando a relao entre a taxa de acessos e faltas na cache para os dois programas, ca apesar das faltas do Mergesort ocorrerem em maior quantidade, a taxa de acessos ` cache a deste programa maior do que a do Quicksort. Isso ocorre porque, enquanto o Quicksort e realiza todas as operaes de ordenao sobre o mesmo vetor, o Mergesort acessa os valores co ca

80
Mergesort L2

0,025

0,02

Taxa

0,015

0,01

0,005

0 2,2e+08 2,3e+08 2,4e+08 Ciclos 2,5e+08 2,6e+08

DATA_CACHE_MISSES / DATA_CACHE_ACCESSES Merge Quick Tiled Mergesort L2 0,105

0,09

0,075

0,06 Taxa 0,045 0,03 0,015

0 1,8e+08 1,85e+08 1,9e+08 1,95e+08 Ciclos 2e+08 2,05e+08 2,1e+08

DATA_CACHE_MISSES / DATA_CACHE_ACCESSES Merge Quick

Figura 8.7: Taxas de faltas por acessos na L1 para o Mergesort (topo) e Quicksort.

81 no vetor original e agrega os valores ordenados no vetor de resultado a cada execuo da ca funo merge(). ca A taxa de faltas na L2 por acessos ` cache pode ser vista no topo da Figura 8.8 para a o Mergesort. Os trechos indicados com as echas mostram a taxa de faltas prximas a o zero durante as execues da funo merge() com dados j presentes na L2. Os trechos co ca a que apresentam oscilaes entre 0 e 8104 indicam as faltas que ocorrem na L2 e que co interferem na taxa de acessos ` cache, j mostrada na Figura 8.7. a a A taxa de faltas na L2 aumenta para 0,025 no Mergesort apenas no estgio nal da a ordenao, quando o tamanho da rea de dados acessada vetor de entrada mais vetor ca a de resultado, cada um ocupando o tamanho da L2 supera a capacidade deste n da vel hierarquia de memria virtual, ao nal da ordenao de cada vetor. o ca No caso do Quicksort (Figura 8.8), no in da ordenao do primeiro vetor, a taxa de cio ca faltas na L2 comea oscilando entre 0,003 e 0,0058 e estabilizando em aproximadamente c 0,0036. Depois que os elementos do vetor so carregados em cache, a taxa de faltas reduz a para 6,5105 e permanece nessa faixa at que ocorre a interferncia do SO e o in da e e cio ordenao do segundo vetor, indicado pela echa. Neste ponto, a taxa de faltas oscila ca entre 0,007 e 0,009 e logo em seguida cai novamente para 6,5105. A distribuio temporal das taxas dos eventos permitiu observar o comportamento das ca taxas de faltas e acessos ` cache de forma mais clara do que com outras ferramentas basea adas em CDHs dispon veis. Assim como na Seo 7.3.2, os dados obtidos com o Oprole ca Estendido mostram a forma com que cada programa utiliza a hierarquia de memria ao o longo da execuo, permitindo computar valores para a taxa de faltas ou acessos em cada ca trecho. Esta informao permitiu a identicao das etapas da execuo dos programas ca ca ca de ordenao e, consequentemente, uma compreenso maior sobre a interao entre os ca a ca programas e a hierarquia de memria do sistema. Este conhecimento adicional util o e para a depurao do desempenho destes programas, sugerindo, por exemplo, novos testes ca utilizando faixas de dados menores para o Tiled Mergesort, com o propsito de melhorar o a utilizao cache L2. ca

82
Mergesort L2

0,025

0,02

Taxa

0,015

0,01

0,005

0 2,2e+08 2,3e+08 2,4e+08 Ciclos 2,5e+08 2,6e+08

DATA_CACHE_REFILLS_FROM_SYSTEM / DATA_CACHE_ACCESSES Merge Quick Tiled Mergesort L2 0,025

0,02

0,015 Taxa 0,01 0,005

0 1,8e+08 1,85e+08 1,9e+08 1,95e+08 Ciclos 2e+08 2,05e+08 2,1e+08

DATA_CACHE_REFILLS_FROM_SYSTEM / DATA_CACHE_ACCESSES Merge Quick

Figura 8.8: Taxas de faltas na L2 por acessos, Mergesort (topo) e Quicksort.

83

CAP ITULO 9 INTERFERENCIA NAS MEDIDAS


Qualquer ferramenta de monitoramento interfere na execuo do programa que esteja ca sendo monitorado. Por isso, o resultado de uma execuo normal de um programa tende ca a ser diferente do resultado apresentado pela ferramenta de medida. Quanto maior a interferncia da ferramenta, maior a distoro na medida. e ca No Oprole original, a cada interrupo provocada por um contador de eventos, soca mente aquela ocorrncia registrada. Normalmente, cada contador provoca vrias intere e a rupes ao longo da execuo de um programa e tipicamente h mais de um contador co ca a gerando interrupes. Assim, o tratamento de uma interrupo relativamente rpido, co ca e a mas elas podem ocorrer com alguma frequncia. e Com o Oprole Estendido, as interrupes ocorrem a uma taxa que depende da reco soluo desejada, mas o tratamento de cada interrupo no rpido porque, alm do ca ca a e a e TSC, todos os contadores so lidos e seus valores registrados. Em relao ao Oprole oria ca ginal, esse aumento na quantidade de dados interfere tambm no overhead causado pela e sincronizao do sistema de arquivos e pela cpia do arquivo de registros da memria para ca o o o disco. Para mensurar a interferncia do Oprole Estendido nas medidas realizadas, em relao e ca ` execuo normal dos testes, todos os programas apresentados neste trabalho foram moa ca nitorados de trs maneiras e com diferentes conguraes em cada uma: (i) com o Oprole e co Estendido; (ii) com o Oprole original; e (iii) sem o Oprole. A medida de tempo nos dois ultimos obtida com duas invocaes da funo readtsc(), no in e no nal da e co ca cio execuo. ca Cada experimento tambm foi monitorado com uma combinaao diferente de cone c guraes entre o Oprole e o Oprole Estendido com a nalidade de mostrar as variaes co co da interferncia causada pelo Oprole Estendido em cada uma das situaes. e co

84 Nas tabelas apresentadas neste cap tulo, a primeira coluna mostra o programa executado ou algum parmetro da execuo que ser citado, a segunda coluna mostra a a ca a contagem total dos ciclos da execuo do programa monitorado com o Oprole Estenca dido, a terceira coluna mostra a contagem de ciclos obtidos com o Oprole convencional e a terceira coluna apresenta a contagem obtida na execuo normal do programa. ca Alm dos dados de contagens de ciclos, ao lado de cada medida est mostrada a e a interferncia da ferramenta na quantidade de ciclos medidos. A percentagem de ciclos e adicionais apresentada na tabela contabilizada em relao ` execuo do programa sem e ca a ca qualquer tipo de monitoramento e denominada Overhead. e

9.1

Faltas nas TLBs

Com o intuito de mostrar a variao da interferncia das medidas quando se altera o ca e comportamento do programa, a Tabela 9.1 mostra as contagens de ciclos registradas pelo Time Stamp Counter (TSC) durante as trs execues do programa que causa faltas na e co TLB, apresentado no Cap tulo 6. Pginas percorridas Oprole Estendido a 0 a 350 2, 96 109 5,6% 22 a 42 2, 91 107 1,8% 250 a 280 3, 71 108 1% Oprole 2, 83 109 0,9% 2, 89 107 1,5% 3, 70 108 0,8% 2, 81 109 2, 85 107 3, 66 108

Tabela 9.1: Overhead do OProle e do OProle Estendido para faltas nas TLBs.

A congurao utilizada nestes testes foi: (i) Cpu_Clk_Unhalted, 150.000 eventos; ca (ii) Data_Cache_Accesses, 500.000 eventos; (iii) L1_Dtlb_Misses_L2_Dtld_Hits, 500.000 eventos; e (iv) L1_And_L2_Dtlb_Misses, 500.000 eventos. As variaes apresentadas na Tabela 9.1 mostram que para estes experimentos e esta co congurao, o overhead causado pelo Oprole Estendido de 0,2 a 0,3% em relao ao ca e ca Oprole original para os intervalos de pginas apresentados na segunda e terceira linhas a da tabela. Na primeira linha, a interferncia do Oprole de 0,9% enquanto a do Oprole e e Estendido de 5,6%, ou 5,2% a mais do que o Oprole. e A poss causa da diferena entre as duas medidas o tempo de execuo de cada vel c e ca

85 experimento. E provvel que a execuo com o Oprole original tenha passado pelo trecho a ca de interesse da execuo antes do Oprole realizar a descarga dos buers, como ocorre ca nas Figuras 6.3 e 6.5 (pginas 32 e 36). No caso da execuo monitorada pelo o Oprole a ca Estendido, a descarga dos buers ocorre dentro da rea de interesse, como pode ser visto a na Figura 6.2, pgina 30. Uma vez que os dumps do Oprole Estendido ocorrem em a um intervalo xo de tempo, a descarga ocorre em todas as 20 execues do programa, co afetanto todas as medidas. Por este ser um programa de rpida execuo, a interferncia a ca e da descarga pode alterar signicativamente a medida.

9.2

Multiplicao de Matrizes ca

Os resultados para programas de multiplicao de matrizes apresentados no Cap ca tulo 6 esto na Tabela 9.2, que mostra as contagens de ciclos registradas pelo Time Stamp a Counter (TSC) durante a execuo de cada um dos programas monitorados pelo Oprole ca Estendido, pelo Oprole e sem nenhum monitoramento, na segunda, terceira e quarta colunas respectivamente. A primeira linha mostra os dados para a multiplicao de matrizes ca convencional e a segunda, para a multiplicao otimizada com padding e blocagem. ca Programa Normal Otimizado Oprole Estendido 4, 32 1011 1,8% 5, 07 1010 11,9% Oprole 4, 27 1011 0,7% 4, 79 1010 5,7% 4, 24 1011 4, 53 1010

Tabela 9.2: Overhead do OProle e do OProle Estendido no produto de matrizes.

A congurao utilizada para o Oprole diferente daquela do Oprole Estendido ca e para estes programas. Neste caso, o intuito das conguraoes distintas apresentar mais c e uma difeno do comportamento da interferncia das duas ferramentas durante o monica e toramento. A congurao utilizada nos testes realizados com o Oprole foi: (i) Cpu_Clk_Unhalted, ca 1.500.000 eventos para a multiplicao convencional e 250.000 para a otimizada; (ii) Data_ ca Cache_Accesses, 100.000 eventos; (iii) Data_Cache_Refills_From_L2, 50.000 eventos; e (iv) Data_Cache_Refills_From_System, 50.000 eventos.

86 Para o Oprole Estendido a congurao utilizada foi: (i) Cpu_Clk_Unhalted, 1.500.000 ca eventos para a multiplicao convencional e 250.000 para a otimizada; (ii) Data_Cache_ ca Accesses, 231 1 eventos; (iii) Data_Cache_Refills_From_L2, 231 1 eventos; e (iv) Data_ Cache_Refills_From_System, 231 1 eventos. As variaes apresentadas na Tabela 9.2 mostram que para estes experimentos, nesta co congurao, o overhead causado pela interferncia do Oprole de 0,7% enquanto o ca e e do Oprole Estendido de 1,8% na multiplicao de matrizes convencional. No caso da e ca multiplicao de matrizes com padding e blocagem, a interferncia causada pelo Oprole ca e Estendido de 11,9%, enquanto a interferncia do Oprole de 5,7% em relao ` execuo e e e ca a ca da multiplicao sem nenhum tipo de monitoramento. ca A diferena nas taxas de amostragem dos ciclos de relgio Cpu_Clk_Unhalted fator c o e determinante para o aumento do overhead do programa de multiplicao de matrizes ca normal para o otimizado. A taxa de amostragem deste evento para o programa otimizado seis vezes superior ` taxa de amostragem para o programa convencional. e a No caso do Oprole Estendido, a relao entre a medida do overhead para os dois ca programas de 6,4 vezes, prximo da relao entre as taxas de amostragem conguradas e o ca para cada um dos programas. Para o Oprole original este racioc nio no se aplica, a uma vez que qualquer evento pode causar uma interrupo do processador e prejudicar ca a medio. A diferena de Overhead entre as medidas realizadas com o Oprole de ca c e aproximadamente 9 vezes, bastante superior ` diferena da congurao. a c ca De acordo com os dados apresentados nesta seo, o Oprole Estendido apresentou ca um overhead superior ao do Oprole para as conguraes utilizadas nestes testes. Apeco sar disso, o pior overhead causado pelo Oprole Estendido de apenas 11,9%, que e e aceitvel quando se considera o benef proporcionado pelas informaes adicionadas a a cio co cada amostra.

9.3

Mergesort

Os programas de ordenao apresentados na Cap ca tulo 8 foram novamente executados e a quantidade de ciclos foi medida de acordo com os trs critrios propostos no in e e cio

87 deste cap tulo. A Tabela 9.3 mostra as contagens de ciclos registradas pelo Time Stamp Counter (TSC) durante as trs execues de cada um dos programas. e co A congurao utilizada para o Oprole foi diferente da utilizada no Oprole Estendido ca para estes programas. Neste experimento, a inteno demonstrar duas conguraes nas ca e co quais o comportamento da interferncia das duas ferramentas durante o monitoramento e similar. e Programa Merge L2 T-Merge L2 Oprole Estendido 1, 380 109 10% 1, 227 109 10% Oprole 9 1, 377 10 10% 1, 252 109 1, 228 109 10% 1, 111 109

Tabela 9.3: Overhead do OProle e do OProle Estendido na ordenao de vetores. ca

A congurao utilizada nos testes realizados com o Oprole foi: (i) Cpu_Clk_Unhalted, ca 75.000 eventos; (ii) Data_Cache_Accesses, 10.000 eventos; (iii) Data_Cache_Refills_ From_L2, 10.000 eventos; e (iv) Data_Cache_Refills_From_System, 10.000 eventos. Para o Oprole Estendido a congurao utilizada foi: (i) Cpu_Clk_Unhalted, 75.000 ca eventos; (ii) Data_Cache_Accesses, 231 1 eventos; (iii) Data_Cache_Refills_From_L2, 231 1 eventos; e (iv) Data_Cache_Refills_From_System, 231 1 eventos. As variaes apresentadas na tabela mostram que, para estes experimentos e esta co congurao, o overhead causado pelo Oprole Estendido o mesmo causado pelo Oprole ca e convencional. Os valores de interferncia medidos para as duas ferramentas so de 10%. e a Os valores de overhead causados pelo Oprole Estendido e o Oprole apresentados neste cap tulo mostram diferentes resultados para diferentes combinaes de amostragem co em cada ferramenta. Estes resultados sugerem um estudo futuro que relacione a taxa de amostragem das duas ferramentas e o overhead causado por cada uma delas. A motivao ca do estudo encontrar o ponto em que o overhead do Oprole Estendido seja to baixo e a quanto o do Oprole, sem comprometer a preciso das medidas obtidas. a

88

CAP ITULO 10 DIVERGENCIAS NAS MEDIDAS


O Oprole Estendido utiliza um mtodo de coleta de dados diferente do Oprole original. e Enquanto o Oprole realiza uma amostragem de cada contador ao longo da execuao c de um programa, o Oprole Estendido atualiza a contagem de todos os eventos a cada intervalo de tempo denido pelo usurio. a Dessa forma, o Oprole original no conta eventos mas sim o n mero de overows a u ocorridos no contador de eventos. Estes contadores so congurados com valores adea quados para as mtricas, inicializados em zero e incrementados a cada evento. Quando e a contagem chega ao limite, o processador interrompido. Portanto, o n mero (aproxie u mado) de eventos o produto entre o n mero de interrupes e o valor de congurao e u co ca do contador. No Oprole Estendido, o processador interrompido pelo contador de ciclos de execuo e ca (Clock_Unhalted) de acordo com o intervalo denido pelo usurio, e ento os valores em a a todos os contadores so registrados. Assim, as contagens dos eventos monitorados so a a atualizadas a cada intervalo de medida, ao invs de acumuladas a cada overow de cada e contador congurado. As diferenas entre a contagem baseada nas amostragens do Oprole e as contagens c apresentadas pelo Oprole Estendido variam bastante, principalmente em funo da conca gurao do Oprole e do tempo de execuo do experimento. Os dados apresentados ca ca neste Cap tulo so baseados nas mesmas conguraes utilizadas nos experimentos do a co Cap tulo 9. Os resultados obtidos com o Oprole foram calculados a partir dos relatrios gerados o pelo programa opreport, incluido na distribuio do Oprole. Embora todos os 20 expeca rimentos de cada programa analisado tenham sido realizados com a mesma congurao, ca em alguns casos, o opreport no gerou os relatrios com a apresentao dos dados no a o ca

89 padro ideal para a composio da mdia1 , e por isso estes relatrios no foram incluidos a ca e o a no clculo. Os resultados do Oprole Estendido correspondem ` mdia de 20 execues a a e co de cada experimento. Em todas as tabelas apresentadas nesta Cap tulo, a primeira coluna apresenta o evento monitorado, a segunda coluna a mdia da contagem do evento obtida atravs do Oproe e le Estendido, a terceira coluna apresenta a mdia da contagem calculada a partir dos e resultados do Oprole.

10.1

Faltas nas TLBs

A Tabela 10.1 apresenta os resultados das contagens de faltas nas TLBs obtidas com o programa da Cap tulo 6. Dentre os resultados dos testes realizados para este programa, o que apresenta a maior divergncia entre as medidas o teste que percorre de 22 a 42 e e pginas. Neste teste, que dura apenas 3107 ciclos, o n mero de faltas na L1 no atinge a u a o valor de overow do contador e portanto nenhuma falta foi registrada pelo Oprole. Oprole Estendido Pginas entre 0 e 350 a L1_Dtlb_Misses_L2_Dtld_Hits 2,66107 L1_And_L2_Dtlb_Misses 4,88106 Pginas entre 22 e 42 a L1_Dtlb_Misses_L2_Dtld_Hits 1,88105 Pginas entre 250 e 280 a L1_And_L2_Dtlb_Misses 3,8105 Evento Oprole 2,65107 4,64106 0 3,5106 Variao ca 0,37% 5,17% 8,57%

Tabela 10.1: Divergncia na contagem de faltas de pginas. e a

A segunda maior divergncia ocorre no teste que percorre o intervalo de 250 a 280 e pginas. Neste teste, a diferena de uma uma ordem de grandeza a mais para o Oprole. a c e E poss que, em virtude deste tambm ser um teste rpido da ordem de 108 ciclos, uma vel e a a duas ordens de grandeza a menos do que os demais testes a interferncia da inicializao e ca do programa seja a causadora da distoro apresentada na medida do Oprole. Este tipo ca de interferncia no altera o resultado do Oprole Estendido uma vez que a contagem e a
1

Os dados no estavam devidamente separados por binrio, o que inviabiliza o processamento. a a

90 de eventos ocorrida antes da primeira chamada ` funo readtsc() eliminada no ps a ca e o processamento dos dados. As diferenas podem ser parcialmente corrigidas repetindo-se os experimentos com os c parmetros alterados. Uma das possibilidades de correao consiste em aumentar o tempo a c de execuo do programa, aumentando-se o n mero de vezes que o buer percorrido ca u e at que se aloque mais uma pgina. Outra possibilidade reduzir o valor de overow do e a e contador de faltas na L1 TLB do Oprole.

10.2

Multiplicao de Matrizes ca

Os resultados obtidos nos programas de multiplicao de matrizes podem ser observados ca na Tabela 10.2. Quanto maior o tempo de execuo do programa, menor a divergncia ca e e entre os valores medidos pelas duas ferramentas. Oprole Estendido Multiplicao Convencional ca Data_Cache_Accesses 1,661010 Data_Cache_Refills_From_L2 1,08109 Data_Cache_Refills_From_System 1,07109 Multiplicao Otimizada ca Data_Cache_Accesses 2,971010 Data_Cache_Refills_From_L2 1,03109 Data_Cache_Refills_From_System 3,4107 Evento Oprole 1,531010 1,08109 1,07109 3,061010 1,09109 2,04107 Variao ca 8,49% 0% 0% 3,03% 5,82% 66,6%

Tabela 10.2: Divergncia na contagem de eventos no produto de matrizes. e

No caso da multiplicao de matrizes, o programa convencional, com maior tempo ca de execuo, apresenta uma pequena divergncia entre os acessos ` cache, e aproximadaca e a mente os mesmos valores para as demais medidas. No caso da multiplicao otimizada ca com padding e blocagem, que executa em aproximadamente um dcimo do tempo da mule tiplicao convencional, as diferenas existem em todos os eventos. Estudos anteriores ca c relacionados ` acurcia dos CDHs relacionam o tempo de execuo dos testes ` preciso a a ca a a dos valores obtidos dos contadores [33, 26].

91

10.3

Mergesort

O comportamento das medidas dos programas de ordenao de vetores pode ser visto ca na Tabela 10.3. Nesta tabela, a diferena entre as medidas do OProle e do Oprole c Estendido de, em mdia, 54% com um desvio padro de 13 pontos percentuais. Estes e e a experimentos utilizam uma taxa de amostragem 5 vezes maior do que a recomendada pelo fabricante do processador [12], mas no se obtm uma convergncia entre os valores a e e obtidos pelas ferramentas. Oprole Estendido Mergesort L2 Data_Cache_Accesses 7,35108 Data_Cache_Misses 4,35106 Data_Cache_Refills_From_System 1,09106 Tiled Mergesort L2 Data_Cache_Accesses 5,03108 Data_Cache_Misses 3,41106 Data_Cache_Refills_From_System 1,09106 Evento Oprole Original 4,26108 2,5106 6,91105 3,47108 2,31106 8,39105 Diferena c 72,53% 74% 57,74% 44,95% 47,61% 29,91%

Tabela 10.3: Divergncia na contagem de eventos na ordenao de vetores. e ca

Analisando de uma forma geral a proximidade entre as medidas coletadas das ferramentas e o tempo de durao dos experimentos, poss ca e vel estabelecer uma relao ca entre o tempo de execuo de um teste e a diferena entre as medidas coletadas com ca c as duas ferramentas. Esta relao sugere, como estudo futuro, um aprofundamento no ca estudo da relao entre a preciso da amostragem e o tempo de execuo do experimento, ca a ca complementando estudos como [26]. Ainda em relao ` amostragem, diferentemente do Oprole, em que cada evento ca a mensurvel possui um intervalo de amostragem recomendado a amostragem ideal para a o Oprole Estendido pode variar de acordo com o n de detalhe requerido pelo tipo de vel anlise desejada e pelo tempo de execuo do experimento. a ca Considerando que a contagem de eventos do Oprole Estendido elimina as interferncias anteriores e posteriores ao intervalo de interesse, no necessrio executar o e a e a teste por tempo longo o suciente para que o comportamento do programa domine os valores dos contadores. Outro aspecto a ser considerado que, como mostrado em [31], e

92 os programas podem apresentar um mesmo comportamento que se repete ao longo da execuo como demonstrado aqui, na multiplicao de matrizes e na ordenao de veca ca ca tores. Nestes casos, a anlise de um pequeno trecho do programa pode ser suciente para a compreender toda a sua execuo, o que torna desnecessrios testes de longa durao para ca a ca programas que apresentem essas caracter sticas.

93

CAP ITULO 11 CONCLUSAO


Apresentamos uma extenso do Oprole que permite gerar pers de execuo que coma ca binam vrias mtricas e a informao de tempo absoluto. Com o Oprole Estendido a e ca e poss tomar amostras temporais de todos os contadores de eventos observados a uma vel taxa de amostragem to alta quanto permitida pelo projeto da CPU, sem causar pera turbao signicativa na execuo do programa monitorado. ca ca Relatamos trs experimentos que demonstram a utilizao do Oprole Estendido. O e ca primeiro utiliza um programa de teste que provoca faltas controladas nos dois n veis da TLB, de forma que seja poss observar a evoluo das faltas nessas estruturas na vel ca medida que o conjunto de trabalho aumenta. As faltas so monitoradas at que seja a e atingido o estado de thrashing nas TLBs. Deste material resultou o artigo OProle Estendido para Depurao de Desempenho [1], apresentado no VI Workshop de Sistemas ca Operacionais (WSO2009). O segundo experimento estuda o comportamento da hierarquia de memria durante a o execuo de dois programas de multiplicao de matrizes, um convencional e um otimica ca zado. Nos resultados poss observar a evoluo das faltas nos dois n e vel ca veis da cache de dados, alm de fazer correlaes entre a perturbao que cada evento monitorado causa e co ca nos demais. O terceiro experimento compara o desempenho, com relao ` hierarquia de caches, da ca a ordenao de um vetor de doubles com duas verses do algoritmo de ordenao Mergesort. ca o ca Uma a implementao simples e a outra divide o vetor em faixas do tamanho das caches e ca e emprega o Quicksort nestas faixas. Nos resultados poss observar a evoluo das e vel ca referncias e das faltas nas caches L1 e L2 ` medida que as chamadas recursivas ocorrem e a e que os vetores ordenados so agregados. a Alm da anlise dos resultados obtidos com as contagens normais dos eventos, realie a

94 zamos, tanto para a multiplicao de matrizes quanto para a ordenao de vetores, uma ca ca anlise das variaes nas taxas dos eventos monitorados, associando os eventos `s fases a co a da execuo dos programas. ca Analisamos a interferncia que o Oprole Estendido causa na execuo de cada proe ca grama em relao ` interferncia causada pelo Oprole original em diferentes conca a e guraes, e em relao ` execuo normal dos testes. Encontramos variaes de 0,6 a co ca a ca co 10% para o Oprole, e de 1 a 10% para o Oprole Estendido em relao ` execuo norca a ca mal, de acordo com a congurao utilizada em cada uma das ferramentas, o que serve ca de base para denir, em experimentos futuros, qual deve ser a melhor relao entre taxa ca de amostragem e interferncia. e Por m, comparamos as medidas obtidas com o Oprole e com o Oprole Estendido em todos os programas de teste investigados e relacionamos fatores e caracter sticas como tempo de execuo e conguraes das ferramentas de cada um dos testes `s divergncias ca co a e observadas nas medidas. Os parmetros de congurao do Oprole Estendido devem a ca variar de acordo com o experimento testado, ao contrrio do Oprole e possivelmente a demais ferramentas baseadas em amostragem de contadores, que utilizam intervalos de valores pr-denidos para cada evento monitorado. e O Oprole Estendido uma ferramenta capaz de agregar informaes uteis `s amostras e co a do Oprole com baixo overhead. As informaes complementares auxiliam ` compreenso co a a da interao entre o programa examinado e a hierarquia de memria, o que fundamental ca o e para depurao de desempenho em sistemas computacionais. Outros eventos monitorveis ca a podem enriquecer as informaes mostradas neste trabalho. Estudos visando ao monitoco ramento dos demais eventos sero realizados em trabalhos futuros. a Os estudos futuros incluem: (i) relacionar as taxas de amostragem do Oprole Estendido ao overhead causado; (ii) relacionar as taxas de amostragem e o tempo de convergncia entre as medidas do Oprole e do Oprole Estendido; e (iii) utilizar a visuae lizao da contagem discriminada dos dados do Oprole Estendido (Figura 4.3, pgina 24) ca a para estudar o desempenho da carga de bibliotecas dinmicas no sistema. a Estamos considerando a integrao do Oprole Estendido ao Oprole mediante conca

95 tato, e desenvolvimento conjunto com o autor do Oprole, ampliando as funcionalidades da ferramenta, o hardware suportado e, consequentemente, as possibilidades de utilizao. ca

96

APENDICE A EVENTOS SUPORTADOS PELO OPROFILE ESTENDIDO


Este apndice apresenta a sa do comando opcontrol --list-events, que lista os e da eventos monitorveis no Athlon. a
info02:/var/lib/oprofile# opcontrol --list-events oprofile: available events for CPU type "Athlon" See AMD document x86 optimisation guide (22007.pdf), Appendix D CPU_CLK_UNHALTED: (counter: all) Cycles outside of halt state (min count: 3000) RETIRED_INSNS: (counter: all) Retired instructions (includes exceptions, interrupts, resyncs) (min count: 3000) RETIRED_OPS: (counter: all) Retired Ops (min count: 500) ICACHE_FETCHES: (counter: all) Instruction cache fetches (min count: 500) ICACHE_MISSES: (counter: all) Instruction cache misses (min count: 500) DATA_CACHE_ACCESSES: (counter: all) Data cache accesses (min count: 500) DATA_CACHE_MISSES: (counter: all) Data cache misses (min count: 500) DATA_CACHE_REFILLS_FROM_L2: (counter: all) Data cache refills from L2 (min count: 500) Unit masks (default 0x1f) ---------0x10: (M)odified cache state 0x08: (O)wner cache state 0x04: (E)xclusive cache state 0x02: (S)hared cache state 0x01: (I)nvalid cache state 0x1f: All cache states DATA_CACHE_REFILLS_FROM_SYSTEM: (counter: all) Data cache refills from system (min count: 500) Unit masks (default 0x1f) ---------0x10: (M)odified cache state 0x08: (O)wner cache state 0x04: (E)xclusive cache state 0x02: (S)hared cache state 0x01: (I)nvalid cache state 0x1f: All cache states DATA_CACHE_WRITEBACKS: (counter: all) Data cache write backs (min count: 500) Unit masks (default 0x1f) ---------0x10: (M)odified cache state 0x08: (O)wner cache state 0x04: (E)xclusive cache state 0x02: (S)hared cache state

97
0x01: (I)nvalid cache state 0x1f: All cache states RETIRED_BRANCHES: (counter: all) Retired branches (conditional, unconditional, exceptions, interrupts) (min count: 500) RETIRED_BRANCHES_MISPREDICTED: (counter: all) Retired branches mispredicted (min count: 500) RETIRED_TAKEN_BRANCHES: (counter: all) Retired taken branches (min count: 500) RETIRED_TAKEN_BRANCHES_MISPREDICTED: (counter: all) Retired taken branches mispredicted (min count: 500) L1_DTLB_MISSES_L2_DTLD_HITS: (counter: all) L1 DTLB misses and L2 DTLB hits (min count: 500) L1_AND_L2_DTLB_MISSES: (counter: all) L1 and L2 DTLB misses (min count: 500) MISALIGNED_DATA_REFS: (counter: all) Misaligned data references (min count: 500) L1_ITLB_MISSES_L2_ITLB_HITS: (counter: all) L1 ITLB misses (and L2 ITLB hits) (min count: 500) L1_AND_L2_ITLB_MISSES: (counter: all) L1 and L2 ITLB misses (min count: 500) RETIRED_FAR_CONTROL_TRANSFERS: (counter: all) Retired far control transfers (min count: 500) RETIRED_RESYNC_BRANCHES: (counter: all) Retired resync branches (only non-control transfer branches counted) (min count: 500) INTERRUPTS_MASKED: (counter: all) Interrupts masked cycles (IF=0) (min count: 500) INTERRUPTS_MASKED_PENDING: (counter: all) Interrupts masked while pending cycles (INTR while IF=0) (min count: 500) HARDWARE_INTERRUPTS: (counter: all) Number of taken hardware interrupts (min count: 10)

98

APENDICE B MULTIPLICACAO DE MATRIZES BLOCADA


Este apndice apresenta o cdigo em linguagem C do programa de multiplicao de e o ca matrizes blocado, implementado a partir do cdigo dispon em [17]. o vel
#include <stdio.h> #include <stdlib.h> #include <tsc.h> #define Mtype double #define MSIZE 1024 #define CLSIZE 16 // # de inteiros pra encher uma linha da cache int min (int v1, int v2) { if (v1 <= v2) return (v1); else return (v2); } Mtype a[MSIZE][MSIZE]; int pad1 [CLSIZE]; Mtype b[MSIZE][MSIZE]; int pad2 [CLSIZE]; Mtype c[MSIZE][MSIZE]; int main (int argc, char * argv[]) { Mtype sum; int B, i, j, jj, k, kk; if (argc !=2) { fprintf(stderr,"Modo de usar: %s <tam. bloco>", argv[0]); exit (1); } B = atoi(argv[1]); printf ("%llu 0\n",native_read_tsc()); for (i = 0; i < MSIZE; i++) for (j = 0; j < MSIZE; j++) a[i][j] = b[i][j] = c[i][j] = 0.1; printf ("%llu 1\n",native_read_tsc()); for (jj = 0; jj < MSIZE; jj = jj + B) for (kk = 0; kk < MSIZE; kk = kk + B) for (i = 0; i < MSIZE; i++) for (j = jj; j < min(jj + B, MSIZE); j++) for (sum = 0, k = kk; k < min(kk + B, MSIZE); k++) { sum += a[i][k] * b[k][j]; c[i][j] = sum; } printf ("%llu 1\n",native_read_tsc()); exit (0); }

99

APENDICE C FUNCAO READTSC


Este apndice apresenta o cdigo em linguagem C da funo readtsc(), escrita com a e o ca ajuda de Aristeu Srgio Rozanski Filho. e
#include <stdint.h> static inline unsigned long long native_read_tsc(void) { unsigned long long val; asm volatile("rdtsc" : "=A" (val)); return val; }

100

APENDICE D EXEMPLO DE CONFIGURACAO DO OPROFILE ESTENDIDO


Este apndice apresenta um exemplo do arquivo de congurao comentado do Oprole e ca Estendido, normalmente encontrado no diretrio /root/.oprofile/daemonrc. o
# Monitorar evento em modo SO -------------+ # Monitorar evento em modo usurio ------+ | a # Mscara (varia entre cada evento) ---+ | | a # Overflow do contador ------------+ | | | # Evento Monitorado --+ | | | | # Contador # -+ | | | | | # v v v v v v CHOSEN_EVENTS_0=CPU_CLK_UNHALTED:40000:0:1:1 CHOSEN_EVENTS_1=DATA_CACHE_MISSES:1573741824:0:1:1 CHOSEN_EVENTS_2=L1_DTLB_MISSES_L2_DTLD_HITS:1573741824:0:1:1 CHOSEN_EVENTS_3=L1_AND_L2_ITLB_MISSES:1573741824:0:1:1 # Nmero total de eventos selecionados u NR_CHOSEN=4 # Separar amostras dos programas por bibliotecas (0 = n~o, 1 = sim) a SEPARATE_LIB=0 # Separar amostras dos programas quando eles executam cdigo do kernel o SEPARATE_KERNEL=0 # Separar amostras dos programas por thread SEPARATE_THREAD=1 # Separar as amostras dos programas por CPU SEPARATE_CPU=0 # Localiza~o da imagem do kernel ca VMLINUX=/usr/src/_kernel-source-2.6.8/vmlinux # Filtrar apenas as amostras geradas por um binrio a IMAGE_FILTER= # Habilita callgraph CALLGRAPH=0 # Valores dos buffers utilizados. Podem (e devem) ser aumentados de # acordo com o aumento da taxa de amostragem. Caso n~o sejam definidos, a # o OProfile utiliza seus valores padr~o a CPU_BUF_SIZE=24576 BUF_SIZE=397200 BUF_WATERSHED=98304 # Faixa de memria ocupada pelo kernel (gerado sozinho) o KERNEL_RANGE=c0100000,c0308ba9 # Caso se faa o profile de uma mquina virtual c a XENIMAGE=none # Fim do arquivo

101

BIBLIOGRAFIA
[1] J C Albuquerque e R A Hexsel. Oprole estendido para depurao de desempenho. ca WSO09 VI Workshop de Sistemas Operacionais, pginas 16, 2009. a [2] J M Anderson et al. Continuous proling: where have all the cycles gone. ACM Trans on Computer Systems, 15(4):357390, 1997. [3] T Austin, E Larson, e D Ernst. SimpleScalar: An infrastructure for computer system modeling. IEEE Computer, 35(2):5967, Fevereiro de 2002. [4] R Azimi, M Stumm, e R W Wisniewski. Online performance analysis by statistical sampling of microprocessor performance counters. ICS05: Proc 19th Intl Conf on Supercomputing, pginas 101110, 2005. a [5] T Baer. lperfex: A hardware performance monitor for Linux/IA32 Systems. http: //www.osc.edu/~ troy/lperfex/, Janeiro de 2002. Acesso em 30 jul 2008. [6] R Berrendorf e H Zeigler. PCL, the Performance Counter Library, version 2.3. http: //www.fz-juelich.de/jsc/PCL/, Julho de 2003. Acesso em 28 jul 2008. [7] S Browne, J Dongarra, N Garner, G Ho, e P Mucci. A portable programming interface for performance evaluation on modern processors. The Intl Journal of High Performance Computing Applications, 14(3):189204, 2000. [8] B R Buck e J K Hollingsworth. Using hardware performance monitors to isolate memory bottlenecks. SC Conference, 0:40, 2000. [9] J Cavazos, G Fursin, F Agakov, E Bonilla, M F.P. OBoyle, e O Temam. Rapidly selecting good compiler optimizations using performance counters. IEEE/ACM International Symposium on Code Generation and Optimization, 0:185197, 2007. [10] J Dean et al. ProleMe: hardware support for instruction-level proling on out-oforder processors. 30th IEEE/ACM Intl Symp on Microarchitecture, pginas 292302, a 1997.

102 [11] L DeRose e D A Reed. SvPablo: A multi-language performance analisys system. ICPP99: Proc 1999 Intl Conf on Parallel Processing, pginas 311318, Setembro de a 1999. [12] P J Drongowski. Basic performance measurements for AMD AthlonT M 64 and AMD OpteronT M processors. http://developer.amd.com/Pages/1212200690.aspx, Dezembro de 2006. Acesso em 30 ago 2007. [13] T C Ferreto, C A F DeRose, e L DeRose. RVision: An Open and Highly Congurable Tool for Cluster Monitoring. Proc 2nd IEEE/ACM Intl Symp on Cluster Computing and the Grid, pginas 7582, 2002. a [14] T C Ferreto, L DeRose, e C A F DeRose. A hardware counters based tool for system monitoring. Euro-Par Conf, pginas 716, 2003. a [15] S L Graham, P B Kessler, e M K McKusick. GProf: A Call Graph Execution Proler. SIGPLAN Notices, 39(4):4957, 2004. [16] D Heller. Rabbit: A performance counters library for Intel/AMD processors and Linux. http://www.scl.ameslab.gov/Projects/Rabbit, Outubro de 2001. Acesso em 30 jul 2008. [17] J L Hennessy e David A Patterson. Computer Architecture: A Quantitative Approach. Morgan Kaufmann, 4th edition, 2007. ISBN 0-12-370490-1. [18] K Hoste e L Eeckhout. The pitfall in comparing benchmarks using hardware performance counters. ACES Symposium, pginas 6467, Outubro de 2006. a [19] Advanced Micro Devices Inc. AMD Athlon processor x86 code optimization guide, Fevereiro de 2004. [20] C L Janssen. The visual proler version 0.4. http://aros.ca.sandia.gov/

~cljanss/perf/vprof/, Outubro de 1999. Acesso em 11 ago 2008. [21] D Jones. x86info, a CPU identication utility, v1.24. http://www.codemonkey.org. uk/projects/x86info/, 2001-2009. Acesso em 3 de mai 2009.

103 [22] Martin Alain Kretscheck. Panalyser, uma ferramenta de baixo impacto para medio ca de utilizao de recursos do sistema operacional Linux. Dissertao de mestrado, ca ca Departamento de Informtica, UFPR, Maio de 2002. http://www.inf.ufpr.br/ a roberto/dissMartin.pdf. [23] M A Kretschek, R A Hexsel, e A L dos Santos. Panalyser, uma ferramenta de baixo impacto para medio de utilizao de recursos do sistema operacional linux. XXX ca ca Semin Integrado de Software e Hardware, pginas 345358, agosto de 2003. a [24] J Levon. OProle - A System Proler for Linux. http://oprofile.sourceforge. net/news/, 2003. Acesso em 11 ago 2008. [25] J Levon. OProle Manual. http://oprofile.sourceforge.net/docs/index.

php3/, 2003. Acesso em 11 ago 2008. [26] P J Teller e L Salayandia M E Maxwell. Accuracy of performance monitoring hardware. Proc Los Alamos Computer Science Institute Symposium, Outubro de 2002. [27] S V Moore. A comparison of counting and sampling modes of using performance monitoring hardware. Intl Conf on Computational Science, pginas 904912, 2002. a [28] T Mytkowicz, P F Sweeney, M Hauswirth, e A Diwan. Time interpolation: so many metrics, so few registers. 40th IEEE/ACM Intl Symp on Microarchitecture, pginas a 286298, 2007. [29] M Petterson. Linux x86 performance-monitoring counters driver, version 2.6.39. http://user.it.uu.se/~ mikpe/linux/perfctr, Junho de 2008. Acesso em 30 jul 2008. [30] J Renau. SESC: cycle accurate architectural simulator. http://sesc.sourceforge. net/index.html, 2002. Acesso em 25 de mai 2009. [31] T Sherwood, E Perelman, G Hamerly, e B Calder. Automatically characterizing large scale program behavior. SIGOPS Operating System Review, 36(5):4557, 2002.

104 [32] The Standard Performance Evaluation Corporation (SPEC). SPEC CPU2006. http: //www.spec.org/, 2006. Acesso em 11 ago 2008. [33] W Korn W, P J Teller, e G Castillo. Just how accurate are performance counters? IEEE Performance, Computing, and Communications, pginas 303310, 2001. a [34] V M Weaver e S A McKee. Are cycle accurate simulations a waste of time? 7th Workshop on Duplicating, Deconstructing, and Debunking (WDDD), pginas 4053, a Junho de 2008. [35] V M Weaver e S A McKee. Can hardware performance counters be trusted? IEEE International Symposium on Workload Characterization, pginas 141150, Setembro a de 2008.

JOAO CLAUDIO MUSSI DE ALBUQUERQUE

ANALISE DO COMPORTAMENTO DA HIERARQUIA DE MEMORIA COM OPROFILE ESTENDIDO

Dissertao apresentada como requisito parca cial ` obteno do grau de Mestre. Proa ca grama de Ps-Graduao em Informtica, o ca a Setor de Cincias Exatas, Universidade Fee deral do Paran. a Orientador: Prof. Dr. Roberto Andr Hexsel e

CURITIBA 2009

Вам также может понравиться