GNU Scientific Library

4 12 2008

The people who develops scientific software often needs to create from scratch many things. One of the most commom things to be reimplemented that I’ve ever seen was a mathematical library that can work with some sort of statistics, random number generator, and so on.

Well, I’m not out of this reality, and now’s my time to implement a mathematical library to work with the things I need to my research. Googlin’ around a bit, I’ve found a project (and old project, it’s worth to say – 1996 is the last changelog) that have implemented many useful things to scientific research: The Gnu Scientific Library or simply GSL.

Implemented Features:

  • Complex Numbers
  • Roots of Polynomials
  • Special Functions
  • Vectors and Matrices
  • Permutations
  • Sorting
  • BLAS Support
  • Linear Algebra
  • Eigensystems
  • Fast Fourier Transforms
  • Quadrature
  • Random Numbers
  • Quasi-Random Sequences
  • Random Distributions
  • Statistics
  • Histograms
  • N-Tuples
  • Monte Carlo Integration
  • Simulated Annealing
  • Differential Equations
  • Interpolation
  • Numerical Differentiation
  • Chebyshev Approximation
  • Series Acceleration
  • Discrete Hankel Transforms
  • Root-Finding
  • Minimization
  • Least-Squares Fitting
  • Physical Constants
  • IEEE Floating-Point
  • Discrete Wavelet Transforms
  • Basis splines

Enjoy, researchers! =P

[1] Download Site: ftp://ftp.gnu.org/gnu/gsl/

[2] GSL Home Page: http://www.gnu.org/software/gsl/





Workshop do Grupo MODCS – 2008.2

27 11 2008

A cada semestre, o grupo MoDCS (Modeling of Distributed and Concurrent Systems) se reúne para apresentar em um workshop os trabalhos que se encontram em desenvolvimento pelos estudantes e pesquisadores integrantes. O objetivo principal do workshop é compartilhar conhecimento, discutir idéias, criar oportunidades de interação entre os projetos em desenvolvimento e propor trabalhos futuros. Adicionalmente, é uma excelente oportunidade para maior integração entre os colegas pesquisadores. A grande maioria dos trabalhos em desenvolvimento contemplam a modelagem de aspectos temporais em diversos domínios de aplicação, mais notadamente no projeto e avaliação de desempenho de sistemas embarcados, sistemas de comunicação e sistemas associados à manufatura. O escopo dos trabalhos atualmente em desenvolvimento pelos integrantes do MoDCS estão associados as seguintes áreas de concentração:

- Sistemas Embarcados
- Sistemas de Tempo Real
- Consumo de Energia
- Especificação
- Tolerância a Falhas
- Manufatura
- Sistemas Distribuídos

Data e Local:
Data do Evento: 05/12/2008
Locais: Auditorio CIn(Bloco A – Térreo) e Anfiteatro CIn(Bloco C – Galpão)

Maiores Informações
Julian Menezes  – cjma@cin.ufpe.br
Fábio Chicout – fcfmc@cin.ufpe.br

Programação

08:30-09:00 Abertura do Evento Prof. Paulo Maciel / Prof. Ricardo Massa
09:00-09:20

Uma Abordagem Baseada em Rede de Petri Temporizada para Modelagem e Análise de Especificações de Sistemas Embarcados Críticos com Restrições de Energia

Ermeson Andrade

09:20-09:40 Performance Modeling for Evaluation and Planning of Electronic Funds Transfer Systems with Bursty Arrival Traffic Carlos Araújo
09:40-10:00 Geração de Carga em Ambiente de Planejamento de Capacidade Hugo / Wagner
10:00-10:20 Intervalo  
10:20-10:40 Software Synthesis for Energy-Constrained Hard Real-Time Embedded Systems Eduardo Tavares
10:40-11:00 Abordagem híbrida para controle do consumo de energia em sistemas embarcados de tempo real crítico Pedro Dallegrave
11:00-11:20 Torwards Performance Modeling and Evaluation of EFT Systems Aging

Fábio Chicout

11:20-11:40 Avaliação de desempenho de Um Processo de Testes de Softwares: Uma metodologia baseada em Modelos Estocásticos Marcelo Marinho
11:40-12:00 Escalonamento de Processos Paralelos em Simuladores Multifísicos

Renata Medeiros (UPE)

12:00-14:00

Almoço  
14:00-14:20

Uma Abordagem Estocástica Baseada em Rede de Petri Coloridas para Estimar o Consumo de Energia e o Tempo de Execução de Sistemas Embarcados

