Escolar Documentos
Profissional Documentos
Cultura Documentos
• Introdução
• Computação Paralela
• Computação Distribuída
• VANTAGENS
• Extensibilidade
• O sistema pode crescer
gradativamente
• Novos softwares podem ser
instalados gradativamente
• Compartilhamento de
recursos
• Recursos de alto custo
podem ser melhor utilizados
• Servidores de arquivo
• Servidores de e-mail
COMPUTAÇÃO DISTRIBUÍDA
• DESVANTAGENS
O mundo
é paralelo
APLICAÇÕES DE COMPUTAÇÃO PARALELA E
DISTRIBUÍDA
• Atualmente as aplicações comerciais fornecem uma força igual ou maior no
desenvolvimento de computadores mais rápidos
• Processamento de grandes quantidades de dados de forma sofisticada
Bancos de Dados, mineração de dados
Exploração de Petróleo
Motores de Busca da Web, Serviços Web baseados em Negócios
Imagens Médicas e Diagnóstico
Gestão de Empresas Nacionais e Internacionais
Modelagem Financeira e Econômica
Realidade Virtual, principalmente na indústria do entretenimento
Tecnologias Multimídia
Ambientes Colaborativos de Trabalho
BIBLIOGRAFIA
4. https://computing.llnl.gov/tutorials/parallel_comp/
COMPUTAÇÃO ESCALÁVEL
Conceitos fundamentais
ROTEIRO
• Termos Gerais
• Tarefa / Tarefa Paralela
• Execução Serial / Execução Paralela
• Escalonamento
• Granularidade
• Sincronização
• Escalabilidade
• Processadores Multicore
• Speedup
TERMOS GERAIS
Tarefa (Task)
Uma seção, logicamente discreta de trabalho
computacional, é tipicamente um programa ou um
conjunto de instruções de um programa executado
por um processador.
Escalonamento
Normalmente feito pelo sistema operacional.
Ele determina quais threads executam em
determinado momento.
TERMOS GERIAS
Granularidade
É o tamanho do trabalho atribuído a cada thread
antes que elas se sincronizem.
Granularidade
Um programa que é dividido em partes pequenas
entre as threads tem granularidade fina. Pequenos
trechos de código com comunicação alta -> maior
potencial de exploração de paralelismo.
Sincronização (Synchronization)
A coordenação das tarefas paralelas, em tempo de
execução, é importante para garantir resultados
determinísticos. Sincronização neste contexto, se
refere às técnicas utilizadas para garantir essa
coordenação.
TERMOS GERIAS
Speedup
Tempo da execução serial / Tempo da execução
paralela.
Um dos indicadores mais simples e o mais
utilizado para quantificar o desempenho de um
programa paralelo.
Pipelinning
Quebra de uma tarefa em etapas realizadas por
unidades diferentes de processamento.
BIBLIOGRAFIA
1º Semestre de 2013 2
Visão Geral da Aula de Hoje
1º Semestre de 2013 3
DEFINIÇÃO
1º Semestre de 2013 4
Defnição
• Programação Concorrente / Programação Paralela
– Do inglês Concurrent Programming, onde
Concurrent signifca "acontecendo ao mesmo
tempo".
– Uma tradução mais adequada seria programação
concomitante. Entretanto, o termo programação
concorrente já está solidamente estabelecido no
Brasil. Algumas vezes é usado o termo Programação
Paralela com o mesmo sentdo (Toscani, 2003).
1º Semestre de 2013 5
Defnição
• Tradicionalmente, a grande maioria dos
programas escritos são programas sequenciais
• Para serem executados em um único
computador com uma CPU
– O problema é quebrado em séries discretas de
instruções.
• As instruções são executadas uma após a outra
– Apenas uma instrução pode executar em um
determinado instante do tempo.
1º Semestre de 2013 6
Defnição
problema
instruções
CPU
1º Semestre de 2013 7
Defnição
• Computação Paralela é defnida como o uso
simultâneo de múl tplos recursos
computacionais para resolver um problema
computacional
• Para ser executado em diversas CPUs
– Um problema é quebrado em partes discretas que
podem ser ser resolvidas concorrentemente
– Cada parte é então quebrada em uma série de
instruções
– Instruções de cada parte do programa são
executadas simultaneamente em diferentes CPUs
1º Semestre de 2013 8
Defnição
problema instruções
1º Semestre de 2013 9
Defnição
• Os recursos computacionais podem incluir:
– Um único computador com múltplos
processadores
– Um número arbitrário de computadores
conectados pela rede
– Uma combinação de ambos
1º Semestre de 2013 10
Defnição
• O problema computacional geralmente
demonstra característcas como a habilidade de
ser:
– Quebrados em partes de um trabalho que pode ser
resolvido de forma simultânea
– Executar múltplas instruções do programa a
qualquer momento no tempo
– Resolvido em menos tempo com vários recursos de
computação do que com um único recurso
computacional
1º Semestre de 2013 11
Defnição
• A computação paralela é uma evolução da
computação sequencial, que tenta imitar o
estado das coisas no mundo real: muitos
eventos complexos inter-relacionados
acontecendo ao mesmo tempo, mas dentro
de uma sequência.
1º Semestre de 2013 12
Defnição
• Programação Paralela Mais complexa que a
Programação Sequencial.
• Presença de erros dos programas sequenciais + erros
associados as interações entre os processos
• Erros dependentes do momento exato em que o
escalonador do SO realiza um chaveamento de contexto
– Difculdades de reproduzir e identfcar os erros
• Apesar da maior complexidade, há muitas áreas nas quais
a programação paralela é vantajosa.
– Sistemas com vários processadores (máquinas paralelas ou
sistemas distribuídos)
• Aproveitamento do paralelismo para acelerar a execução do
programa.
1º Semestre de 2013 13
Defnição
• A programação paralela é natural para vários
tpos de aplicações, principalmente para
aquelas que apresentam paralelismo
implícito
• Aplicações com paralelismo implícito:
– aquelas para as quais pode-se distnguir
facilmente funções para serem realizadas em
paralelo
1º Semestre de 2013 14
Motvação
• Spooling de Impressão
PC PC PC
1º Semestre de 2013 15
Motvação
• Organização de um servidor de impressão
Receptor Transmissor
Protocolo
Escritor
Leitor Impressor
1º Semestre de 2013 16
MOTIVAÇÃO
1º Semestre de 2013 17
O Mundo é Paralelo
Formação de Galáxias Padrões dos oceanos
Padrões do tempo
1º Semestre de 2013 19
Usos para Computação Paralela
1º Semestre de 2013 20
Usos da Computação Paralela
• Atualmente as aplicações comerciais fornecem uma força
igual ou maior no desenvolvimento de computadores
mais rápidos.
– Processamento de grandes quantdades de dados de forma
sofstcada
• Bancos de Dados, mineração de dados
• Exploração de Petróleo
• Motores de Busca da Web, Serviços Web baseados em Negócios
• Imagens Médicas e Diagnóstco
• Gestão de Empresas Nacionais e Internacionais
• Modelagem Financeira e Econômica
• Realidade Virtual, principalmente na indústria do entretenimento
• Tecnologias Multmídia
• Ambientes Colaboratvos de Trabalho
1º Semestre de 2013 21
Usos da Computação Paralela
1º Semestre de 2013 22
OBJETIVOS DA
PROGRAMAÇÃO PARALELA
1º Semestre de 2013 23
Razões - Computação Paralela
• Economizar tempo e dinheiro
– Em teoria, jogar mais recurso em uma tarefa vai
encurtar seu tempo para a conclusão, com
potenciais economias de custos. Clusters
paralelos podem ser construídos a partr de
componentes baratos
1º Semestre de 2013 24
Razões – Computação Paralela
• Há uma demanda contnua por maior
processamento
• Áreas que requerem grande processamento
computacional incluem:
– Modelagem Numérica
– Simulação de problemas cientfcos e de engenharia
• Para esses casos por exemplo, a computação
deve ser completada dentro de um período de
tempo razoável
1º Semestre de 2013 25
Razões - Computação Paralela
• Resolver grande problemas
– Muitos problemas são tão grandes / complexos
que é impratcável ou impossível resolvê-los num
único computador, especialmente quando a
memória é limitada.
– Exemplo:
• Motores de busca da Web / Bases de dados de
processamento de milhões de transações por segundo
(Problemas que exigem petafops
e petabytes de recursos de computação.)
1º Semestre de 2013 26
Razões - Computação Paralela
• Prover Concorrência
– Um único recurso de computação pode fazer
uma tarefa de cada vez. Vários podem fazer
muitas tarefas simultaneamente
– Exemplo:
• AccessGrid – Provê uma rede de colaboração global
em que as pessoas podem se reunir e conduzir o
trabalho “virtualmente”. (www.accessgrid.org)
1º Semestre de 2013 27
Razões - Computação Paralela
• Recursos não-locais
– Usar recursos computacionais em uma rede
como a Internet quando recursos locais são
escassos.
• Exemplo:
– SETI@home (setathome.berkeley.edu) utliza mais
de 330 mil computadores para um poder
computacional de 528 TeraFLOPS (Ago. 2008)
– Folding @ home (folding.stanford.edu) utliza mais
de 340 mil computadores para um poder
computacional de 4.2 petaFLOPS (Nov. 2008)
1º Semestre de 2013 28
Razões - Computação Paralela
• Limite da computação serial
– Razões fsicas e prátcas restringem a construção
de computadores cada vez mais rápidos
• Velocidade de transmissão
• Limites a miniaturização
• Limitações econômicas
1º Semestre de 2013 29
Razões - Computação Paralela
• Arquiteturas de computadores atuais são
cada vez mais dependentes do paralelismo
em nível de hardware para melhorar o
desempenho
1º Semestre de 2013 30
Razões – Computação Paralela
• Utliza mais de um computador ou um
computador com mais de um processador, para
resolver um determinado problema
• Motvação
– N computadores operando simultanealmente pode
atngir o resultado N vezes mais rápido – Não será N
vezes mais rápidos por uma série de razões
– Outros motvos incluem: tolerância a falhas, grande
quantdade de memória disponível, etc.
1º Semestre de 2013 31
Medida Simples
• Speedup
– A relação entre o tempo gasto para executar
uma tarefa com um único processador e o tempo
gasto com N processadores, ou seja, Speedup é a
Medida do ganho em tempo
• S = T(1) / T (N)
• Ou seja, Speedup é a medida do ganho em tempo
1º Semestre de 2013 32
Medidas Simples
• Lei de Amdahl
– htp://en.wikipedia.org/wiki/Amdahl%27s_law
• Utlizar essa Lei, juntamente com o cálculo do
Speedup para o Primeiro Trabalho da
Disciplina.
1º Semestre de 2013 33
Leitura
Recomendada
1º Semestre de 2013 34
Leitura Recomendada e Tarefa
• Introducton to Parallel Computng, Ananth Grama,
Anshul Gupta, George Karypis, Vipin Kumar - 2ª ed.,
Addison Wesley
– Capítulo 01
• Formato das apresentações
• Formato da parte escrita
• Tarefa
– Escreva um programa implementando uma calculadora
paralela
1º Semestre de 2013 35
Bibliografa
• TOSCANI, S., OLIVEIRA, R., CARISSIMI, A.,
Sistemas Operacionais e Programação
Concorrente. Série didátca do II-UFRGS,
2003.
• htps://computng.llnl.gov/tutorials/parallel_
comp/
1º Semestre de 2013 36
Dúvidas
1º Semestre de 2013 37
Próxima Aula...
• Revisão de Arquiteturas Paralelas
1º Semestre de 2013 38
COMPUTAÇÃO ESCALÁVEL
Paralelismo, Concorrência e
Escalabilidade
ROTEIRO
• Arquiteturas de Memória
• Modelos de Programação
ARQUITETURAS DE MEMÓRIA
UMA
ARQUITETURAS DE MEMÓRIA
NUMA
ARQUITETURAS DE MEMÓRIA
MEMÓRIA COMPARTILHADA
VANTAGENS DESVANTAGENS
• O compartilhamento • É de responsabilidade do
de dados entre as programador a sincronização
tarefas é rápido dos acessos à memória global
compartilhada
ARQUITETURAS DE MEMÓRIA
MEMÓRIA DISTRIBUÍDA
• Sistemas de memória distribuída possuem uma rede
de comunicação para interconectar os processadores
• Cada processador tem sua própria memória local
• Não existe um espaço de endereçamento global, um
processador tem acesso somente a sua memória
• É tarefa do programador determinar quando e como
um dado é propagado de um processador para o outro
• A sincronização das tarefas é também função do
programador
ARQUITETURAS DE MEMÓRIA
MEMÓRIA DISTRIBUÍDA
VANTAGENS DESVANTAGENS
MODELO DE
MEMÓRIA
DISTRIBUÍDA
BIBLIOGRAFIA
2. https://computing.llnl.gov/tutorials/parallel_comp/
COMPUTAÇÃO ESCALÁVEL
Paralelismo em
Sistemas Multicore
ROTEIRO
SISD SIMD
Single Instruction, Single Instruction,
Single Data Multiple Data
MISD MIMD
Multiple Instruction, Multiple Instruction,
Single Data Multiple Data
CLASSIFICAÇÃO DAS ARQUITETURAS
CRAY-1 PDP-1
IBM-360 UNIVAC1
CLASSIFICAÇÃO DAS ARQUITETURAS
Intel / AMD
NVIDIA
Fonte: 4 e 5
ARQUITETURA MULTICORE
Sistemas Multicore
Consiste em várias cópias de um processador
dentro de um único chip
Cada cópia é chamada de núcleo ou core
Essas cópias são interconectadas por um
barramento ou outro mecanismo de comunicação
São utilizados para executar diferentes tarefas de
forma simultânea ou uma mesma tarefa mais
rapidamente
Consomem menos energia que alternativas mais
Application
Directives, Environment
OpenMP library
Compiler variables
void main ( )
{
int ID = 0;
printf(“hello(%d)”, ID);
printf(“world(%d)\n”,ID);
}
Diretivas C/C++
• Formato
# p ragm a o m p n o m e d a d iretiva [cláu sula, ...] n ew lin e
N ecessária p ara U m a d iretiva O p cio n al. P od em N ecessária. D eve
to d as as d iretivas válid a q u e d eve ap arecer em ser in serid o ap ó s o
ap arecer d ep o is d a q u alqu er o rd em e b lo co estru tu rad o
p rag m a e an tes d as rep etid as qu an do q u e está d entro d a
cláu su las n ecessário d iretiva.
• Exemplo:
– #pragma omp parallel default(shared) private(beta,pi)
• Seguem o padrão de diretivas de compilação para C/C++
• Cada diretiva se aplica no máximo a próxima instrução,
que deve ser um bloco estruturado
Construtor de região PARALLEL
• Fork-join
– Quando uma thread chega na região paralela, ela cria um time de threads e
se torna a mestre do time. Ela faz parte do time e tem o número 0.
– O código que começa no início da região paralela é duplicado e todas as
threads o executam
– Existe uma barreira implícita no final da seção paralela, e somente o
mestre continua a executar após esse ponto
• O número de threads na região paralela é definido por:
– Uso da rotina omp_set_num_threads ()
– Na diretiva #pragma omp parallel num_threads ()
– Uso da variável de ambiente OMP_NUM_THREADS
– Default da implementação
Exercício 1: Hello World (multithreaded)
Arquivo header OpenMP
#include <omp.h>
void main ( )
{ Início da região paralela
com número default de threads
#pragma omp parallel
{
int ID = 0;
printf(“hello(%d)”, ID);
printf(“world(%d)\n”,ID);
} Final da região paralela
}
Exercício 1: Hello World (multithreaded)
#include <omp.h>
void main ( )
{
#pragma omp parallel Opções para compilação e
{ ligação
gcc -fopenmp
int ID = 0;
printf(“hello(%d)”, ID);
printf(“world(%d)\n”,ID);
}
Exercício 1: Hello World (multithreaded)
omp_set_num_threads(4)
4.0
(1+x2) dx =
2.0 0
Podemos aproximar a
integral por uma soma de
retângulos:
0.0
X
1.0
F(x )∆x
i
i=0
2
Introdução a Computação Paralela com o Open
MPI
Abstract
This paper introduces an overview about Distributed Parallel Computing and related
technologies using Message Passing Interface approach (MPI). MPI is a standard
specification to message-passing systems sponsored by MPI-Forum.
Resumo
Este minicurso introduz uma visão geral sobre programação paralela distribuída
através da abordagem de message passing. O MPI (Message Passing Interface) é uma
especificação mantida pelo MPI-Forum e se tornou um padrão para comunicação de
dados em Computação Paralela e de Alto Desempenho.
2.1. Introdução
Um dos grandes desafios da Ciência da Computação atualmente é viabilizar soluções
computacionais que reduzam o tempo de processamento e forneçam respostas ainda
mais precisas. Frequentemente surgem propostas com as mais diversas abordagens que
exploram novas formas de resolver tais problemas ou tentam ainda melhorar as soluções
existentes.
Uma das grandes áreas que se dedica a propor tais melhorias é a computação
paralela e de alto desempenho – HPC (High Performance Computing) do inglês – que
tem como base várias subáreas da Ciência da Computação, como por exemplo,
arquitetura de computadores, linguagens de programação, compiladores, teoria da
computação e computabilidade, recebendo ainda , influências de varias outras áreas, tais
como computação gráfica.
Este minicurso introduzirá o padrão MPI (Message Passing Interface). O MPI é
um conjunto de especificações de protocolos de comunicação utilizados em HPC,
desenvolvido pelo consórcio MPI Forum, composto por pesquisadores e pela indústria.
24
A linguagem de programação utilizada durante o minicurso será o C e o
conjunto de bibliotecas do Open MPI. Esta implementação fornece ainda compiladores
para as linguagens de programação Fortran e C++ que não serão abordadas no
minicurso, porém, após o entendimento dos exemplos podem ser facilmente adaptados.
O minicurso está organizado da seguinte maneira. A seção 2.2 apresenta
motivações para aprender computação paralela e suas aplicações. A seção 2.3 introduz
aspectos de arquitetura de computadores. Já a seção 2.4 mostra a classificação de Flynn.
Na seção 2.5 é introduzido os dispositivos de interconexão voltados para computação
paralela. Na seção 2.6 há uma explicação sobre Clusters e Grids. Na seção 2.7 é
mostrado algumas métricas para computação paralela. Na seção 2.8 é apresentado o
padrão MPI e sua API, enquanto a seção 2.9 apresenta uma conclusão sobre o tema.
25
processamento -“Wall Clock Time”. Para estes aspectos, devem ser avaliadas a
utilização de tecnologias que suportem tais requisitos e ainda promovam escalabilidade.
Este último ponto é muito importante pois afeta diretamente a continua evolução e
aprimoramento da abordagem numérica proposta.
Fora do contexto científico, vivenciamos também uma explosão no volume de
dados. As corporações, por exemplo, buscam cada vez mais ferramentas que
transformem estes dados em informações valiosas, com o objetivo de fornecer respostas
as necessidades de seus negócios e os ajudem a otimizar seus processos.
Em geral, tais tecnologias tem como base a tríade Recognition – Minning –
Synthesis [Chen 2008], que utilizam gigantescos datasets e lançam mão do uso de
soluções massivamente paralelas para processar e obter suas respostas.
Áreas emergentes como a Web semântica, por exemplo, buscam algoritmos e
formas de resolver a escalabilidade com ênfase na capacidade de processamento de
tarefas mais complexas e na habilidade de processar grandes datasets [Peiqiang et al.
2009].
Há fascinantes aplicações e excelentes oportunidades onde a computação
paralela pode representar ganhos de desempenho significativos. Poderíamos relacionar
inúmeros outros casos, porém acredito que os exemplos acima são suficientes e nos
motivam a investir tempo para conhecimento e aprimoramento do assunto.
26
Os modelos que exploram ambientes computacionais de memória distribuída são
os que adotam o paradigma de message passing (troca de mensagens). Tais modelos são
formados por rotinas de comunicação e sincronização de tarefas - sendo o MPI um
exemplo - que podem ser ativadas a partir de três modos:
• disponibilidade: o processo somente poderá enviar uma mensagem se o receptor
estiver disponível;
• standard: uma mensagem pode ser enviada mesmo se não houver um receptor
para ele;
• síncrono: similar ao modo padrão, porém o processo de envio só é considerado
como concluído quando o receptor inicia a operação de recebimento.
Estes modelos são altamente portáveis e habilitam a execução de programas nos
mais diferentes tipos de máquinas paralelas.
27
vários núcleos em um mesmo chip, conhecidos atualmente como cores, reduziu
significativamente os preços desta tecnologia.
Os modelos de programação projetados para este tipo de arquitetura geralmente
usam processos com baixo custo computacional. Estes por sua vez são conhecidos como
Threads. As abordagens mais conhecidas são as disponíveis nos sistemas operacionais,
como o Pthreads em sistemas Unix Like e WinThreads no Windows .
Há ainda modelos de alto nível como o OpenMP, que fornece uma API de alto
nível, portável, composta de diretivas de compilação, bibliotecas de execução e
variáveis de ambientes. O OpenMP é baseado no modelo fork-join (Figura 2.3).
Figura 2.4. OpenMP: a diretiva #pragma omp parallel for informa ao compilador
que a região deve ser paralelizada.
28
2.3.4. NUMA (Non-Uniform Memory Access)
Quando o tempo de acesso de memória está intrinsecamente relacionado a localização
do processador, este grupo é denominado como NUMA. Esta arquitetura é desenhada
para prover o compartilhamento total de recursos, executando um mesmo sistema
operacional. Como a memória de todas as máquinas participantes são mapeadas em um
mesmo espaço de endereçamento, a comunicação se dá por uma rede de interconexão.
29
Figura 2.5. Classificação de Flynn.
30
• Memory Channel: segundo Dantas (2005), a abordagem conhecida como
Memory Channel fornece até 100Mb/s de velocidade de transferência e a
distância física pode ser de até 10 (dez) metros. Esta tecnologia usa um switch
externo e placas específicas para realizar a sincronização dos dados.
• Quadrics ou QsNET: a topologia desta rede é do tipo Fat-Tree, sendo possível
expandir a rede a milhares de dispositivos de comutação. A taxa de transferência
pode atingir a centenas de Mb/s e fornece baixa latência. Utiliza uma interface
de rede programada chamada Elan [Dantas 2005].
• Infiniband: é uma especificação para protocolos de comunicação gerida pelo
grupo Infiniband Trade Association (http://www.infinibandta.org). Este grupo é
composto por fornecedores líderes de mercado tais como HP, IBM, Intel,
Lellanox, Oracle, Qlogic e System Fabric Works. Este protocolo fornece uma
interface de comunicação com elevadas taxas de transferência e suporte a
endereçamento para até 64.000 dispositivos, suportando failover e QoS (Quality
of Service).
31
Os Grids utilizam middlewares que dividem uma grande tarefa em pequenas partes
distribuindo entre os nós participantes e consolidando os resultados.
Um dos mais bem-sucedidos middlewares para computação em Grid é o projeto
open source encabeçado pela Universidade da Califórnia, nos EUA. O Berkeley Open
Infrastructure for Network Computing, mais conhecido pelo seu acrônimo BOINC. O
BOINC é um software para computação voluntária utilizado em importantes projetos
como o SETI@home, que analisa ondas de rádio provenientes do espaço sideral em
busca de vidas extraterrestres. O CERN (European Organization for Nuclear Research)
também utiliza este software para analisar os dados gerados pelo Grande Colisor de
Hádrons , o LHC. Há ainda projetos específicos como o World Community Grid e o
Folding@Home, este último da universidade de Standford, que se dedicam a buscar
cura para doenças.
32
Speedup=Núm.processadores−Fração sequêncial do programa( Núm.processadores−1)
Esta lei é conhecida como lei de Gustafon-Barsis.
2.8. O MPI
Durante a década de 90, foram produzidas duas especificações que unificaram os
trabalhos dos participantes do MPI Forum (http://www.mpi-forum.org) na área de
processamento paralelo e distribuído. Este trabalho foi encabeçado por um grupo
formado por cerca de 60 pessoas provenientes de mais de 40 organizações dos Estados
Unidos e Europa, sendo fortemente influenciado pelos resultados até então alcançados
nos grupos do IBM T.J. Watson Research Center, Intel's NX/2 , Express, nCUBE's
Vertex, p4 e o PARMACS. Outras importantes contribuições vieram também do
Zipcode, Chimp, PVM, Chameleon e PICL.
A primeira versão – MPI-1 - foi publicada no ano de 1994 contando com os
requisitos base necessários para o padrão de troca de mensagens. Os pontos mais
complexos foram deixados para a versão MPI-2, lançada posteriormente em 1997
[Mattson et al. 2010] .
Os trabalhos mais recentes do MPI Forum remontam aos anos de 2008 e 2009,
tendo como diretrizes a correção de bugs, a compilação das duas especificações – MPI-1
e MPI-2 - em um único documento e a publicação de revisões minor: MPI-2.1 e MPI-
2.2. A última atualização aconteceu em setembro de 2012, quando o grupo publicou o
maior grupo de atualizações no padrão, incluindo novas extensões, a remoção de
bindings obsoletos para o C++ e o suporte ao FORTRAN 2008. Este último release foi
nomeado como MPI-3.0.
Apesar de não ser uma norma homologada por institutos como IEEE, IETF, o
MPI é “De facto” um padrão para arquiteturas de memória distribuída, escrito e
ratificado pelo MPI Forum. A idéia central do MPI consiste em prover rotinas de
sincronização e controle processos, além da distribuição e consolidação dos dados entre
os computadores interconectados, utilizando para isto o paradigma de troca de
mensagens.
O modelo da API do MPI, entrega ao programador uma camada de abstração,
altamente portável, entre o sistema operacional/tecnologias de comunicação e a
aplicação, permitindo escalar a execução do programa entre os computadores da rede,
com o uso de suas memórias e poder de processamento, baseado no padrão de divisão e
conquista. Por ser uma camada de alto nível, é possível utilizar o mesmo programa em
uma grande variedade de computadores que estejam interconectados. A API é muito
adequada a programas de propósito geral desenhados para sistemas SIMD e MIMD.
O padrão tem como foco auxiliar a todos que precisem ou desejem criar
aplicativos portáveis e paralelos em Fortran e C, fornecendo uma interface simples que
atenda desde soluções menos sofisticadas até as mais avançadas, voltadas para o alto
desempenho, como as disponíveis em computadores massivamente paralelos.
Cabe enfatizar que o MPI é uma especificação. No entanto, há disponíveis no
mercado implementações livres e pagas. Podemos relacionar no modelo pago o Intel
MPI, HP MPI e o MATLab MPI. Já as implementações open source mais utilizadas são
33
o Open MPI e o MPICH. Fabricantes de supercomputadores costumam incluir features e
ferramentas específicas que visam maximizar o desempenho em suas máquinas.
Apesar de todas as facilidades do padrão, a identificação das zonas paralelas
(áreas do código que podem ser executadas simultaneamente a outras tarefas) e o
dimensionamento de carga entre os computadores participantes, ficam a cargo do
desenvolvedor e devem ser explicitadas no programa. Uma análise prévia do problema a
ser tratado, irá auxiliá-lo nesta tarefa.
Como o objetivo é o aumento de desempenho, deve-se ter em mente o projeto de
um programa que realiza a menor troca de mensagens possível, visando anular e/ou
reduzir o impacto do tempo despendido na distribuição e consolidação dos dados, no
tempo total de execução. Podemos relacionar como exemplos os Hipercubos e Meshes,
que são formas de interconexão que visam reduzir e otimizar o processamento. Não
iremos abordar este tema aqui por ser tratar de um tópico complexo para quem está
começando a explorar computação paralela.
Para finalizar a apresentação do padrão, vamos conhecer alguns conceitos
importantes inerentes a API, os quais nos ajudarão a compreender as funções
disponíveis e como funciona o MPI. Estes são:
• Processo: é o módulo executável, ou seja, seu programa, que pode ser dividido
em N partes, e executado em uma ou mais máquinas;
• Grupo: é o conjunto de processos. No MPI a constante MPI_COMM_WORLD
armazena o comunicador de todos os processos definidos na aplicação MPI;
• Rank: o controle de execução do programa em MPI depende diretamente da
correta identificação do processador no grupo de trabalho. Esta identificação é
um número inteiro que varia de 0 a N-1 processos. A função MPI_Comm_rank
determina qual é o identificador de cada processo dentro do comunicador;
• Comunicador: é o componente que representa o domínio de uma comunicação
em uma aplicação MPI;
• Buffer de Aplicação: é o espaço reservado em memória para armazenar os dados
das mensagens que um processo necessita enviar ou receber, gerenciado pela
aplicação;
• Buffer de Sistema: é o espaço reservado em memória pelo sistema para o
gerenciamento de mensagens.
34
Figura 2.6. Estrutura de um código em C/MPI.
35
MPI_FLOAT float
MPI_DOUBLE double
MPI_PACKED
MPI_BYTE
2.8.2 MPI_Init
Este método inicializa o ambiente de execução do MPI, sincronizando os processos
entre os computadores participantes e deve ser invocado uma única vez durante toda a
execução do seu aplicativo. Caso contrário, o MPI irá sinalizar com o erro
MPI_ERR_OTHER. A assinatura do método encontra-se a seguir:
Devemos assegurar que a chamada seja realizada por apenas uma Thread e que
esta mesma Thread invoque, ao final do processamento, o método MPI_Finalize.
2.8.3 MPI_Finalize
Finaliza o ambiente de execução do MPI, liberando os recursos utilizados durante o
processamento. Deve ser invocado sob a mesma Thread que executou o MPI_Init. Este
método não possui argumentos.
36
datatype
Tipo do dado.
dest
Rank do destinatário.
tag
Identificador para a mensagem (número inteiro).
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
função MPI_Comm_create)
37
request
Solicitação de envio. Utilizado pelas funções de bloqueio como MPI_Wait para assegurar a
conclusão do processamento.
2.8.6 MPI_Wait
Ao realizar operações assíncronas, podemos nos deparar com situações de dependência (
dados, instruções, entre outros) onde é necessário assegurar a conclusão dos mesmos
antes de executar a próxima instrução. Para solucionar tais questões o MPI fornece
funções como o MPI_Wait.
request
Identificador da requisição a ser bloqueada.
status
Retorna a informação sobre a situação da operação. Para testar o status utilize a função
MPI_Test
38
dois processos de um grupo de trabalho, especificados através do contexto - para
arquiteturas SIMD (MPI_COMM_WORLD), já em MIMD (o comunicador criado pela
função MPI_Comm_create).
As operações mais comuns nas comunicações coletivas são as que realizam
sincronização, distribuição de dados (Broadcast) e finalmente, as reduções (Reduction)
para operações de consolidação de dados, como operações de soma por exemplo.
2.8.8 MPI_Barrier
O MPI_Barrier define um ponto de sincronização entre todos os processos participantes
da comunicação coletiva, isto é, o código não pode prosseguir enquanto todos não
estiverem no sincronizados no mesmo ponto.
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
função MPI_Comm_create)
2.8.9 MPI_Bcast
A distribuição de uma mensagem para todos os processos do grupo é realizado pela
função MPI_Bcast.
2.8.10 MPI_Reduce
Para a consolidação dos resultados do processamento em comunicações coletivas, a
função MPI_Reduce fornece vários tipos de operações (Tabela 2.2).
Tabela 2.2. Operações do MPI_Reduce no MPI
ID Operação
39
MPI_MIN Menor número
MPI_SUM Soma
MPI_PROD Produto
sendbuf
Endereço do buffer de envio.
recvbuf
Endereço do buffer de recebimento.
count
Número de elementos a ser enviado (número inteiro e não negativo).
datatype
Tipo do dado.
op
Identificador da operação de redução.
root
Rank do processo que realizará a operação de redução.
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
função MPI_Comm_create)
40
sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype, int
root,MPI_Comm comm)
sendbuf
Endereço do buffer para envio dos dados.
sendcount
Número de elementos a ser enviado (número inteiro e não negativo).
sendtype
Tipo do dado.
recvcount
Número de elementos no buffer de recebimento (número inteiro e não negativo).
recvtype
Tipo do dado.
root
Rank do processo de envio.
comm
Comunicador. Em SIMD (MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
função MPI_Comm_create)
2.8.12 MPI_Allgather
Quando todos os processos precisam receber os dados coletados dos demais processos
do grupo, o MPI_Allgather deve ser utilizado. Novamente aqui os dados precisam ser
do mesmo tamanho.
41
sendcount
Número de elementos a ser enviado (número inteiro e não negativo).
sendtype
Tipo do dado.
recvbuf
Endereço do buffer para recebimento dos dados.
recvcount
Número de elementos no buffer de recebimento (número inteiro e não negativo).
recvtype
Tipo do dado.
comm
Comunicador. Em SIMD ( MPI_COMM_WORLD), Em MIMD (O comunicador criado pela
função MPI_Comm_create) .
42
2.9. Conclusões
Neste minicurso buscamos explorar uma visão geral sobre arquiteturas paralelas e o
modelo de programação baseado no paradigma de message passing. A partir das
funções e ideias apresentadas, é possível construir códigos explorando paralelismo com
o MPI. As features mais complexas do MPI não abordadas retratam questões de
refinamento de desempenho e manipulação de arquivos de forma paralela. Estas
características podem ser conhecidas através do site do MPI-Forum( http://www.mpi-
forum.org) ou por intermédio das bibliografias listadas nas referências.
Em Computação Paralela, há ainda outras tecnologias que podem ser utilizadas
em conjunto ao MPI. Em Memória Compartilhada (Shared Memory), por exemplo, o
modelo do OpenMP fornece os mesmos benefícios de portabilidade do OpenMPI para
este tipo de arquitetura. Há ainda abordagens que exploram paralelismo em placas de
vídeo , como o modelo livre chamado OpenCL, definido pelo consórcio de empresas
chamado Khronos Group, além dos modelo proprietários propostos pela NVIDIA
(CUDA) e o OpenACC(http://www.openacc-standard.org/), encabeçado atualmente pela
PGI, Nvidia, Caps e Cray.
Referências
Chen, Yen-Kuang. (2008), “Convergence of Recognition, Mining, and Synthesis
Workloads and Its Implications”, http://ieeexplore.ieee.org/xpl/login.jsp?
tp=&arnumber=4479863&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls
%2Fabs_all.jsp%3Farnumber%3D4479863, Maio.
Dantas, Mario. (2005), Computação Distribuída de Alto Desempenho, Axcel, 1º edição.
De Rose, César A. F. Navaux, Phillippe O. A. (2005), Arquiteturas Paralelas, Bookman,
1º edição.
Gebali, Fayez. (2011), Algorithms and Parallel Computing, Wiley, 1º edição.
Hennesy. John L. Patterson, David A. (2012), Computer Architecture, Morgan
Kaufamann, 5º edição.
Kirk, David B. Hwu, Wen-mei W. (2010), Programming Massively Parallel Processors,
Morgan Kaufmann, 1º edição.
Martin, Milo M. K. Hill,Mark D. Sorin,Daniel J. (2012), “Why on-chip cache coherence
is here to stay”, http://doi.acm.org/10.1145/2209249.2209269, Julho
Mattson, T.G, Sanders. B.A., Massingill, B.L. (2010), Patterns for Parallel
Programming. Addison-Wesley, 1º edição.
Mishra, Bhabani Shankar. and Dehuri, Satchidananda (2011). “Parallel Computing
Environments: A Review”., http://tr.ietejournals.org/article.asp?issn=0256-
4602;year=2011;volume=28;issue=3;spage=240;epage=247;aulast=Mishra;t=6, Maio
MPI Forum. (2012), “MPI-3.0 Standard Specification”, http://www.mpi-
forum.org/docs/mpi-3.0/mpi30-report.pdf, Setembro.
43
Peiqiang, L. Zeng, Y. Kotoulas, S. Urbani, J. and Zhong, N. (2009) “The Quest for
Parallel Reasoning on the Semantic Web”, http://dx.doi.org/10.1007/978-3-642-
04875-3_45, Novembro.
Pitt-Francis, J. and Whiteley, J. (2012), An Introduction to Parallel Programming Using
MPI - Guide to Scientific Computing in C++ ,Springer, 1º edição
Quammen, Cory. (2005). “Introduction to programming shared-memory and distributed-
memory parallel computers”, http://doi.acm.org/10.1145/1144382.1144384 , Outubro
Quinn, Michael J. (2003), Parallel Programming in C with MPI and OpenMP, Mc Graw
Hill, 1º edição.
Watanabe, K. Otsuka, T. Tsuchiya, J. Nishi, H. Yamamoto, J. Tanabe, N. Kudoh, T. and
Amano, H. (2007), “A Network Interface Controller Chip for High Performance
Computing with Distributed PCs, Parallel and Distributed Systems”,
http://ieeexplore.ieee.org/stamp/stamp.jsp?
tp=&arnumber=4288127&isnumber=4288116, Setembro.
44
Introdução ao CUDA
Material elaborado por Davi Conte.
→ https://www.youtube.com/watch?v=Cqht_EfXDLk&t=193s
Figura 1. GPU exposta em uma placa de vídeo [1]
A GPU fica encarregada pelo processamento de cada pixel da tela, gerando, assim,
a imagem proveniente de de um alto número de operações. Por isso, a GPU possui
diversos núcleos que são como pequenos processadores (diferentes de processadores de
propósito geral como os desenvolvidos pela Intel para Notebooks ou Desktops). A Figura 2
ilustra a diferença dos múltiplos cores (núcleos) de uma CPU e os milhares de uma GPU.
Figura 2. As placas de vídeo têm milhares de núcleos para processar cargas em paralelo [2]
Muitas vezes quando temos uma tarefa muito complexa a ser feita, podemos dividi-la
em partes menores que possam ser mais simples de serem resolvidas. A programação
paralela ou concorrente aplica esse conceito aos processadores em um computador. Um
processador executa uma única instrução de código por vez, portanto um computador com
diversos núcleos pode executar diversas instruções ou operações simultaneamente,
resolvendo problemas de menor complexidade paralelamente, ou seja, em um mesmo
instante de tempo.
Tradicionalmente, os softwares são construídos em computação serial ou
sequencial, onde o problema é dividido em uma série de instruções que são executadas
sequencialmente, uma após a outra, em um único processador, onde somente uma
instrução pode ser executada em um dado intervalo de tempo. Na computação paralela,
existe o uso simultâneo de múltiplos recursos computacionais no intuito de resolver
determinado problema. Desta forma, os problemas são divididos em partes menores que
podem ser resolvidas concorrentemente, sendo que cada parte é subdividida em uma série
de instruções, executadas simultaneamente em diferentes processadores, coordenadas por
um mecanismo de controle global [3].
A programação concorrente trata-se de um paradigma que permite a implementação
de software com múltiplas tarefas independentes, ainda que em máquinas com um único
núcleo de processamento, onde estas atividades disputam recursos computacionais,no
intuito de solucionar um problema específico.
O modelo de programação paralela permite ganhos significativos em critérios
de tempo de execução, quando comparados com soluções implementadas por meio de
programação serial que são refletidos no tempo final de execução.
A Figura 3 mostra a partição de um problema, que pode ser a implementação de um
algoritmo, em quatro tarefas cujas instruções são executadas paralelamente por diferentes
CPUs.
Figura 3. Divisão de tarefas de um problema entre as CPUs.
Para maior compreensão desse assunto, temos o próprio site da NVIDIA (produtora
de placas de vídeo e proprietária do CUDA) explicando sobre computação em aceleradores
gráficos (GPU), seguindo para o link abaixo.
→http://www.nvidia.com.br/object/what-is-gpu-computing-br.html
3. CUDA
→ http://www.nvidia.com.br/object/cuda_home_new_br.html
Uma chamada de Kernel nada mais é do que a chamada da função que será
executada pela GPU de forma paralela. Essa função precisa ser marcada para que o
compilador (nvcc) saiba que a função é um código para a GPU. Observe nas imagens
abaixo a diferença entre um programa “Hello, World” tradicional em C e outro “Hello, World”
com uma chamada de Kernel (execução na GPU).
Figura 6. Hello World com função Kernel executada na GPU.
O primeiro código, responde com “Hello, World” da CPU, enquanto que o segundo
responde da GPU. Estes dois códigos possuem duas diferenças notáveis:
● Uma função chamada Kernel qualificada com _ _global__; e
● A chamada para esta função utilizando <<<1,1>>>.
A função kernel, por mais que seja executada na GPU, também pode conter
parâmetros em sua chamada, que falaremos a seguir. Considere o código em CUDA a
seguir que será tomado como exemplo.
Você poderá perceber diversas alterações, novas linhas e comandos nesse trecho
de código, porém essas mudanças demonstram dois conceitos:
● Podemos passar parâmetros para a função k ernel como qualquer outra função; e
● Precisamos alocar memória para realizar qualquer atividade no device, como
retornar valores ao host.
Podemos concluir que uma chamada de kernel funciona da mesma maneira que
uma função comum no padrão C. Podemos passar os parâmetros da mesma forma
tradicional e a compilação realiza a parte complexa da passagem dos parâmetros do host
para device.
Se você observou o código com atenção, percebeu que, da mesma forma que é
utilizado free() para liberar espaço alocado em memória com malloc() no padrão C,
também existe o cudaFree() para liberar espaço alocado da memória pelo c
udaMalloc().
Até aqui aprendemos que é possível alocar e liberar espaço de memória no device
(GPU), porém vimos que não é possível alterar este endereço a partir de código no host.
Devido a isso, a seguir veremos duas maneiras mais comuns de acessar a memória do
device: utilizando ponteiros dentro do código do device e realizando chamadas
cudaMemcpy().
O primeiro método de ponteiros dentro do código do device funciona da mesma
forma que o padrão em C utilizado no host. Utilizando um ponteiro dentro do device, o
resultado é armazenado na memória que é apontada. Vamos tomar como exemplo a
seguinte expressão executada no device: *c = a + b. São somados os parâmetros ‘a’ e ‘b’ e
o resultado é armazenado na memória apontada por ‘c’. Para isso, é necessário passar um
ponteiro por parâmetro, como no código utilizado na Figura 7.
Além disso, podemos acessar a memória utilizando a função cudaMemcpy() a partir
do código host. Esta função funciona exatamente como memcpy() em C padrão. O primeiro
parâmetro é a variável a receber a cópia (destino), o segundo é a variável de origem, o
terceiro é o tamanho que será copiado e o último, diferente do C padrão, é uma instrução
informando a origem dos ponteiros, se do host ou device. No exemplo abaixo,
cudaMemcpyDeviceToHost informa que o ponteiro de origem pertence ao device e o que
receberá a cópia será do host. O oposto seria cudaMemcpyHostToDevice, onde a fonte é
no host e o destino é no device.
Figura 8. Vetor contém seu índice elevado ao quadrado. [4]
Podem ser observados alguns padrões utilizados tanto no código da Figura 10 como
nos exemplos dos capítulos anteriores:
À primeira vista, a variável blockIdx.x parece causar erro de sintaxe por ser utilizada
como valor para tid, porém não ter sido declarada ou definida. No entanto, não é necessário
definir a variável blockIdx. Esta é uma das variáveis incorporadas que CUDA define para
nós. É uma variável muito importante, sendo utilizada para definir o tid, pois contém o valor
do índice do bloco para qualquer bloco que estiver executando o código do device.
Conforme dito anteriormente, definimos o número de blocos em paralelo no seguinte
parâmetro <<<N,1>>>. A variável blockIdx.x identifica o índice de cada um dos blocos,
representando cada iteração do loop sequencial que era necessário para percorrer o vetor.
Por isso, não utilizamos um loop (for, while, etc) em qualquer lugar do código, tanto no host
como device. O número de iterações é definido pelo número de blocos paralelos. A Figura
12 ilustra os blocos com cópias da função kernel com valores da variável tid diferentes
executados em paralelo.
Figura 12. Chamada de kernel em diferentes blocos.
6. Conclusão
[2] NVIDIA, “O QUE É COMPUTAÇÃO ACELERADA POR DE PLACAS DE VÍDEO?”
Disponível em: http://www.nvidia.com.br/object/what-is-gpu-computing-br.html
Acessado em Novembro/2017
[4] SANDERS, J., KANDROT, E., “Cuda by example - An Introduction to General-Purpose
GPU Programming”.
[5] MUHAMMAD, A., MOHAMED, G.,“CUDA and Caffe for deep learning”
Disponível em: https://pt.slideshare.net/AmgadMuhammad/cuda-and-caffe-for-deep-learning
Acessado em: Novembro/2017
COMPUTAÇÃO ESCALÁVEL
• A importância da infraestrutura
• Componentes
• Infraestrutura Exemplo
Continua...
Outras questões não menos importantes também se
destacam:
GRANULARIDADE GROSSA
GRANULARIDADE FINA
https://www.aeroin.net/piloto-airbus-a350-
mostra-compartimento-secreto/
INFRAESTRUTURA EXEMPLO
lasdpc.icmc.usp.br
Total de 60 servidores
Intel e AMD
http://infra.lasdpc.icmc.usp.br/
INFRAESTRUTURA EXEMPLO
• Redução de Custos
https://www.opencompute.org/
OPEN COMPUTE PROJECT
1. https://www.opencompute.org/
2. https://en.wikipedia.org/wiki/Open_Compute_Project
3. https://www.se.com/br/pt/work/solutions/for-business/data-centers-and-networks/open-compute/
4. https://azure.microsoft.com/pt-br/global-infrastructure/hardware-innovation/
5. https://azure.microsoft.com/pt-br/blog/microsofts-project-olympus-delivers-cloud-hardware-innovation-at-scale/
6. https://www.opencompute.org/wiki/Server/ProjectOlympus
7. https://www.aeroin.net/piloto-airbus-a350-mostra-compartimento-secreto/
COMPUTAÇÃO ESCALÁVEL
Clusters
ROTEIRO
• Introdução
• Componentes de cluster
• Categorias de cluster
• Como funciona
• Conclusões
INTRODUÇÃO
• Rede de comunicação
ALTA DISPOBILIDADE
• O objetivo é manter os
serviços em operação o
maior tempo possível
CATEGORIAS DE CLUSTER
BALANCEAMENTO DE CARGA
• Técnica utilizada para distribuir carga de trabalho de
maneira uniforme entre dois ou mais hosts, enlaces de
comunicação, discos de armazenamento e outros recursos
computacionais com o objetivo de:
Maximizar o desempenho
Minimizar o tempo de resposta
Evitar a sobrecarga
BALANCEAMENTO DE CARGA
CATEGORIAS DE CLUSTER
ALTO DESEMPENHO
ALTO DESEMPENHO
COMO FUNCIONA
• Disponibilidade • Orientada a
processamento
• Desempenho intensivo (CPU)
• Escalabilidade • Orientada a entrada e
saída (I/O)
• Transacionais
COMPONENTES
LIMITAÇÕES
1. https://pt.wikipedia.org/wiki/Balanceamento_de_carga
2. https://www.unirios.edu.br/revistarios/media/revistas/2020/27/cluster_e_balanceamento_de_carga.pdf
3. http://www.din.uem.br/~mestrado/diss/2006/gorino.pdf
4. https://docs.microsoft.com/pt-br/data-integration/gateway/service-gateway-high-availability-clusters
5. https://www.devmedia.com.br/configurando-um-cluster-de-tomcat-com-balanceamento-de-carga/22631
6. https://www.researchgate.net/publication/228555383_MONITORAMENTO_DISTRIBUIDO_DE_CLUSTERS_E
_GRIDS_COMPUTACIONAIS_UTILIZANDO_O_GANGLIA
7. https://bugbusters.com.br/2018/05/22/servidor-em-cluster/
8. https://www.canalti.com.br/computacao/cluster-o-que-e-historia-tipos-de-cluster-exemplo/
COMPUTAÇÃO ESCALÁVEL
Grids
ROTEIRO
• O que é um Grid?
• Características
• Infraestrutura
• Exemplos
Elementos de um Grid:
PERVASIVIDADE
• O grid está disponível em todo lugar
• Plugue e use (assim como a rede elétrica)
Globus Toolkit
• http://www.globus.org
• Gratuito e de código aberto
• Baseado nos seguintes padrões e tecnologias:
• Open Grid Services Architecture (OGSA)
• Web Services (SOAP, WSDL, Web Service
Resource Framework, WS-Management)
• Job Submission Description Language (JSDL)
• Distributed Resource Management
• Application API (DRMAA)
• Grid Security Infrastructure (GSI)
EXEMPLOS DE USO
Internet WWW
• Infraestrutura de • Aplicação distribuída
rede que conecta para o compartilhamento
milhões de de informações/
computadores documentos construídos
(baseada na pilha sob a Internet
TCP/IP) • Início na década de 1990
• Criada na década
de 1970
INTERNET X WWW X GRID X CLOUD
GRID
• Serviço também construído sob a Internet
• No Grid, computadores compartilham poder
computacional e recursos como armazenamento de
disco, aplicações e bases de dados
CLOUD
• Modelo que permite o acesso de forma onipresente,
conveniente e sob demanda a um conjunto de
recursos computacionais compartilhados e
configuráveis (por exemplo redes, servidores,
armazenamento, aplicações e serviços)
BIBLIOGRAFIA
1. https://netlib.org/utk/people/JackDongarra/SLIDES/japan-199/sld001.htm
2. https://www.globus.org/
3. https://www.unicore.eu/
4. https://www.informit.com/articles/article.aspx?p=169508&seqNum=5
5. https://wlcg.web.cern.ch/
6. http://www.univasf.edu.br/~andreza.leite/aulas/SO/GridCluster.pdf
7. https://www.worldcommunitygrid.org/
8. https://csrc.nist.gov/publications/detail/sp/800-145/final
COMPUTAÇÃO ESCALÁVEL
Cloud
ROTEIRO
• Características
• Infraestrutura
• Exemplos
O QUE É UMA CLOUD?
• Tecnologia que permite acesso remoto a recursos
computacionais, seja hardware ou software sob
demanda, e que utiliza massivamente tecnologias de
virtualização
POOL DE RECURSOS
• Recursos são compartilhados entre diversos usuários
e alocados com base na demanda
ELASTICIDADE
• Recursos alocados aos usuários podem variar em
função da demanda
MEDIÇÃO
• Provedor monitora o uso dos recursos para controlar
e tarifar
MODELOS
SERVIÇO
SAAS PAAS
SERVIÇO
IAAS
SERVIÇO
MODELOS
IMPLANTAÇÃO
PÚBLICA PRIVADA
IMPLANTAÇÃO
HÍBRIDA
IMPLANTAÇÃO
INFRAESTRUTURA
Azure
BIBLIOGRAFIA
1. https://www.google.com/intl/pt-BR/about/datacenters/gallery/
2. https://azure.microsoft.com/pt-pt/resources/cloud-computing-dictionary/what-is-the-cloud/
3. https://www.ibm.com/br-pt/cloud/learn/cloud-computing
4. http://jornadaparanuvem.com.br/fundamentos-de-cloud-computing/os-tres-modelos-de-servico/
5. https://tiinside.com.br/03/09/2017/hitachi-lanca-plataforma-unificada-que-simplifica-implementacao-da-
nuvem-hibrida/
6. https://forum.ibgp.net.br/guia-pratico-para-nuvem-computacional-baseado-em-padroes-cscc/
7. https://www.dinamio.com.br/blog/2019/10/25/cloud-computing-conceitos-e-caracteristicas-de-iaas-paas-e-
saas/
COMPUTAÇÃO ESCALÁVEL
• O que é OpenMP
• Modelo de Programação
• Modelo de Execução
• Variáveis
• Exemplo
O QUE É OPENMP?
Objetivos
Ser o padrão de programação para arquiteturas de memória
compartilhada
Estabelecer um conjunto simples e limitado de diretivas de
programação
Possibilitar a paralelização incremental de programas
sequenciais
Permitir implementações eficientes em problemas de
granularidade fina, média e grossa
O QUE É OPENMP?
Componentes
Bibliotecas de funções
Diretivas de compilação
Variáveis de ambiente
Limitações
Quanto mais variáveis compartilhadas entre as
threads, mais difícil deve ser o trabalho para garantir
que a visão das variáveis são atuais – coerência de
cache
Outras limitações são baseadas em hardware e estão
associadas à forma como muitos SMPs são
fisicamente capazes de compartilhar o mesmo
espaço de memória
O QUE É OPENMP?
Paralelismo Explícito
Cabe ao programador anotar as tarefas para execução
em paralelo e definir os pontos de sincronização. A
anotação é feita por utilização de diretivas de
compilação embarcadas no código do programa
MODELO DE PROGRAMAÇÃO
Multithread Implícito
Neste caso um processo é visto em conjunto de
threads que se comunicam por meio da utilização de
variáveis compartilhadas
Criação
Início
Término
Multithread Implícito
Espaço de endereçamento global compartilhado entre
as threads
Variáveis podem ser compartilhadas ou privadas para
cada thread
Controle, manuseio e sincronização das variáveis
envolvidas nas tarefas paralelas são transparentes ao
programador
MODELO DE EXECUÇÃO
Fork-Join
Todos os programas iniciam sua execução com um processo
mestre
O master thread executa sequencialmente até encontrar um
construtor paralelo, momento em que cria um team de threads
O código delimitado pelo construtor paralelo é executado em
paralelo pelo master thread e pelo team de threads
Quando completa a execução paralela, o team de
threads sincroniza em uma barreira implícita com o
master thread
O team de threads termina a sua execução e o
master thread continua a execução sequencialmente
até encontrar um novo construtor paralelo
A sincronização é utilizada para evitar a competição
entre as threads
MODELO DE EXECUÇÃO
Estrutura Básica de um Programa OpenMP
MODELO DE EXECUÇÃO
-fopenmp
VARIÁVEIS
segmento específico
threads
Cuidados devem ser tomados quando utilizadas essas
Inicialização de Variáveis
Firstprivate
Permite inicializar uma variável privada na thread
master antes de entrar em uma região paralela do
código. Caso contrátrio, todas as variáveis privadas
serão consideradas não inicializadas no início da
thread
1.http://www.openmp.org
2.Introduction to Parallel Computing, Ananth Grama, Anshul
Gupta, George Karypis, Vipin Kumar - 2ª ed., Addison Wesley
3.OpenMP - https://hpc-tutorials.llnl.gov/openmp/
COMPUTAÇÃO ESCALÁVEL
• O que é o OpenMPI?
• Motivação
• Características
• Conceitos Básicos
• Principais Funções
O QUE É OPENMPI?
sequenciais
Custo x Benefício
Dificuldades
Processo
Cada parte do programa quebrado é chamado de
processo. Os processos podem ser executados em
uma única máquina ou em várias
Rank
Todo o processo tem uma identificação única
atribuída pelo sistema quando o processo é
inicializado. Essa identificação é contínua e
representada por um número inteiro, começando
de zero até N-1, cujo N é o número de processos.
Cada processo tem um rank, e ele é utilizado para
enviar e receber mensagens
CONCEITOS BÁSICOS
Rank
Usado pelo desenvolvedor para especificar
a fonte e o destino de mensagens
Pode ser usado condicionalmente pela
Application Buffer
É o endereço de memória, gerenciado pela aplicação,
que armazena um dado que o processo necessita enviar
ou receber
System Buffer
É um endereço de memória reservado pelo sistema
para armazenar mensagens.
Count
Indica o número de elementos de dados de um tipo,
para ser enviado
CONCEITOS BÁSICOS
Type
O MPI pré define tipos de dados elementares
Tag
Inteiro (não negativo). Utilizado para identificar
unicamente uma mensagem. As chamadas de
MPI_Send e MPI_Recv correspondentes devem
possuir a mesmo tag
Status
Para uma operação de receive, indica a fonte da
mensagem e a tag da mensagem. Em C, um ponteiro
para uma estrutura pré-definida (MPI_STATUS).
Adicionalmente, o número de bytes é obtido do status,
via rotina MPI_Get_Count
PRINCIPAIS FUNÇÕES
MPI_Finalize
MPI_Comm_size
MPI_Comm_rank
MPI_Get_processor_name
PRINCIPAIS FUNÇÕES
MPI_Init
Inicializa um processo MPI
Deve ser a primeira rotina a ser chamada por cada
processo, pois estabelece o ambiente necessário para
executar o MPI
Sincroniza todos os processos na inicialização de
uma aplicação MPI
Utilizada para passar argumentos de linha de
comando para todos os processos
MPI_Finalize
MPI_Finalize é chamada para encerrar o MPI. Ela
deve ser a última função a ser chamada. É usada
para liberar memória. Não existem argumentos
PRINCIPAIS FUNÇÕES
Exemplo com MPI_Init e MPI_Finalize
PRINCIPAIS FUNÇÕES
MPI_Comm_size
Determina o número de processos no grupo, associado
com o comunicador
Usado com o comunicador MPI_COMM_WORLD para
determinar o número de processos utilizados pela aplicação
Obtém o comunicador como seu primeiro argumento,
e o endereço de uma variável inteira é usada para
retornar o número de processos
MPI_Comm_rank
Identifica um processo MPI dentro de um determinado
grupo comunicador. Retorna sempre um valor inteiro
entre 0 e n-1, cujo n é o número de processos
PRINCIPAIS FUNÇÕES
Exemplo com MPI_Comm_size e MPI_Comm_rank
PRINCIPAIS FUNÇÕES
MPI_Get_processor_name
Retorna o nome do nó, cujo processo individual está
executando
Usa um argumento para guardar o nome da máquina
e outro para o tamanho do nome
PRINCIPAIS FUNÇÕES
Exemplo com MPI_Get_processor_name
BIBLIOGRAFIA
1.https://hpc-tutorials.llnl.gov/mpi/
2.Introduction to Parallel Computing, Ananth Grama, Anshul
Gupta, George Karypis, Vipin Kumar - 2ª ed., Addison Wesley
3.Programação Paralela e Distribuída -
https://www.dcc.fc.up.pt/~ricroc/aulas/1011/ppd/apontamentos
/mpi.pdf
COMPUTAÇÃO ESCALÁVEL
• Introdução ao CUDA
• Estrutura do CUDA
• Organização das Threads
• Modelo de Memória
• CUDA em Docker e Cloud
• Utilização do CUDA
INTRODUÇÃO AO CUDA
no host
Ter um toolkit contendo compilador e
ferramentas adicionais
Para saber os requisitos, o site da Nvidia
Frameworks para
Processamento de Dados
em Larga Escala - Spark
ROTEIRO
• Motivação
• O que é Apache Spark?
• Como funciona?
• Ecossistema do Spark
• Benefícios
MOTIVAÇÃO
Aumento de datasets na Web
Cliques
Requisições de servidores
Dados de grafos
Redes de telefonia
Redes sociais
Redes de computadores
RFID
Sensores
Dados financeiros
MOTIVAÇÃO
Bolsas de valores
Escala dinamicamente
acesso ao disco
Há APIs para linguagens como:
Java
Scala
Python
DataFrames ML Pipelines
Spark
Spark SQL Streaming
MLlib GraphX
Spark Core
Data Sources
Hadoop HDFS, HBase, Hive, Apache S3, Streaming, JSON, MySQL, and HPC-style
(GlusterFS, Lustre)
COMO FUNCIONA?
Hadoop: Utiliza disco
para compartilhar
HDFS HDFS HDFS dados
Leitura HDFS
Leitura Escrita
Escrita
Iteração 1 Iteração 2
Iteração 1 Iteração 2
COMO FUNCIONA?
Computação distribuída
Compartilhamento em memória
Com o RDD
Somente leitura, coleções particionadas de
objetos
Um array imutável distribuído
reutilização eficiente
ECOSSISTEMA DO SPARK
ECOSSISTEMA DO SPARK
Generaliza o MapReduce
Modelo de programação mais rico
Menos sistemas para dominar
Melhor gerenciamento de memória
Menor movimentação de dados que leva a um melhor
desempenho para análises complexas
BIBLIOGRAFIA
1.http://www.prathapkudupublog.com/2018/02/modules-in-
apache-spark.html
2.https://data-flair.training/blogs/apache-spark-ecosystem-
components/
3.https://medium.com/expedia-group-tech/an-introduction-to-
apache-spark-f0795f2d5201
4.https://www.infoq.com/br/articles/apache-spark-introduction/
5.https://docs.microsoft.com/pt-br/azure/databricks/getting-
started/spark/quick-start
COMPUTAÇÃO ESCALÁVEL
• Características
• Arquitetura do Hadoop
• Ecossistema Hadoop
• Aplicações
CARACTERÍSTICAS
• Linguagem Java
• Arquitetura Mestre/Escravo
• Processamento Distribuído
• Tolerante a Falhas
• Escalável
CARACTERÍSTICAS
Objetivos/Requisitos
NameNode
• Armazena metadados para os arquivos, como a
estrutura de diretórios de um FS típico
• O servidor que contém a instância NameNode é
bastante crucial, pois existe apenas um
• Log de transações para exclusões/inclusões de
arquivos, etc. Não usa transações para blocos
inteiros ou fluxos de arquivos, apenas metadados.
• Lida com a criação de mais blocos de réplica quando
necessário após uma falha do DataNode
ARQUITETURA APACHE HADOOP
DataNode
MapReduce Engine
Soluções Comerciais
• Dell
• Amazon
• Microsoft
• Cloudera
BIBLIOGRAFIA
1. https://www.ime.usp.br/~ipolato/JAI2012-Hadoop-Slides.pdf
2. http://www.each.usp.br/dc/papers/erad-hadoop-DanielCordeiro.pdf
3. https://www.devmedia.com.br/hadoop-fundamentos-e-instalacao/29466
4. https://johnosd.medium.com/hadoop-seus-componentes-principais-e-sua-evolu%C3%A7%C3%A3o-
cf125c99fadd
5. https://cetax.com.br/apache-hadoop-tudo-o-que-voce-precisa-saber/
6. https://itforum.com.br/noticias/28-bilhoes-de-gigabytes-de-storage-foram-distribuidos-no-primeiro-trimestre/
7. https://www.ime.usp.br/~ipolato/JAI2012-Hadoop-Slides.pdf
COMPUTAÇÃO ESCALÁVEL
• Introdução
• Arquitetura
• Pontos de Entrada
• Usos do Kafka
INTRODUÇÃO
Conectores Kafka
• LogFile, HDFS, JDBC, ElasticSearch…
Logstash
• Fonte e destino
O próximo registro é
adicionado à partição 1 e acima
no deslocamento 1, e o próximo
registro no deslocamento 2 e
assim por diante
• Mensageria
• Métricas
• Agregação de logs
• Operações de TI
1. https://www.redhat.com/pt-br/topics/integration/what-is-apache-
kafka#:~:text=O%20Apache%20Kafka%20%C3%A9%20uma,entreg%C3%A1%2Dlos%20a%20v%C3%A1rios
%20clientes
2. https://vepo.medium.com/entendendo-o-kafka-bf64169e421f
3. https://www.infoq.com/br/articles/real-time-api-kafka/
4. https://www.infoq.com/br/articles/apache-kafka-licoes/
COMPUTAÇÃO ESCALÁVEL
Avaliação de desempenho
ROTEIRO
• O que é desempenho?
• Pontos de avaliação
• Avaliação x análise
O QUE É DESEMPENHO / COMO ANALISAR?
O que é desempenho?
Medições
Análises quantitativas
Métricas de desempenho
POR QUE DESEMPENHO / PARA QUE
DESEMPENHO?
POR QUE?
PARA QUE?
Perguntas
• O que o sistema precisa?
• Qual é o tipo de usuário?
• Qual é o objetivo do sistema?
• Como se dá o gerenciamento de recursos?
PONTOS DE AVALIAÇÃO
EXEMPLO
• Propor soluções
• Avaliar as soluções
PONTOS DE AVALIAÇÃO
• Dos gerenciadores
• Dos usuários
• Aferição
• Protótipos
• Coleta de dados
• Benchmarks
• Modelagem
• Desenvolvimento do modelo
O QUE MEDIR?
• Responsividade
• Produtividade
• Utilização
AVALIAÇÃO X ANÁLISE
AVALIAÇÃO
• Obter, produzir e levantar dados sobre uma
determinada entidade
ANÁLISE
• Verificar a precisão, a validade e o significado da
grandeza produzida durante a avaliação
1997
3. JAIN, J., The art of Computer Systems Performance Analysis, John Wiley & Sons, Inc., 1996.
COMPUTAÇÃO ESCALÁVEL
VÁRIAS POSSIBILIDADES:
• Taxa de chegada
• Demanda por recurso
• Sequência e demanda por diferentes recursos
• Atualização da carga de trabalho
TIPOS DE CARGA DE TRABALHO
Real
Observada no sistema real em operação
normal
Desvantagens
Vantagem • Não pode ser repetida com
facilidade
• Precisão
• Arquivos de Trace → arquivos
muito grandes
TIPOS DE CARGA DE TRABALHO
Sintética
Carga com características similares às reais
Vantagens: Problema:
• Pode ser repetida de forma • Determinar a
controlada distribuição
• Não necessita de arquivos mais
com dados reais apropriada
• Carga pode ser facilmente para o sistema
modificada em avaliação
• Pode ser transportada para
diferentes sistemas
TESTE DE CARGA EM APLICAÇÕES
BENEFÍCIOS
Escalabilidade
1. Avaliação de Desempenho de Sistemas Computacionais – Regina Helena Carlucci Santana e Marcos José
Santana - Departamento de Sistemas de Computação – ICMC-USP / São Carlos – SP
2. https://acervolima.com/nocoes-basicas-de-teste-de-carga-ferramentas-e-praticas-em-teste-de-software/
COMPUTAÇÃO ESCALÁVEL
Ferramentas para
Teste de Carga
ROTEIRO
• Escolha de Ferramenta
• Teste de estresse x Teste de carga
• Exemplos de ferramentas
ESCOLHA DA FERRAMENTA
Teste de Carga
Usado para simular condições normais
Quantidade de dados utilizada é a mesma estimada para
o dia a dia de trabalho
Objetivo não é quebrar o sistema
Teste de Estresse
Testa o comportamento do sistema simulando
condições extremas
O teste só encerra após ter gerado uma falha no
sistema
Objetivo é quebrar o sistema, gerar falhas
FERRAMENTAS
Stress Tester
Oferece uma análise extensa do desempenho de
aplicações Web, além de resultados em formatos de
gráfico
Fácil de utilizar
Não precisa de scripts de altíssimo nível
FERRAMENTAS
Jmeter
Ferramenta de teste open source
É uma aplicação em Java para testar estresse e
performance
Objetivo:
Realizar uma gama de testes, como carregamento,
BlazeMeter
A BlazeMeter comercializa uma plataforma comercial de
teste de carga de autoatendimento como serviço (PaaS),
que é compatível com o Apache JMeter
A BlazeMeter foi fundada em 2011 e foi adquirida pela CA
Technologies em 2016. Em 2021, foi adquirida pela
Perforce
FERRAMENTAS
Gatling
Gatling é uma solução de teste de carga de código aberto
Foi projetada para testes de carga contínuos e se integra
ao seu pipeline de desenvolvimento
Gatling inclui um gravador web e relatórios
FERRAMENTAS
Gatling
O teste de carga com Gatling permite que você emule
tráfego pesado, obtenha relatórios e encontre possíveis
bugs. Testes de capacidade, testes de imersão ou teste
de estresse podem ser feitos sem muito esforço ao
longo do processo de CI/CD:
Injetores de carga sob demanda
Relatórios avançados
Integração contínua
Modo de clustering/Distribuído
BIBLIOGRAFIA
1.https://gatling.io/
2.https://www.primecontrol.com.br/testes-de-estresse-e-carga-conheca-os-
tipos-e-ferramentas/
3.https://guide.blazemeter.com/hc/en-us
4.https://download.cnet.com/Web-Stress-Tester/3000-2085_4-
75316840.html
5.https://jmeter.apache.org/
COMPUTAÇÃO ESCALÁVEL
Estudo de Caso
com JMETER
ROTEIRO
• JMeter
• Plano de Teste
• Exemplo
• Resultados
JMETER
Multiplataforma e gratuito
Gera gráficos em CSV, tabelas e gráficos
Execução distribuída
Adicionar amostrador
Adicionar ouvinte
Saída gerada
EXEMPLO
Iniciar JMeter
EXEMPLO
Renomear o plano de teste para: Testar Univesp
EXEMPLO
Adicionar grupo de tópicos
EXEMPLO
Adicionar amostrador
EXEMPLO
Adicionar ouvinte
EXEMPLO
Executar plano de teste
EXEMPLO
Resultado
EXEMPLO
Resultado
EXEMPLO
Resultado
BIBLIOGRAFIA
1.https://www.tutorialspoint.com/jmeter/jmeter_overview.htm
2.https://jmeter.apache.org/
3.https://www.loadview-testing.com/pt-br/blog/5-exemplos-de-
teste-de-carga-de-5-jmeter/
4.https://www.devmedia.com.br/teste-de-performance-com-
jmeter/34621
COMPUTAÇÃO ESCALÁVEL
OpenShift – Introdução
e Arquitetura
ROTEIRO
• Introdução
• Arquitetura e componentes
• Camada de infraestrutura
• Camada de serviços
• Nó principal
• Nós de trabalho
• Registro
• Armazenamento persistente
• Camada de roteamento
INTRODUÇÃO
Componentes
Nodes
Masters
Containers
Pod
Services
API Authentication
Datastore
Scheduler
Management/Replication
Registry
ARQUITETURA E COMPONENTES
Camada de infraestrutura
Ambiente em que podemos hospedar as aplicações
em servidores físicos, servidores virtuais ou na
nuvem (pública/privada)
ARQUITETURA E COMPONENTES
Camada de serviços
Responsável por definir os pods e a política de
acesso
Fornece endereço IP e um nome de host para os
pods
Conecta aplicações
Permite balanceamento de carga
ARQUITETURA E COMPONENTES
Nó principal
Aquele que gerencia o cluster e cuida dos nós
trabalhadores, sendo responsável por:
API e Autenticação
Data Stora
Escalonamento
Escalabilidade
Nós trabalhadores
Compostos de pods. Pod é a menor unidade que
pode ser definida, implantada e gerenciada e pode
conter um ou mais containers. Containers são
formados por aplicações + suas dependências
ARQUITETURA E COMPONENTES
Registro
Salva suas imagens localmente no cluster
Quando uma nova imagem é enviada para o
registro, este notifica o OpenShift e passa as
informações da imagem
ARQUITETURA E COMPONENTES
Armazenamento persistente
Local em que os dados são salvos e conectados
aos contêineres.
Camada de roteamento
Fornece acesso externo as aplicações no cluster de
qualquer dispositivo
Fornece também balanceamento de carga e
roteamento automático em torno de pods
BIBLIOGRAFIA
1.https://developer.ibm.com/blogs/openshift-101-architecture/
2.https://medium.com/@raraujo_/entendendo-a-arquitetura-do-
openshift-e-criando-um-cluster-local-ca5f59d9caaf
3.https://docs.microsoft.com/pt-br/azure/openshift/intro-openshift
4.https://redhatbsb.gitbook.io/workshop-openshift/parte-2-openshift
5.https://pensandolinux.com.br/2021/02/14/openshift-iniciando-os-
estudos-red-hat-codeready-containers/
6.https://www.redhat.com/pt-br/technologies/cloud-computing/openshift
7.https://smartworldclub.net/11703119-red-hat-openshift-4-what39s-
new-and-how-to-create-a-cluster
COMPUTAÇÃO ESCALÁVEL
Criação de um
Cluster OpenShift
ROTEIRO
• Pré-requisitos
• Download do OpenShift
• Instalar o OpenShift
• Iniciar o cluster
PRÉ-REQUISITOS
ad/v3.11.0/openshift-origin-client-tools-v3.11.0-
0cbc58b-linux-64bit.tar.gz
0cbc58b-linux-64bit.tar.gz
INSTALAÇÃO
Entre no diretório
cd openshift-origin-client-tools-v3.11.0-0cbc58b-
linux-64bit
Copie os binários kubectl e oc para o diretório
/usr/local/bin
cd openshift-origin-client-tools-v3.11.0-0cbc58b-
linux-64bit
cp oc kubectl /usr/local/bin/
INSTALAÇÃO
E teremos a saída
oc v3.11.0+0cbc58b
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGO
INSTALAÇÃO
{
"insecure-registries" : [ "172.30.0.0/16" ]
}
INICIAR O OPENSHIFT CLUSTER
Para iniciar o cluster OpenShift é preciso especificar
o IP do host
oc cluster up –public-hostname=192.168.2.5
To login as administrator:
oc login -u system:admin
INICIAR O OPENSHIFT CLUSTER
Logar no cluster como administrador
oc login -u system:admin
You have access to the following projects and can switch between them with 'oc project ':
default
kube-dns
kube-proxy
kube-public
kube-system
* myproject
openshift
openshift-apiserver
openshift-controller-manager
openshift-core-operators
openshift-infra
openshift-node
openshift-service-cert-signer
openshift-web-console
oc project default
1.https://www.okd.io/#getting-started
2.https://pensandolinux.com.br/2021/02/14/openshift-iniciando-os-estudos-
red-hat-codeready-containers/
3.https://www.ibm.com/br-pt/cloud/openshift/openshift-tutorials
4.https://www.howtoforge.com/how-to-install-and-configure-openshift-origin-
paas-server-on-ubuntu-2004/
5.https://redhatbsb.gitbook.io/workshop-openshift/parte-2-openshift
COMPUTAÇÃO ESCALÁVEL
• Criar Projeto
• Deploy de Aplicação
• Acessar Aplicação
CRIAR PROJETO
oc login
Authentication required for
https://127.0.0.1:8443 (openshift)
Username: developer
Password: developer
Login successful.
PASSO A PASSO
oc login
Authentication required for https://127.0.0.1:8443 (openshift)
Username: developer
Password:
Login successful.
You have access to the following projects and can switch between them
with 'oc project ':
* dev
my-project
myproject
Using project "dev".
DEPLOY DE APLICAÇÃO
PASSO A PASSO
oc project my-project
Now using project "my-project" on server "https://127.0.0.1:8443".
oc status
In project My Project (my-project) on server https://127.0.0.1:8443
You have no services, deployment configs, or build configs.
Run 'oc new-app' to create an application.
DEPLOY DE APLICAÇÃO
PASSO A PASSO
• Deploy da aplicação
oc my-project deployment-example
--> Found image da61bb2 (4 years old) in image stream "my-project/deployment-example" under tag
"latest" for "deployment-example"
* This image will be deployed in deployment config "deployment-example"
* Port 8080/tcp will be load balanced by service "deployment-example"
* Other containers can access this service through the hostname "deployment-example"
* WARNING: Image "my-project/deployment-example:latest" runs as the 'root' user which may not be
permitted by your cluster administrator
--> Creating resources ...
deploymentconfig.apps.openshift.io "deployment-example" created
service "deployment-example" created
--> Success
Application is not exposed. You can expose services to the outside world by executing one or more
of the commands below:
'oc expose svc/deployment-example'
Run 'oc status' to view your app.
DEPLOY DE APLICAÇÃO
PASSO A PASSO
• Status do Deploy
oc status
In project My Project (my-project) on server https://your-server-
ip:8443
svc/deployment-example - 172.30.87.146:8080
dc/deployment-example deploys istag/deployment-example:latest
deployment #1 deployed 36 seconds ago - 1 pod
2 infos identified, use 'oc status --suggest' to see details.
DEPLOY DE APLICAÇÃO
PASSO A PASSO
• Status do serviço
oc get svc
PASSO A PASSO
PASSO A PASSO
• Verificar os pods
oc get pods
NAME READY
STATUS RESTARTS AGE
deployment-example-1-b9prf 1/1
Running 0 2m
DEPLOY DE APLICAÇÃO
PASSO A PASSO
oc expose service/deployment-example
route.route.openshift.io/deployment-example exposed
DEPLOY DE APLICAÇÃO
PASSO A PASSO
• Informações de rota
oc get routes
http://172.30.106.225:8080/
BIBLIOGRAFIA
1. https://www.okd.io/#getting-started
2. https://pensandolinux.com.br/2021/02/14/openshift-iniciando-os-estudos-red-hat-codeready-containers/
3. https://www.ibm.com/br-pt/cloud/openshift/openshift-tutorials
4. https://www.howtoforge.com/how-to-install-and-configure-openshift-origin-paas-server-on-ubuntu-2004/
5. https://redhatbsb.gitbook.io/workshop-openshift/parte-2-openshift