terminado
[MHWsCURYlr.git] / rel.tex
blob2c3188e49e027ebbf1032e2209313375be656dd7
1 \documentclass{abnt}
2 \usepackage[utf8]{inputenc}
3 \usepackage[T1]{fontenc}
4 \usepackage{multicol}
5 \usepackage[portuguese]{babel}
7 %\title{Trabalho Prático 2}
8 %\author{Kauê Soares da Silveira - 171671}
9 %\date{}
11 \autor{Kauê Soares da Silveira \\ 171671} %\and
12 \instituicao{Universidade Federal do Rio Grande do Sul}
13 \orientador[Professor:]{Alexandre Carissimi}
14 \titulo{Trabalho Obrigatório 2: Comparação de Mecanismos de Comunicação}
15 \comentario{INF01151 - Sistemas Operacionais II N}
16 \data{}
18 \begin{document}
19 %\maketitle
20 \folhaderosto
21 \sumario
23 \chapter{Introdução}
25 O objetivo do trabalho é analisar a facilidade de implementação, uso e desempenho dos mecanismos de comunicação UDP / TCP, RPC e RMI. Para isto, foram implementadas diferentes versões de dois serviços (null e sort, descritos a seguir), uma para cada um dos mecanismos.
27 O serviço null é um serviço que não faz nada. Não recebe argumentos de entrada e não retorna resultado para o cliente \footnote{Na realidade o serviço implementado não foi exatamente esse, ver Cap. \ref{problemas}}.
29 Já o serviço sort recebe um vetor de 250 inteiros inicializado com a identidade e tem por objetivo ordená-lo em ordem descrescente. O vetor resultado é então retornado.
31 \chapter{Metodologia Empregada} \label{secmet}
33 Cada medição de tempo foi feita através da média de 1000 repetições. Este processo foi efetuado 30 vezes, para cada forma de comunicação abordada, com intervalos de 1 minuto para garantir o encerramento das conexões TCP, obtendo-se a média e o desvio padrão, e permitindo calcular o intervalo de confiança (Tab. \ref{tabconf}).
35 Para os serviços utilizando o protocolo TCP, foi considerado o tempo de estabelecimento e encerramento da conexão, assim como o tempo da requisição em si.
37 Todos os clientes / servidores foram escritos na linguagem de programação C, exceto os referentes ao mecanismo RMI, os quais foram escritos na linguagem Java.
39 \chapter{Descrição da Plataforma Experimental}
40 \section{Cliente}
41 \begin{description}
42 \item[Sistema Operacional] (uname -a): Linux gabriela 2.6.31-19-generic \#56-Ubuntu SMP Thu Jan 28 01:26:53 UTC 2010 i686 GNU/Linux
43 \item[Processador] (cat /proc/cpuinfo):
44 \begin{description}
45 \item[model name ] : AMD Athlon(tm) 64 Processor 3000+
46 \item[cpu MHz ] : 1999.843
47 \item[cache size ] : 512 KB
48 \end{description}
49 \item[Memória] (cat /proc/meminfo):
50 \begin{description}
51 \item[MemTotal] : 509012 kB
52 \end{description}
53 \item[Conexão] : 100 mbps
54 \item[JVM] : java version "1.6.0\_0"; OpenJDK Runtime Environment (IcedTea6 1.6.1) (6b16-1.6.1-3ubuntu3); OpenJDK Server VM (build 14.0-b16, mixed mode).
55 \item[gcc] :
56 \begin{description}
57 \item[Target]: i486-linux-gnu
58 \item[Thread model]: posix
59 \item[gcc version]: 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
60 \end{description}
61 \end{description}
62 \section{Servidor}
63 \begin{description}
64 \item[Sistema Operacional] (uname -a):
65 Linux liana 2.6.31-19-generic \#56-Ubuntu SMP Thu Jan 28 01:26:53 UTC 2010 i686 GNU/Linux
66 \item[Processador] (cat /proc/cpuinfo):
67 \begin{description}
68 \item[model name ] : Intel(R) Core(TM)2 Duo CPU E7200 @ 2.53GHz
69 \item[cpu MHz ] : 1596.000
70 \item[cache size ] : 3072 KB
71 \end{description}
72 \item[Memória] (cat /proc/meminfo):
73 \begin{description}
74 \item[MemTotal] : 2058944 kB
75 \end{description}
76 \item[Conexão] : 100 mbps
77 \item[JVM] : java version "1.6.0\_0"; OpenJDK Runtime Environment (IcedTea6 1.6.1) (6b16-1.6.1-3ubuntu3); OpenJDK Server VM (build 14.0-b16, mixed mode).
78 \item[gcc] :
79 \begin{description}
80 \item[Target]: i486-linux-gnu
81 \item[Thread model]: posix
82 \item[gcc version]: 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
83 \end{description}
84 \end{description}
86 \chapter{Análise}
88 \section{Facilidade de Implementação}
89 Sockets tcp e udp estão num nível mais baixo de abstração, o que faz com sejam de implementação mais difícil e mais sujeita a erros. Já o RPC, por estar num nível de abstração um pouco mais alto, também é um pouco mais fácil de implementar. Seguindo esta mesma linha de raciocínio, RMI é o mecanismo com nível de abstração mais elevado e também o mais fácil de ser implementada.
91 \section{Facilidade de Uso}
92 A classificação quanto á facilidade apresenta os mesmos critérios supramencionados, sendo RMI o mais fácil de utilizar, seguido do RPC, ficando por último as sockets TCP e UDP.
94 \section{Desempenho}
96 \begin{table}[htbp]
97 \begin{center}
98 \label{tabconf}
99 \begin{tabular}{|l|ccc|}
100 \hline
101 nome & média & desvio padrão & intervalo de 95\% de confiança para a média \\
102 \hline
103 tcp/null
104 & 36.50 & 12.30 & [32.10, 40.90] \\
105 tcp/sort
106 & 39.25 & 14.01 & [34.24, 44.26] \\
107 udp/null
108 & 11.85 & 2.29 & [11.03, 12.67] \\
109 udp/sort
110 & 13.38 & 2.83 & [12.36, 14.39] \\
111 rpc/null/tcp
112 & 220.25 & 104.33 & [182.94, 257.56] \\
113 rpc/null/udp
114 & 53.75 & 23.93 & [45.19, 62.31] \\
115 rpc/sort/tcp
116 & 232.00 & 97.64 & [197.08, 266.92] \\
117 rpc/sort/udp
118 & 60.50 & 17.38 & [54.28, 66.72] \\
119 rmi/null
120 & 349.00 & 53.20 & [329.97, 368.03] \\
121 rmi/sort
122 & 821.75 & 53.06 & [802.77, 840.73] \\
124 \hline
125 \end{tabular}
126 \caption{Média, Desvio Padrão e Intervalo de Confiança de cada um dos métodos (em ns.)}
127 \end{center}
128 \end{table}
130 \section{Comparação Qualitativa}
132 \begin{table}[htbp]
133 \begin{center}
134 \label{tabqual}
135 \begin{tabular}{|l|cccc|}
136 \hline
137 nome & facilidade de uso & facilidade de implementação & nível de abstração & desempenho \\
138 \hline
139 udp / tcp & baixa & baixa & baixo & alto \\
140 rpc & média & média & médio & médio \\
141 rmi & alta & alta & alta & baixo \\
142 \hline
143 \end{tabular}
144 \caption{Comparação qualitativa das abordagens}
145 \end{center}
146 \end{table}
148 \section{Discussão}
150 Como espeficicado na tabela, facilidade de uso, de implementação e nível de abstração estão intimamente relacionados, e são inversamente proporcionais ao desempenho. A escolha por um ou outro método vai depender da linguagem que se pretende usar e do grau de desempenho implicado pelo domínio da aplicação que se deseja programar.
152 Comparando tcp com udp, é possível perceber que a segunda apresenta uma média de tempo de execução 30\% menor, o que é de se esperar, visto que não é um protocolo orientado à conexão (diferentemente do tcp), e portanto acaba apresentando um overhead de execução menor.
154 Já comparando os desempenhos dos serviços null e sort, podemos ver que o aumento no tempo de execução ficou entre 10 e 20\%, a não ser no caso de RMI em que este aumento foi de mais de 100\%. Isso nos mostra que o tempo para ordenar um vetor de 250 elementos não foi significante em relação ao tempo necessário para a comunicação em si, exceto no RMI, em que a manipulação de vetores realmente se mostrou bastante onerosa comparada com a comunicação.
156 \chapter{Principais Problemas Encontrados}
157 \label{problemas}
158 Funções send (respectivamente, recv) do TCP / UDP precisam enviar (respectivamente, receber) algum dado, ou seja, não é possível implementar um servidor NULL exatamente da forma como foi especificado. Em vista disso, mas ainda com a finalidade de minimizar a comunicação, foi utilizado um parâmetro do tipo char, tanto para a chamada quanto para o retorno. Afim de preservar a justiça das comparações, parâmetros semelhantes foram utilizados nas outras implementações do serviço NULL.
160 O protocolo TCP prevê um status TIMED\_WAIT após o pedido de término da execução e antes que esta seja efetivamente terminada. Isso gera problemas com testes automatizados de alta carga, pois eventualmente ocorre excesso de conexões e estas começam a ser recusadas. Para evitar este problema, foram introduzidas paradas periódicas de um minuto, como explicado no capítulo sobre a metodologia empregada (Cap. \ref{secmet}).
162 A escassez de documentação sobre o Java RMI fez com que houvessem alguns problemas nas implementações referentes ao mesmo, principalmente em relação ao CLASSPATH (as classes "stub"{} não eram "enxergadas"{} por cliente e servidor ao mesmo tempo). Problema resolvido após algumas tentativas, modificando a hierarquia dos arquivos das classes e reiniciando o rmiregistry.
164 \chapter{Conclusão}
166 Os diferentes mecanismos de comunicação de processos tem suas vantagens e desvantagens, assim como aplicações onde seu uso é mais ou menos adequado. Alguns dos aspectos mais relevantes destes mecanismos foram aqui comparados (facilidade de implementação, uso e desempenho).
168 Porém, existem outras características que devem consideradas, tais como tolerância à falhas e segurança, pois estas também têm grande importância.
170 É fundamental termos em mente todos estes aspectos para poder decidir com confiança qual dos mecanismos é o mais adequado para nosso software, levando em consideração o contexto em que este estará executando.
174 \end{document}