Gustavo Callou
14:20-14:40 ALUPAS: Um Simulador Estocástico para Análise do Consumo de Energia e Desempenho de Softwares para Sistemas Embarcados

Bruno Nogueira

14:40-15:00 Performability Evaluation of Electronic Funds Transfer Systems

Erica Teixeira

15:00-15:20

Intervalo

 
15:20-15:40 Alocação e otimização em logística de distribuição Claudiana Batista
15:40-16:00 Avaliação e Planejamento de Capacidade de Call Centers usando o CC Modeler Alysson Barros
16:00-16:20 Planejamento de Capacidade SOA: uma abordagem Preditiva e Estocástica, através do Mapeamento de BPEL para GSP Marcelo Teixeira (UPE)
16:20-16:40 Avaliação de Desempenho de Processos Dinâmicos de Software Rebeka Brito
16:40-17:00 Avaliação de Workflow com Restrição de Recursos César Augusto
17:00-17:20 Implementação de um escalonador híbrido considerando restrições de energia Bruno Silva
17:20-17:40 Uma Abordagem Orientada a Aspectos para Implementar Contratos em JML Henrique Rebêlo (UPE)
17:40-18:00 Compilador Intra-task DVS para sistemas de tempo real com baixo consumo de energia Bruno Montenegro (UPE)

 

[1] http://www.modcs.org

[2] http://www.cin.ufpe.br

[3] http://www.cin.ufpe.br/~prmm





Sharpe Portal

26 11 2008

There’s a tool named Sharpe, which stands for Symbolic Hierarchical Automated Reliability and Performance Evaluator, that I’m using on my research experiments. I’ts interface was developed in Java, and has a wide spread acceptation on the research field of Performance Modelling.

Sharpe is capable of modelling on a wide gamma of mathematical models, and this is a great point on the tool. It can model GSPNs, Fault Trees, Markov Chains and Reliability Block Diagrams.

In the way to bring together the community around the tool, Trivedi and his group, created a portal, The Sharpe Portal, to achieve this. A nice and clean place to see some resources around the tool. Hope it becomes the central part to learn and contribute to Sharpe.

 

[1] Sharpe Portal: http://sharpe.pratt.duke.edu/

[2] Trivedi’s Site: http://people.ee.duke.edu/~kst/





O Novo Perfmon 1/2

26 09 2008

É, veio o Windows Vista, e com ele uma repaginada no antigo Performance Monitor além de somente acrescentar contadores. Agora ele se chama Reliability and Performance Monitor, e vem com algumas novidades:

  • Conjunto de Coletores de Dados

 image

A maior novidade dessa versão do perfmon. É possível criar Coletores de dados através de templates do Windows ou ao seu gosto.

image

Existem três templates que já vem configurados, Basic, System Diagnostics e System Performance. Esses templates são uma melhoria importante, pois podem ser criados e reutilizados. O formato deles é XML, o que também facilita a criação.

image

É importante ressaltar que esses templates buscam monitoramento de todas as formas que o perfmon consegue tirar. Isso implica em extração de traces do kernel por exemplo, e é bom que se tome cuidado, para não coletar alquilo que não se deseja.

  • Exibição de Recurso

image

Essa é agora a tela inicial do perfmon. São exibidos gráficos dos desempenhos instantâneos de cada um dos principais recursos do sistema. É interessante para ter uma visão geral do sistema, sem muito esforço de configuração da ferramenta. Caso se deseje algum detalhe em algum dos ramos, basta clicar na barra correspondente, Em CPU, além da barra já mostrar o consumo atual, e a freqüência máxima, é possível ver os processos em execução, e classificá-los pelo número de theads ou pelo quanta de CPU consumido, como pode ser visto na figura abaixo:

image

Em relação ao disco, a barra mostra o IO total, e o maior tempo ativo do disco. No corpo, mostra também a velocidade de leitura e escrita, prioridade da tarefa de IO, e o tempo de resposta em milisegundos, separados por processo que está realizando a atividade de disco

image

Na rede, a barra mostra o tráfego total da rede, em kbps e a porcentagem de utilização do recurso. É mostrado como informação para cada aplicação que utiliza a rede, o endereço com o qual a aplicação está trocando informação, a quantidade de dados em bytes/min que a aplicação está enviando/recebendo/total.

image

