sábado, 13 de abril de 2019

Instalando o codificador HEVC (H.265) Kvazaar no Ubuntu

Kvazaar é um codificador de vídeo Open Source para o padrão HEVC (H.265) desenvolvido pelo Ultra Video Group da Univesidade de Tampere, Finland (http://ultravideo.cs.tut.fi/#encoder). O código está disponível no GitHub em https://github.com/ultravideo/kvazaar.

O Kvazaar é o único programa até hoje (além do software de referência) que codifica os tiles com restrição do vetor de movimento. Essa opção é importante para quem deseja segmentar um vídeo em blocos (tiles) de forma que durante a decodificação esses blocos possam ser reproduzidos separadamente. Normalmente isso não é possível porque o compensador de movimento do codificador cria dependências espaciais para a decodificação.
Resultado de imagem para move vector hevc tiled
Fonte: Concolato, Cyril et al. “Adaptive Streaming of HEVC Tiled Videos Using MPEG-DASH.” IEEE Transactions on Circuits and Systems for Video Technology 28 (2018): 1981-1992.

Características do Kvazaar:
Funções
Versão atual
Profiles
Main, Main 10
Formato de entrada
YUV (dimensões divisíveis por 2)
Formato de saída
NAL (suportado checksum)
Bits de profundidade
8, 10
Subamostragem
4.2:0
PCM
Yes,
Configurações de codificação
AI, LP, RA, LB
Tipos de quadros
I, P, B
Tipos de paralelismo
Tiles, Wavefront
Tamanhos dos CUs
64, 32, 16, 8
Tamanhos dos TUs
32, 16, 8, 4
Tamanhos dos PUs, Intra
32, 16, 8, 4
Tamanhos dos PUs, Inter
64, 32, 16, 8 (SMP+AMP)
Modos de predição Intra
All luma (DC, planar, 33 angular), Chroma usa mesmo da luminância
Precisão do MV da Luminância
1/4 pel
Precisão do MV da Crominância
1/8 pel
Modos de codificação
Intra, Inter, Skip, Merge
Algoritmos IME
HEXB, FS, TZ
Numero de imagens de referência
até 15
Métricas dos modos de decisão
SATD, SAD, and SSD
Otimização da taxa-distorção
Partial (inclui RDOQ)
Codificação entrópica
CABAC
Filtro  de Loop
Deblocking Filter, Sample-adaptive offset (Edge+Band mode)
Codificação residual
Coefficients,4x4 transform skip,Trans/quant Bypass
Controle de taxa
ABR 1-pass
*Fontehttp://ultravideo.cs.tut.fi/#encoder.
*OBS.: É difícil traduzir algumas coisas.

Instalação em Ubuntu 18.04

Passo 1: Dependências.

Instale as dependências para compilar o Kvazaar. São elas: automake, autoconf, libtool, m4, build-essential e yasm. O Yasm não é obrigatório, mas algumas otimizações dependem dele. O Git é necessário se você quiser clonar o repositório em sua versão mais atual.

sudo apt-get install automake autoconf libtool m4 build-essential yasm git

Passo 2: Baixando o código

Baixe o último lançamento em https://github.com/ultravideo/kvazaar/releases e descompacte seus arquivos ou clone o repositório em https://github.com/ultravideo/kvazaar. No momento de escrita desse artigo a versão mais recente é a v1.2.0. e os procedimentos podem mudar em versões futuras.

Clonando repositório com git:
git clone https://github.com/ultravideo/kvazaar.git

Passo 3: Compilando

Entre no diretório principal do código e execute os seguintes comandos:



*OBS.: Pode ser necessário atualizar o cache de bibliotecas dinâmicas.
sudo ldconfig

Passo 4: Testando

kvazaar --version


Corrigindo inicialização do Ubuntu 16.04 com GRUB após instalar o Windows 7 em dual boot

Primeiramente eu tinha o Ubuntu 16.04. Após instalar o Windows 7 em uma nova partição, não aparecia nenhum menu de inicialização e o Ubuntu não apareceu mais nas listas de sistemas operacionais do Windows.

Para corrigir isso:

1. Fiz boot por um Live CD com Linux
2. Listar partições e identificar a partição root do linux:
# fdisk -l
3. Montar a partição em /mnt:
# mount /dev/sda1 /mnt
4. Instalar o grub no disco identificando o root como /mnt
# grub-install --root-directory=/mnt /dev/sda
5. Reiniciar
Resultado: O Ubuntu voltou a funcionar, mas o windows sumiu.

Para corrigir isso:

No Linux
sudo update-grub

Para alterar o tempo do menu de escolha do sistema operacional, edite a variáve timeout em /boot/grub/grub.cfg.

Comente a linha para tempo infinito.



segunda-feira, 12 de dezembro de 2016

Corrigindo erros do DirectDraw no Wine ou, Como jogar Diablo 1 no Ubuntu

Depois de perder meu fim de semana tentando rodar Diablo no Ubuntu Mate 16.04, consegui fazer funcionar. Não funcionava nem no PlayOnLinux.

Aparentemente o problema é no DirectDraw, por isso é necessário um "hack" do arquivo ddraw.dll.


  1. Baixar o DirectDraw Hack. Está hospedado oficialmente em https://code.google.com/archive/p/ddhack/, mas nunca se sabe quando poderá mudar.
  2. Descompacte os arquivos para o diretório do jogo no Wine (geralmente: em ~/.wine/drive_c/Diablo)
  3. Execute o arquivo ddraw_renderer.sh e preencha com as informações que se pede. Isto  atualizará o registro do Wine.
Funcionou com Diablo e Hellfire (necessário colocar os arquivos na pasta ~/.wine/drive_c/SIERRA/HELLFIRE)

Testei apenas no Ubuntu Mate 16.04 com Wine 1.6.2. Não é uma solução perfeita. Vários defeitos aparecem na tela de abertura e nas opções, mas o jogo está funcionando bem, com som e rápido.

sexta-feira, 19 de agosto de 2016

Dependências do NS-3 para Ubuntu 16.04

O NS-3 é um simulador de redes para linux que possui muitos módulos com as mais diversas dependências. Quando a gente está começando as pesquisas e não tem muita ideia do que vai precisar. O que fazer? Instalar tudo? De acordo com a Wiki do NS-3 (https://www.nsnam.org/wiki/Installation) há uma lista de dependências para diversos sistemas operacionais, mas nem todas são necessárias. O script abaixo resume todas as dependências para o Ubuntu 16.04 e pode ser executado de uma vez com sudo.



domingo, 15 de maio de 2016

ENDERÇEO IP, MÁSCARA DE SUB-REDE E SUB-REDES



Veja bem. Essa divisão de máscara e sub máscara serve facilitar a transmissão. Se meu computador estiver na mesma rede que outro computador, ele só precisa conhecer o endereço de host para se comunicarem.


1. O ENDEREÇO IP

Tudo começa em como um endereço IP é estruturado. Lembre-se que salvo alguns casos especiais, cada endereço IP é único em todo o mundo. E em qualquer caso, não pode existir dois endereços IPs iguais na mesma rede, isso gera um erro chamado "Conflito de IPs".

 Um endereço IP é composto por um número de 32 bits (4 bytes) separados em 4 grupos de 8 bits (1 byte cada).

--
ex
Em Decimal = 189.6.76.152
Em Binário = 10111101.00000110.01001100.10011000
--

Esse numero do endereço é separado em duas parte. Uma parte é chamado endereço de rede e a outra parte é chamado endereço de host (host é qualquer dispositivo que transmite e/ou recebe dados na rede).

Quem define qual parte é o endereço de rede e qual parte é o endereço de host é a Máscara de sub-rede.


2. A MÁSCARA DE SUB-REDES

A máscara de sub-rede é um número de 32 bits que possui vários 1's da esquerda para a direita.

--
Ex.
Em binário = 11111111.11111111.00000000.00000000
Em decimal = 255.255.0.0
Abreviado = /16
--

Por causa do tanto de 1's é normal uma abreviação. No exemplo acima, a máscara 255.255.0.0 pode ser abreviada por /16 porque possui 16 números 1's. uma máscara /28 = 11111111.11111111.11111111.11110000 = 255.255.255.240

--
Por exemplo:
o endereço = 189.6.76.152
e a máscara = 255.255.255.240

Pode ser representado por 189.6.76.152/28
--

A máscara de sub-rede (ou somente máscara) divide o endereço em dois: O endereço da rede e o endereço do host. No exemplo acima, se colocarmos a máscara de sub rede embaixo do endereço IP e aplicarmos uma operação lógica "AND" obtemos o endereço de rede. Ou seja, o endereço de rede serão os n bits do lado esquerdo do endereço IP, onde n é o número de 1's da máscara.

--
ex:
189.6.76.152/16

10111101.00000110.01001100.10011000 Endereço IP
AND
11111111.11111111.00000000.00000000 Máscara
-----------------------------------
10111101.00000110.00000000.00000000 Rede
(16 bits, o resto é zero)

Então o endereço de rede é 189.6.0.0/16
--

É muito importante você escrever a máscara junto com o endereço de rede porque podem existir ao mesmo tempo duas redes iguais, porém com mascaras diferente.

O endereço de Host se obtém com a operação "XOR" (OU exclusivo) do endereço de rede com o endereço IP. Que são os bits restantes, neste caso 0.0.76.152

--
Ex.
10111101.00000110.01001100.10011000 Endereço IP
XOR
10111101.00000110.00000000.00000000 Rede
-----------------------------------
00000000.00000000.01001100.10011000 Host
em decimal = 0.0.76.152
--

Assim, o endereço IP é uma operação "OR" da Rede com o Host.

--
Ex.
Endereço de rede 189.6.0.0/16
Enderçeo de Host 0.0.76.152

10111101.00000110.00000000.00000000 - Rede
OR
00000000.00000000.01001100.10011000 - Host
-----------------------------------
10111101.00000110.01001100.10011000 - Endereço IP
--


3. EXEMPLOS

1)
Endereço 200.200.100.100/18
11001000.11001000.01100100.01100100/18

a máscara é 11111111.11111111.11000000.000000 (dezoito 1's)
em decimal = 255.255.192.0

são 18 bits da esquerda para a rede e o restante 32-18 = 14 bits (32 é o numero total de bits)... 14 bits da direita são para os host.

endereço de rede =
200.200.64.0/18 (18 bits)
11001000.11001000.01000000.00000000

endereço de host =
0.0.36.100 (14 bits)
00000000.00000000.00100100.01100100

2)
69.1.87.20/12
01000101.00000001.01010111.00010100/12

a máscara é 11111111.11110000.00000000.00000000 (doze 1's)
em decimal 255.252.0.0

endereço de rede =
69.0.0.0/12 (12 bits)
01000101.00000000.00000000.00000000

endereço de host =
0.0.39.122 (20 bits)
00000000.00000001.01010111.00010100

3)
Endereço
192.168.100.10/24
11000000.10101000.01100100 .00001010/24

Máscara
255.255.255.0
11111111.11111111.11111111.00000000

Endereço de rede
192.168.100.0/24
11000000.10101000.01100100.00000000

Endereço de Host
0.0.0.10
00000000.00000000.00000000.00001010


4. ENDEREÇOS ESPECIAIS

Cada rede comporta um numero de computadores conectados de acordo com sua máscara de sub-rede.

--
por exemplo:
A rede 192.168.0.0/16 possui 16 bits para a rede e 16 bits para os Hosts, isso quer dizer que esta rede pode ter até no máximo 65536 endereços que vão do 192.168.0.0 até o 192.168.255.255.
--

Porém, o primeiro endereço (192.168.0.0) e o último (192.168.255.255)são endereços especiais.

O de final zero é reservados para os endereços de rede (nesse caso para a própria rede 192.168.0.0/16) e os endereços de final 255, por exemplo 192.168.255.255, que são reservados para uma coisa chamada Broadcast (discutiremos isso outra hora).

Tirando esses dois endereços, todos os outros endereços de Host podem ser usados em computadores na mesma rede. Então dos 65536 endereços, apenas 65534 podem ser utilizados.

--
Por exemplo

A rede 71.34.0.0/18
Possui 18 bits para rede e 14 bits para Host. 2^(14) = 16384
Essa rede possui 16384 endereços. Mas como dois são especiais, há 16382 endereços de host.
Se você fizer as contas, verá que os endereços vão de 71.34.0.1 até 71.34.63.254.
--


5. SUB REDES

As vezes uma rede tem uma quantidade muito grande de endereços disponível e para evitar desperdício de endereços (ou seja, muitos endereços não utilizados) é melhor sub dividir uma rede em redes menores. Essas são as sub-redes.

A gente obtém uma sub-rede pegando o endereço de Host e dividindo novamente em sub-rede e host.

OBS. Você só pode dividir em 2^x sub redes, onde x é o numero de bits que vc usa para sub redes. Não tem como dividir em 3 sub redes. tem que arredondar pra cima. Tipo, se vc precisa dividir em 6 sub redes, não dá. Tem que dividir em 8 ou em 4.

--
Exemplo 1
192.168.34.0/24
11000000.10101000.00100010.00000000 Rede
11111111.11111111.11111111.00000000 Mascara
00000000.00000000.00000000.XXXXXXXX Host

Possui 8 bits para Host = 256 endereços.

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Dividindo em 4 sub-redes:
pegamos dois bit porque 2^2 = 4
00000000.00000000.00000000.SSXXXXXX

Assim teremos 6 bits para hosts que dará 64 endereços em cada rede. Mas como dois endereços de cada sub rede são especiais (endereço de rede e endereço de broadcast), cada sub-rede poderá conectar 62 dispositivos totalizando 248 dispositivos nas quatro sub-redes.

|Rede 192.168.34.0/24
||192.168.34.0/26 -> Endereço de rede /25 = 24 + 2
||.
||. (Sub-Rede 1)
||.
||192.168.34.63 -> Endereço de Broadcast
||
||192.168.34.64/26 -> Endereço de rede /26 = 24 + 2
||.
||. (Sub-Rede 2)
||.
||192.168.34.127 -> Endereço de Broadcast
||
||192.168.34.128/26 -> Endereço de rede /26 = 24 + 2
||.
||. (Sub-Rede 3)
||.
||192.168.34.191 -> Endereço de Broadcast
||
||192.168.34.192/26 -> Endereço de rede /26 = 24 + 2
||.
||. (Sub-Rede 4)
||.
||192.168.34.255 -> Endereço de Broadcast

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Dividindo em 64 sub-redes (O máximo possível):
pegamos seis bit porque 2^6 = 64
00000000.00000000.00000000.SSSSSSXX

Assim teremos 2 bits para hosts que dará 4 endereços em cada rede. Mas como dois endereços de cada sub rede são especiais (endereço de rede e endereço de broadcast), cada sub-rede poderá conectar 2 dispositivos (veja que vai sobrar apenas 2 endereços para os dispositivos e não tem jeito de sobrar menos) totalizando 128 dispositivos nas duas sub-redes.

Os endereços 192.168.34.0, 192.168.34.127, 192.168.34.128 e 192.168.34.255 são os endereços especiais.

|Rede 192.168.34.0/24
||192.168.34.0/30 -> Endereço de rede /30 = 24 + 6
||.
||. (Sub-Rede 1)
||.
||192.168.34.3 -> Endereço de Broadcast
||
||192.168.34.4/30 -> Endereço de rede /30 = 24 + 6
||.
||. (Sub-Rede 2)
||.
||192.168.34.7 -> Endereço de Broadcast
||
||.
||.
||.
||
||192.168.34.252/30 -> Endereço de rede /30 = 24 + 6
||.
||. (Sub-Rede 64)
||.
||192.168.34.255 -> Endereço de Broadcast


--
Exemplo 2:

A rede 71.34.0.0/18 possui 14 bits para os host. Podemos dividi-los em 64 redes menores pegando os 6 bits do endereço de host (2^6=64) para usar como sub redes e os bits restantes (8 bits) serão 256 endereços dentro dessa sub-rede. Mas como dois endereços são especiais, cada sub-rede terá no máximo 254 hosts.

71.34.0.0/18 Rede e Máscara
01000111.00100010.00000000.00000000 -> Rede
11111111.11111111.11000000.00000000 -> Mascara
00000000.00000000.00XXXXXX.XXXXXXXX -> Hosts

00000000.00000000.00SSSSSS.XXXXXXXX
Pego 6 bits para sub-redes (S) teremos 2^6=64 sub redes
Cada sub-rede terá 8 bits de hosts = 2^8 = 256 endereços.
Como dois endereços são especiais, cada sub-rede pode conectar 254 dispositivos.
--

"Esse resumo foi feito com base em memórias sem nenhuma referência específica, mas de acordo com o que eu me lembrava do Tanenbaum, Kurose, Soares, Fourozan, Wikipedia, Cormer, etc."

segunda-feira, 4 de abril de 2016

Corrigindo codificação e idioma em Latex

Minha orientadora sugeriu usar o Overleaf para terminarmos um artigo em Latex. É uma ótima ferramenta para trabalho colaborativo, mas tive alguns problemas com a codificação dos caracteres após a compilação. Sem muito esforço consegui solucionar adicionando ao preâmbulo do documento os seguintes pacotes:

\usepackage[brazilian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
Não sou expert em Latex a ponto de descrever cada um destes pacotes, mas sei que são responsáveis pela codificação dos caracteres, substituindo o uso de macros (\'a por á) e a linguagem de alguns elementos como Capítulo em vez de Chapter, por exemplo, não necessariamente nesta ordem.

Achei essa dica em https://aleteia.wordpress.com/2008/07/30/latex_e_acentos/

Mas caso a opção brazilian estiver com erro, talvez o pacote de língua portuguesa não está instalado. Procure instalar o pacote faltando. No ubuntu 16.04.1 o comando é:

sudo apt-get install texlive-lang-portuguese


quinta-feira, 25 de abril de 2013

Resumo: Art of Computer Systems Performance Analysis: Techniques for Experimental Measurements Simulation and Modeling - Capítulo 2



Livro: "Art of Computer Systems Performance Analysis: Techniques for Experimental Measurements Simulation and Modeling" de Raj Jain

 Resumo do capítulo 2:

 
CAPÍTULO 2. – ERROS COMUNS E COMO EVITÁ-LOS
Este capítulo inicia com uma lista de erros comumente observados em projetos de avaliação de desempenho, em seguida é então formulado um resumo da avaliação de desempenho, os passos para uma correta avaliação de desempenho e em que ordem devem ser executados.
2.1 - Erros comuns em avaliação de desempenho
Diferentemente do “Game Ratio” do capítulo anterior, a maioria dos erros não são intencionais. São causados por descuido, equívocos e falta de conhecimentos sobre as técnicas de avaliação de desempenho.
1.       FALTA DE OBJETIVOS: Qualquer projeto sem metas não deve funcionar. Parece obvio, mas muitos projetos se iniciam sem objetivos claros. Modelos de propósito gerais não existem. Não há como o modelo ser flexível suficiente para ser facilmente modificado para diferentes problemas. Cada modelo deve ter um objetivo específico. Métricas, carga de trabalho e toda a metodologia dependem do objetivo. Cada problema possui uma área diferente a ser observada. Antes de qualquer modelagem, é importante que o projetista entenda o sistema e identifique o problema. E encontrar um objetivo não é uma tarefa simples. A maioria dos problemas são bastante vagos no início, então encontrar um conjunto de objetivos é bastante difícil. Uma vez que se entende o problema e seu objetivo foi definido fica mais fácil encontrar uma solução.
2.       OBJETIVOS TENDENCIOSOS: Principalmente quando uma comparação é feita na forma de competição, as métricas, funções, cargas, etc, podem ser escolhidas visando um resultado que favoreça um lado e não o de encontrar o melhor modelo para comparar os sistemas. Assim, o analista deve ser imparcial.
3.       ABORDAGEM SEM MÉTODO: Muitos analistas adotam uma abordagem sem sistemática onde os parâmetros, fatores, métricas e cargas são escolhidos arbitrariamente, levando a resultados imprecisos. Um método bem definido ajuda na escolha de um conjunto completo de todos esses elementos
4.       ANÁLISE SEM ENTENDIMENTO DO PROBLEMA: Uma grande parte do esforço da análise está em definir o problema. Desenvolver um modelo é apenas uma parte do problema. Modelos são a ferramenta para alcançar as conclusões. Pessoas que precisam fazer decisão muitas vezes ignoram um trabalho que foca apenas na sistemática, pois não precisam apenas de um modelo, mas um guia.
5.       MÉTRICAS DE DESEMPENHO INCORRETAS: Métricas são critérios usados para quantificar o desempenho do sistema. A escolha da métrica correta depende do serviço oferecido pelo sistema em questão. Assim, manipular a escolha da métrica pode mudar a conclusão de um estudo de desempenho. Outro erro bastante comum é escolher apenas métricas fáceis de medir ou computar e ignorar as mais difíceis.
6.       CARGA DE TRABALHO REPRESENTATIVA: A carga usada para comparar dois sistemas deve ser capaz de representar o atual uso do sistema em estudo. Seu uso de forma inadequada levará a resultados imprecisos que não representa o real funcionamento do sistema.
7.       TÉCNICA DE AVALIAÇÃO ERRADA: Há três técnicas de avaliação: medição, simulação e modelagem. Se o analista tiver preferência por alguma técnica, mesmo que seja mais fácil utilizar outra pode levar a melhores resultados do que de outra forma, mas também pode causar problemas introduzindo fenômenos que antes não estavam presentes ou ignorando algum fenômeno importante no sistema original. Por isso a necessidade de dominar o básico das três técnicas. Há número de fatores a ser considerado na escolha da técnica correta.
8.       SUPERVALORIZAR IMPORTANTES PARAMETROS: É uma boa ideia fazer uma lista completa das características da carga e do sistema que afetam seu desempenho. Estas características chamam-se parâmetros. O analista então escolhe um conjunto de valores para cada um destes parâmetros. O resultado final depende destas escolhas. Supervalorizar um ou os parâmetros mais importantes pode tornar todo resultado inútil.
9.       IGNORAR FATORES SIGNIFICANTES: Um parâmetro que pode variar durante o estudo é chamado de fator. O restante dos parâmetros permanecem com valores fixos. Não são todos os fatores que afetam significativamente o desempenho do sistema. É necessário identificar os fatores que sejam relevantes para o desempenho. A menos que haja uma razão, estes parâmetros devem ser usados como fator no estudo de desempenho. Fatores que estão sob o controle do usuário final são facilmente manipuláveis e devem ter prioridade a fatores que são mais difíceis de serem alterados. Não gaste tempo comparando alternativas que o usuário final não pode adotar por envolver ações inaceitáveis ou fogem da sua esfera de influência. Também é importante conhecer a aleatoriedade de vários parâmetros e cargas que afetam o desempenho, pois a escolha dos fatores deve ser feita baseada em sua relevância e não no conhecimento do fator. Deve ser feito todo esforço para gerar resultados realistas de todos os para metros. Para parâmetros desconhecidos deve ser feita uma sensível análise mostrando o efeito de mudar seus valores para quantificar o impacto de sua incerteza.
10.   PROJETO EXPERIMENTAL INADEQUADO: Projetos experimentais relatam o numero de medidas ou experimentos de simulação para serem conduzidos e os valores dos parâmetros usados em cada experimento. A escolha correta destes valores pode gerar mais informações em um mesmo numero de experimentos enquanto seleções impróprias pode gerar perda de tempo e recurso. Além disso, projetos muito simples onde os fatores são alterados um por um pode levar a conclusões errôneas se o efeito de um depende dos valores de outros.
11.   NÍVEL DE DETALHE INADEQUADO: o nível de detalhe usado na modelagem de um sistema tem muito impacto na formulação do problema. Para estudar pequenas variações de uma abordagem comum, usar um modelo detalhado pode ser mais útil, mas em situações muito diferentes um modelo de alto nível pode ser analisado mais rápido e de forma mais barata. É um erro comum criar um tipo de modelo quando a situação pede outro tipo. Assim, o objetivo de um estudo tem um impacto significativo no modelo e como ele é analisado.
12.   SEM ANALISE: Um erro muito comum em projetos de medição é quando se gera uma enorme quantidade de dados, mas o analista não consegue direcionar seu uso. Ema alguns casos um grande relatório cheio de dados brutos são apresentados sem nenhuma explicação de como se usa os resultados.
13.   ANÁLISE ERRADA: Há um número de erros de análises feitas em medidas, simulações e modelos analíticos, como considerar médias em taxas ou simulações muito curtas. Estes erros são discutidos ao longo do livro quando for tratada cada técnica.
14.   SEM ANALISE DE SENSIBILIDADE: Às vezes o analista coloca muita ênfase no resultado da sua análise e esquece o valor do sistema ou da carga de entrada. Sem uma análise da sensibilidade não é possível determinar se o resultado pode variar com pequenas mudanças no cenário e sem a análise de sensibilidade é difícil entender a relativa importância dos parâmetros.
15.   IGNORAR ERROS DE ENTRADA: muitas vezes um parâmetro de interesse não pode ser medido. Em vez disso outra variável que pode ser medida serve de base para estimar o parâmetro. Isso pode introduzir incertezas nos dados de entrada e consequentemente nos dados de saída. O analista precisa ajustar o nível de confiança do resultado do modelo a partir dessa informação. Além disso, pode ser que não valha a pena produzir esses dados com precisão se a entrada for significativamente grande a ponto das variações não produzirem diferença. Nem sempre erros de entrada podem ser igualmente distribuídos em torno da média gerando uma entrada tendenciosa.
16.   TRATAMENTO INDEVIDO DAS DISCREPÂNCIAS: Valores que fogem da média são chamados de discrepantes. Essas discrepâncias podem representar um problema. Se essa discrepância não for causada pelo sistema real, deve ser ignorada, pois incluí-la pode produzir um modelo inválido. Por outro lado, se a discrepância ocorre no modelo real, deve ser levado em conta ou o modelo será considerado errado. Decidir quais discrepâncias devem ser ignoradas e quais devem ser incluídas é parte da avaliação de desempenho e requer um cuidadoso entendimento do sistema que está sendo modelado.
17.   NÃO ASSUMIR MUDANÇAS NO FUTURO: Isto quer dizer que o modelo funcionará tanto no futuro quanto no passado. Um modelo baseado em carga e desempenho observados no passado é usado para prever a o desempenho no futuro. E tanto a carga quanto o comportamento do sistema no futuro será o mesmo do medido atualmente. O analista deve considerar essa suposição e limitar a quantidade de tempo que a previsão é feita.
18.   IGNORAR VARIABILIDADE: É comum o analista utilizar apenas a média do desempenho quando a variabilidade é muito complicada ou impossível. Se a variabilidade for muito alta, a média sozinha pode ser enganosa, principalmente em sistemas em que há momentos de picos e momentos de ociosidade, podendo impactar o desempenho do usuário.
19.   ANÁLISE MUITO COMPLEXA: Sempre é preferível que se explique o resultado com o modelo mais simples possível. Muitos problemas do dia a dia são resolvidos por modelos simples, mesmo que no meio acadêmico se valorize modelos mais complexos. No mercado de trabalho onde o tempo é essencial, desenvolver um modelo funcional e simples o suficiente que seja fácil de comercializar dentro de um tempo hábil é mais valorizado. O ideal é começar com um modelo simples e após os primeiros resultados, inserir as complicações. Modelos complexos também podem ser difíceis de entender para quem realmente toma as decisões e seus resultados podem não ter credibilidade.
20.   APRESENTAÇÂO DOS RESULTADOS INDEVIDA: Ocasionalmente o estudo de desempenho ajuda na tomada de decisões. Uma análise que não produza resultados ou uma análise em que os resultados são difíceis de entender resulta e um uma falha e a entidade que toma decisões pode não conseguir projetar, vender ou conseguir patrocínio. Transmitir os resultados para os tomadores de decisão é responsabilidade do analista, por isso deve-se tomar cuidado com as palavras, imagens e gráficos explicando a análise. “A métrica para o desempenho de uma análise não é o numero de análises feitas, mas sim o número de análises que ajuda na tomada de decisão”.
21.   IGNORAR OS ASPECTOS SOCIAIS: Uma boa apresentação do resultado da análise querer dois tipos de habilidades: sociais e materiais. Escrever e falar são habilidades sociais enquanto modelar e analisar são habilidades materiais. Muitos analistas possuem suas habilidades materiais bem desenvolvidas, mas na hora de apresentar os resultados não tem boas habilidades sociais. A aceitação da análise depende da confiança entre quem toma decisões e o analista e a apresentação dos resultados é uma forma de compreendê-lo. Assim as habilidades sociais são importantes para apresentar resultados que são contra o que quem toma decisão acredita ou para grandes mudanças em projetos. Porém, em alguns casos, a pessoa que verá a apresentação do analista também é um analista e está mais interessado na metodologia adotada do que no resultado final. Nesse caso pode ser interessante fazer duas apresentações: uma focando a linguagem, crença e jargões dos tomadores de decisões e outra focando a metodologia. Às vezes os tomadores de decisões possuem objetivos diferentes que não são interessantes para o analista, como cronograma, política ou viabilidade de implementação e podem ser ótimos em analisar os resultados, mas não entender a análise em si. Um esforço em entender seus interesses e incorpora-los na apresentação pode aumentar suas chances de vender seu peixe.
22.   OMITIR HIPÓTESES E LIMITAÇÕES: Muitas vezes o analista omite suposições e limitações no relatório final. Isso pode levar usuários a usar a análise em outro contexto que não é válido, ou mesmo o analista cria uma teoria no início, mas se esquece das limitações fazendo conclusões sobre ambientes que a análise não se aplica.

A seguir tem-se um checklist de perguntas que devem ser respondidas afirmativamente em uma análise de desempenho.
1.       O sistema foi definido corretamente e os objetivos estão claros?
2.       Os objetivos foram definidos de forma imparcial?
3.       Seguiu todos os passos da análise metodicamente?
4.       O problema foi compreendido antes da análise?
5.       As métricas de desempenho são relevantes para este problema?
6.       A carga de trabalho (entrada) está correta neste problema?
7.       A técnica de avaliação usada é apropriada?
8.       Possui uma lista de parâmetros que afetam o desempenho do sistema?
9.       Da lista de todos os parâmetros, foram escolhidos os fatores que serão variados?
10.   O projeto experimental é eficiente em termo de tempo e resultados?
11.   O nível de detalhamento é ideal?
12.   Os dados medidos são apresentados com análise e interpretação?
13.   A análise está estatisticamente correta?
14.   A análise de sensibilidade foi feita?
15.   Erros na entrada causam significantes alterações no resultado?
16.   As discrepâncias na entrada ou saída foram corretamente tratados?
17.   Foram modeladas as futuras mudanças na carga e no sistema?
18.   A variância da entrada foi levada em conta?
19.   A variância dos resultados foi levada em conta?
20.   A análise é de fácil explicação?
21.   O estilo da apresentação está de acordo com sua audiência?
22.   Os resultados foram apresentados graficamente tanto quanto possível?
23.   As teorias e limitações da análise foram claramente documentadas?

2.2 - Uma abordagem sistemática da avaliação de desempenho
A maioria dos problemas de desempenho são únicos. Os parâmetros usados em um projeto não podem ser usados em outros, mas alguns passos são comuns a todos para evitar os erros da seção anterior.
1.       DECLARE OBJETIVOS E DEFINA O SISTEMA: O primeiro passo é declarar quais são os objetivos da avaliação assim como limites do sistema. Esse limite depende do objetivo do estudo. A escolha destes limites afetam as métricas de desempenho assim como a carga que será usada para comparar os sistemas, por isso é importante entender o sistema. Outras considerações também devem ser feitas, como o controle administrativo. Se os patrocinadores (sponsors) não tiver controle sobre algum componente, eles podem querer manter este componente fora do sistema.
2.       LISTAR SERVIÇOS E RESULTADOS: cada sistema provê um conjunto de serviços. Quando um usuário requer algum destes serviços, diversos tipos de resultados são possíveis. E alguns destes resultados são desejáveis, outros não. Então uma lista dos serviços e saídas são uteis para determinar a correta métrica e cargas.
3.       SELECIONAR MÉTRICAS: O próximo passo é selecionar os critérios para comparar o desempenho. Esses critérios são chamados de métrica. Normalmente estão relacionadas à velocidade, precisão ou disponibilidade dos serviços. A seleção correta das métricas é discutida no capítulo 3
4.       LISTAR PARÂMETROS: o próximo passo é listar todos os parâmetros que afetam o desempenho. Divide-se em parâmetros do sistema e parâmetros da carga (parâmetros da carga são as características das requisições dos usuários). No início a lista não estará completa, mas depois da primeira análise novos parâmetros podem ser adicionados. O ideal é que a lista esteja sempre atualizada e de fácil compreensão para que se possa discutir o impacto de vários parâmetros e que dados devem ser coletados antes e durante a análise.
5.       SELECIONAR OS FATORES DO ESTUDO: Os parâmetros que variam podem variar no sistema se chamam fatores e seus valores se chamam níveis. No geral a lista de fatores é muito grande. O ideal é considerar apenas um pequeno úmero de fatores que afetam muito o desempenho do sistema e manter com valores fixos o restante. Um erro comum é escolher como fatores parâmetros de fácil medição e ignorar outros às vezes mais influentes apenas por ser difícil de medir ou variar. A escolha dos fatores também deve levar em conta a economia, política e as limitações impostas por quem toma decisão. Isto ajuda a encontrar uma solução que é aceitável e implementável.
6.       ESCOLHER A TÉCNICA DE AVALIAÇÃO: Há três técnicas para avaliação do desempenho: simulação, medição de um sistema real e modelagem analítica. A seleção da técnica depende do nível desejado de precisão assim com dos recursos avaliados para resolver os problemas. A seleção das técnicas está avaliada no capitulo 3
7.       SELECIONAR A CARGA DE TRABALHO: A carga de trabalho consiste em uma lista de serviços solicitados ao sistema. Ela depende de cada técnica de avaliação escolhida. Em todo caso é essencial que a carga represente o uso do sistema na vida real e para produzir uma carga representativa é necessário medir e caracterizar a carga em um sistema já existente.
8.       PROJETAR EXPERIMENTOS: Com os fatores e seus níveis definidos é necessário decidir uma sequencia para que o experimento forneça o máximo de informação com o mínimo de esforço. Na pratica é interessante conduzir o experimento em duas partes. Uma primeira parte com um grande número de fatores, mas um pequeno número de níveis. Sem seguida é escolhido os fatores que mais afetam o sistema e então gerados um maior numero de níveis a eles.
9.       ANALISAR E INTERPRETAR DADOS: É importante reconhece que a saída das medidas e simulações são quantidades aleatórias e que variam quando o experimento é repetido. Ao comprar duas alternativas é necessário levar em conta a variabilidade dos resultados, pois comparar as médias pode resultar em conclusões imprecisas. E interpretar é a chave da “arte da análise”. O experimento em si não gera conclusões, apenas resultados e são este resultados que farão com que o analista ou o tomador de decisão chegar a uma conclusão. E ainda existe a possibilidade de vários analistas obterem o mesmo resultado, porém tirarem conclusões diferentes.
10.    APRESENTAR OS RESULTADOS: No fim de todos os passos do projeto de desempenho, é necessário comunicar a comunidade os resultados. É importante que os resultados sejam fáceis de entender. Normalmente são apresentados na forma de gráfico e sem jargão estatístico em suas escalas corretas. Outro ponto é que, com o conhecimento obtido no estudo pode ser necessário redefinir alguma decisão dos passos anteriores como redefinir as limitações e os fatores, por exemplo. Isso leva a conclusão que o projeto completo consiste em vários ciclos e não em uma simples sequencia de passos.
Resumindo:
1.       Definir os objetivos do estudo e limitações do sistema.
2.       Listar serviços e possíveis saídas.
3.       Selecionar métricas de desempenho
4.       Listar parâmetros da carga e do sistema
5.       Selecionar fatores e seus níveis
6.       Selecionar a técnica de avaliação
7.       Selecionar a carga de trabalho
8.       Projetar o experimento
9.       Analisar e interpretar os dados.
10.   Apresentar os resultados ou fazer de novo, se necessário.