No recurso de memória, a barra mostra a quantidade de faltas de página por segundo e o percentual de memória física utilizada. Na tabela, o separado por processo, tem-se as faltas de página por minuto, os kilobytes disponíveis para a instância da aplicação, os kilobytes disponíveis no working set que podem estar disponíveis para uso de outras aplicações, e os kilobytes da instância da aplicação que estão dedicados ao processo.

image

É bom ter em mente que estas informações são extremamente valiosas para uma análise instantânea, mas não tão importantes assim para uma análise em um intervalo de tempo grande.

  • Monitor de Confiabilidade

image

Aqui, no monitor de confiabilidade, é mostrado um relatório de estabilidade do sistema. Todas as desinstalações, falhas nas aplicações, falhas de hardware, falhas no windows, e outras falhas que aconteçam são registradas aqui, e organizadas no gráfico acima. Ao clicar em cada dia, um relatório das falhas ocorridas no dia. Esse gráfico é uma forma visual de perceber se o sistema está ficando mais ou menos estável. Se estiver crescente, é bom sinal. A nota dada varia de 0 – 10, e não é o rating do Windows.

[1] BATTISTI, Júlio. Windows Vista – Curso Completo. Editora Axcel

[2] TechNet www.technet.com





Writing Markov Chains/Escrevendo Cadeias de Markov

24 07 2008

Escrever um texto científico pode ser muito demorado, mas se você trabalha com modelos e precisa de alguns desenhos, você tem um problema em mãos. Estou trabalhando em um artigo que uso cadeias de markov para representar meus modelos, mas não tenho ferramentas de edição delas. Imagine o problema para colocar os modelos no texto usando o LaTeX.

Existem então duas soluções: ou você desenha no paint (ou outro editor gráfico) e exibe no texto como uma figura, ou você usa um desenho programático no LaTeX. Esse post é para falar dessa segunda forma.

Encontrei uma dica interessante de como fazer isso em [1], mas está ainda assim dando trabalho para compreender e usar o exemplo dado para fazer novos modelos.

A primeira coisa é usar o pacote xy, e para isso, use a linha

\usepackage[all]{xy}

Vamos então criar um desenho usando uma malha matricial como guia. Em cada célula da malha, vamos colocar sempre um estado (a bolinha) e uma transição. Para colocar o estado, se usa o seguinte comando:

*+[o][F-]{texto}

Para entender esse comando, o [o] representa que queremos uma forma arredondada, o [F-] faz que ele encolha de acordo com o texto dado dentro das chaves.

Para fazer os arcos, usa-se:

@/^/^{texto exemplo}

Que representa uma seta por cima que tem o “texto exemplo” próximo dela.

Um exemplo simples:

\begin{equation}
	\xymatrix{
	 *+[o][F-]{0} \ar@/^/[r]^{a}& *+[o][F-]{1} \ar@/^/[l]^{b}
	}
	\label{eq:exampleMarkovChain}
\end{equation}

vai produzir o seguinte resultado:

image

Veja que o & que está no código é somente para separar as células da malha, assim como quando construímos matrizes.

==========================================================

Write a scientific text can be very slow, but if you work with models and needs some drawings, you have a problem at hand. I am working on an article that use markov chains to represent my models, but have no tools for editing them. Imagine the problem to put the models in the text using LaTeX.

There are two solutions then: either you draw in the paint (or other graphical editor) and displays the text as a picture, or you use a drawing program in LaTeX. This post is to talk about this second way.

I found an interesting hint of how to do this in [1], but is still giving work to understand and use the example given to new models.

The first thing is to use the package xy, and for this, use the line

\usepackage[all](xy)

We will then create a design using a mesh matrix as a guide. In each cell of the loop, we will always place a state (the ball) and a transition. To put the state, you use the following command:

*+[o] [F-] (text) 

To understand this command, [o] represents that we want a rounded form, and the last option, [F-] make the form shrink according to the text.

To make the arches, you use:

@/^/^{text example}

That represents an arrow over who has the “text example” close to it.
A simple example:

\begin{equation}
	\xymatrix{
	 *+[o][F-]{0} \ar@/^/[r]^{a}& *+[o][F-]{1} \ar@/^/[l]^{b}
	}
	\label{eq:exampleMarkovChain}
\end{equation}

it’s gonna produce the following results:

image
See that & into code? That is the a code needed to separate cells in the mesh. Just as a matrix

[1] http://www.rennes.enst-bretagne.fr/~gbertran/pages/tutorials_latex.html#sujet44
[2] XY Package – http://www.ctan.org/tex-archive/macros/generic/diagrams/xypic/






Load caracterization – 2nd Part / Caracterização de carga – 2nd

14 07 2008

Again I’m here to talk a bit ’bout this problem and now there’s a good new! I’ve found a toolkit, (a bit old, but it’s ok) that solves my problem on listing the disk activity. Lucky mine, ’cause I defined my data before knowing it was possible to collect data in that way.

I’m talking ’bout sysinternals [2] that consists on a collection of small softwares, that monitors or tweaks a system. Be careful on using it, because some applications produce a huge data collection activity, they can stop the machine.

On my problem, what I need to discover is a sequence of disk access in a trace, this information is held by Windows Kernel, and is a bit difficult to retrieve. In sysinternals suite, there’s a diskmon app, that monitors disk activity, in the way below:

image

See that the output is in the form: time, duration of a request, in witch disk a request were done, the type of request (write, read), the sector (read/written) and the lenght.

Now, this solves the problem i’ve talked ’bout here

=================================================

“>Mais uma vez estou aqui para falar um pouco sobre este problema, e agora há uma boa notícia! Encontrei um kit de ferramentas, (um pouco velho, mas tudo bem), que resolve o meu problema com a lista de atividade do disco. Sorte minha, por eu definir a métrica antes de saber se era possível recolher os dados dessa forma como planejei

Eu estou falando do sysinternals [2] que consiste em uma coleção de pequenos softwares, que monitoram ou ajustam um sistema. Tome cuidado ao usar, pois algumas aplicações produzem uma enorme atividade de recolha de dados, que podem parar a máquina.

Em meu problema, o que eu preciso descobrir é uma seqüência de acesso em um trace de disco, informação esta que existe no Kernel do Windows, e portanto é um pouco difícil de recuperar. Na suite sysinternals, há um aplicativo discmon, que monitora atividade de disco, na forma como na figura:

 

=============

[1] http://live.sysinternals.com/
[2] http://technet.microsoft.com/en-us/sysinternals/default.aspx
[3] http://technet.microsoft.com/en-us/sysinternals/bb896646.aspx





2º ESOL

3 07 2008

Participei hoje do II Encontro de Software Livre do CEFET-PE (ESOL). O evento foi bem legal, e me pareceu ter evoluído muito com relação à primeira edição, tendo até participação de algumas empresas daqui do estado. O Laboratório de Análise de Performance ItautecCIn/UFPE (onde trabalho) participou do evento com duas equipes, cada uma apresentando uma palestra e responsáveis por um stand de divulgação do Librix, o Linux da Itautec.

A Equipe CP (Capacity Planning) apresentou a palestra “Monitoramento de Desempenho de Sistemas *Unix”, e a Equipe HCT (Hardware Compatibility Test) apresentou “Testes de compatibilidade de hardware” cada uma aproveitando suas experiências de trabalho.

No mais, só tenho a agradecer à organização do evento que nos tratou muito bem. Mariana, Talita: valeu pelo chocolate (batom garoto) que ganhamos!

Abraço, e espero poder participar do 3º ESOL!





Desempenho no Linux – 1

18 05 2008

Estamos pesquisando sobre isso aqui no Itautec-Lab, e encontrei algumas ferramentas interessantes. Dentre elas, o pacote sysstat tem um conjunto bem completo, sendo composto pelas seguintes ferramentas:

  • iostat – relata estatísticas de CPU e estatísticas de entrada/saída para dispositivos, partições, e sistemas de arquivos de redes.
  • mpstat – relata estatísticas individuais ou combinadas de relacionadas a processadores.
  • pidstat – relata estatísticas sobre tarefas (processos) do linux: I/O, CPU, memoria, etc.
  • sar – coleta, relata, e salva informação de atividade do sistema. (CPU, memoria, discos, interrupções, interfaces de rede, TTY, tabelas do kernel,etc.)
  • sadc – É o coletor de dados de atividade do sistema, usado como um backend para o sar.
  • sa1 – coleta e guarda dados binários no arquivo de dados diários da atividade do sistema. É um frontend para o sadc desenhado para ser executado a partir do cron.
  • sa2 – escreve um relatório de atividade diária sumarizado. É um frontend para o sar desenhado para ser executado a partir do cron.
  • sadf – exibe dados coletados pelo sar em múltiplos formatos (CSV, XML, etc.). É útil para carregar dados de desempenho em um banco de dados, ou importá-los para uma planilha para a construção de gráficos.

Além dessas, também tempos algumas mais, fora do sysstat nos *unix:

  • top – mostra a atividade da CPU em real-time;
  • ntop – mostra a atividade da rede em real-time por usuário;
  • ps – dá um snapshot dos processos em execução;
  • dstat – ferramenta versátil de estatísticas de recursos;
  • ifstat – InterFace STATistics Monitoring (Interface de Monitoramento de Estatísticas);
  • tcpstat – ferramenta de relatório de estatísticas de interface de rede;
  • netstat – ferramenta para exibição do estado da rede;
  • systune – Otimização de kernel através do sistema de arquivos /proc;
  • procinfo – Mostra informação do sistema a partir de /proc;
  • atop – Monitor de processos, em interface console;
  • atopsar – Relator de atividades do sistema, relacionado ao atop;
  • slabtop – mostra informações em tempo real do slab do kernel (slabs são pedaços contíguos de memória, e uma cache consiste de um ou mais slabs);

Nos próximos posts, vou separar cada ferramenta pelo eixo de monitoramento e estudar um pouco cada uma delas. À medida que o estudo for crescendo, vou atualizando esse post.

Até mais!

Algumas Referências (maior parte dessas ferramentas são indicadas nas man pages do linux) :

[1] http://www.blogmind.com.br/archives/25/analise-de-performance-no-gnulinux-com-ifstat-vmstat-dstat-uptime-iostat-procinfo/87

[2]    http://pagesperso-orange.fr/sebastien.godard/





Load characterization using Markov Chain

25 04 2008

Well, in this post I’d like to throw in the desk some of my last researches about markov chains. I’ve presented something seminal (as the overall state of the work at this moment) ’bout this article I’m working on here (in portuguese), where I’m trying to create a Markov Chain Model to represent (and afterwards simulate) a disk and processor scenario.

A Markov Chain (MC) is very simple to understand, and there’s a good introductory article in Wikipedia.

That’s easy to work with MC because of it’s mathematical formalism, thats easy to understand and well founded, thanks it’s matrix representation. Going straight at the point, all the hard work is to extract the probabilities of changing to a state to another, and in the case of disk analysis, and when you’ve metrics like % Disk time, %disk read time and % disk write time, it’s quite hard to know about the state of the disk in a moment (if it’s reading, writing or in idle state).

If someone got any idea, it’s all welcome. Until then, I’m going to try some statistical acrobacies to see if this problem can be solved.

See ya!

Other references ’bout Markov Processes and Models:

http://en.wikipedia.org/wiki/Hidden_Markov_model
http://en.wikipedia.org/wiki/Semi-Markov_process
http://en.wikipedia.org/wiki/Markov_process
Queueing Networks and Markov Chains – G. Bolch, S. Greiner, H. de Meer & K. S. Trivedi





Workshop MoDCS

11 04 2008

Ocorreu hoje no CIn-UFPE, o Workshop do grupo de pesquisa MoDCS (Modelling of Concurrent Systems) encabeçado pelo Prof. Paulo Maciel. O evento ocorreu com uma seqüência de palestras dos envolvidos (alunos de mestrado, de doutorado, professores de outras universidades) que mostravam o que está sendo realizado e qual o andamento das pesquisas.

Houveram palestras bem interessantes, com trabalhos sobre desempenho de sistemas embarcados, sistemas TEF, e muito mais. A programação está aqui (colocar link). Acabei entrando na dança, e também apresentei um trabalho que estou me envolvendo, entitulado “Metodologia de Análise de Cargas de um Sistema TEF usando Cadeias de Markov” e (ainda bem) fui o último a apresentar.

Esse trabalho está sendo um “complemento” para o trabalho de Erica e Julian, que estão fazendo a análise de desempenho do mesmo sistema TEF. Enquanto eles estão levando a cabo todo um processo de análise de desempenho, com seleção de métricas, medições, análises, geração de modelo abstrato (em Redes de Petri), meu objetivo é fazer uma análise das medições realizadas através do processo de carga do sistema, mas usando dessa vez Cadeias de Markov, e quem sabe até, validar o modelo em Rede de Petri (lembrando que é possível converter uma Rede de Petri em uma família de Cadeias de Markov).

Foi uma pena que não deu pra chamar o pessoal do CEFET, nem os amigos pra ir ver, mas mesmo assim, foi legal ter o pessoal das minhas disciplinas assistindo (Valeu Claudiana, Wagner e Hugo)