quinta-feira, 22 de abril de 2010

Resenha sobre artigo: A Thread Performance Comparison: Windows NT and Solaris on A Symmetric Multiprocessor

Olá pessoal,

A partir de hoje vou postar algumas trabalhos que tenho feito no mestrado e acho que pode contribuir com o meio acadêmico e tecnológico.
Hoje, vou postar uma resenha que escrevi para a disciplina de SO sobre o artigo: A Thread Performance Comparison: Windows NT and Solaris on A Symmetric Multiprocessor.

Caso queiram ler o artigo original esse é o link: http://www.sagecertification.org/publications/library/proceedings/usenix-nt98/full_papers/zabatta/zabatta.pdf

RESENHA

Resenha sobre a obra: A Thread Performance Comparison: Windows NT and Solaris on A Symmetric Multiprocessor. Autores: Fabian Zabatta e Kevin Ying

A obra acima citada, um artigo, é um estudo comparativo do desempenho de threads em dois Sistemas Operacionais distintos: o Windows NT e o Solaris. O autor apresenta, através de experimentos, os resultados de desempenho de cada Sistema em distintas etapas de execução de determinados processos em situações diversas.
O artigo é iniciado com um breve histórico dos processadores: custo e desempenho do mesmo. É então citada a criação do processador Pentium Pro (PPro), pelo fabricante Intel, onde o autor alega que esse é um processador de alto desempenho construído como suporte para o propósito do multiprocessamento. Em seguida, o autor aborda o assunto de multiprocessamento simétrico (SMP) definindo-o como uma arquitetura paralela primária onde os processadores compartilham a mesma unidade do sistema operacional assim como compartilham memória, barramento e dispositivos de entrada e saída. O autor aborda o conceito de processo e o define como objetos de execução, e os classifica em multitarefa quando aborda sobre concorrência e paralelismo; ainda fala sobre mutex. O autor inicia a explanação sobre os sistemas operacionais descrevendo as características dos SO’s Windows NT e Solaris, afirmando que ambos são sistemas que utilizam prioridades básicas, tempo de partida e algoritmos multitarefa para escalonar seus objetos de nível de kernel.
Ao abordar o assunto de threads, o autor explica que no Windows NT a menor unidade de execução no nível de usuário é a fibra (fiber).
Assim, um thread é constituído de múltiplas fibers que conseguem acessar os threads aleatoriamente. No Solaris, a menor unidade de execução no nível de kernel é o LWP (light weight process), sendo esses os constituintes dos processos do Solaris. Diferentemente do NT, no Solaris, a menor unidade de execução no nível de usuário é a thread, e assim como as fibers, essas não executam sozinhas. No caso do Solaris elas são implementadas e controladas pela biblioteca de sistema. A biblioteca de threads no Solaris define dois tipos de threads, a thread bound (encadeada) e a thread unbound (independente).
Na seção de experimentos, o autor elenca sete experimentos que, segundo o mesmo, foram importantes para determinar se as diferenças na implementação, design e camadas de threads produziriam diferenças de desempenho significantes. São eles:
1. Medida do número máximo de threads de kernel que poderia ser criada por cada sistema;
2. Medida do tempo de execução da criação de threads;
3. Medida da velocidade de criação de thread quando se força o processador com vários processos em execução;
4. Determinar como cada implementação de threads de sistemas operacionais desempenharia em processos com threads em intensivo processamento que não requereram nenhuma sincronização;
5. Determinar como cada implementação de thread desempenharia em processos de processamento intensivo que solicitaram sincronização extensa;
6. Determinar o desempenho de cada implementação do sistema operacional em pesquisas paralelas implementadas com threads;
7. Determinar o desempenho de cada implementação do sistema operacional nos processos com threads que tiveram os requisitos de processador espalhados.
Quanto ao ambiente dos experimentos, trata-se de uma mesma máquina para ambos os sistemas, com PPro SMP e 512Mb de RAM e um grande HD. O modo de instalação do SO foi dual-boot, com as versões de Solaris 2.6 e Windows NT Server, versão 4.0. O compilador utilizado foi o GNU gcc versão 2.8.1.
Para descrever os experimentos a seguir, será usado em conjunto a análise crítica dos resultados apresentados a cada etapa.

O primeiro experimento mensura a quantidade máxima de objetos do nível de kernel que cada SO poderia criar. Para o NT em 24.12 segundos foram criados 9817 threads contra 2294 threads no Solaris em apenas 2.68. Contudo para o Windows foram necessários 68MB de memória enquanto no Solaris apenas 19MB. Porém, o objetivo desse primeiro processo era observar a quantidade de threads que cada sistema conseguiria criar e nesse ponto o Windows NT obteve um melhor resultado como visto acima, pois no Solaris, quando se obteve o número de 2294 apresentou uma falha.

No segundo experimento foi abordada a velocidade de criação dos threads. Os sistemas operacionais Windows NT e Solaris apresentaram um desempenho parecido, no caso do Solaris para Threads agregadas. Segundo o autor isso pode ser atribuído devido o fato de que cada SO requer System Call (chamadas de sistema) para a criação dos threads. Quando o Solaris utilizou apenas uma chamada da biblioteca o desempenho do mesmo superou o NT, através dos threads independentes. Para o caso do CL=4 no Solaris apresentou um bom desempenho, porém muito inferior ao caso dos threads independentes. Com esse segundo experimento pode-se observar que para o caso dos threads independentes, onde há uma chamada à biblioteca de threads o desempenho supera o NT e até mesmo as outras formas de criação utilizadas no Solaris. Isso pode ser observado através dos tempos apresentados na tabela 2 da seção 3.2.
Também abrangendo a criação de threads tem-se o terceiro teste. Nesse caso, mediu-se a velocidade de criação dos threads da mesma forma que o teste anterior, porém com sobrecarga de threads no processador. Mais uma vez nesse caso o Solaris superou o Windows NT. O terceiro experimento retrata uma realidade corriqueira para os processadores e processos e através do teste em questão se pôde observar a veracidade dos fatos.

No quarto experimento foi determinado o desempenho que cada implementação de thread poderia atingir para os processos sem requisição de sincronização. O thread teria que ficar ociosa por 10 segundos até ser concluído, após sua conclusão o processo de criação poderia se findar. As diferenças entre os dois SO’s são sutis, exceto para os threads unbound, que apresentaram valores muito acima do NT. Devido à ligação entre o thread unbound e a CL=4, essa última impactou no tempo de chamada do thread unbound o que fez com que a mesma executasse em tempo 10N.

O quinto teste é semelhante ao quarto, contudo, a sincronização nesse caso é requerida. Para tanto, utilizou-se o programa “array.c” que implementa a criação de threads para modificar dados compartilhados em uma estrutura de 10.000 iterações. A cada momento que um thread necessitava modificar um dado compartilhado era requisitada uma exclusão mútua. O Windows NT apresentou dois objetos de exclusão mútua: o mutex e a sessão crítica. Já o Solaris utilizou apenas o mutex. O desempenho no Solaris foi consideravelmente melhor especialmente com o processo de CL=4. Contudo o NT apresentou bons resultados quando utilizou sessão crítica. Acredita-se que essa otimização é devido o fato de que na sessão crítica há um objeto usuário simples que apresenta um estado global.

O sexto teste aborda a pesquisa paralela com threads que requisitam sincronização limitada. O autor implementa nesse teste o problema do caixeiro viajante. Os threads foram implementados no paradigma de pilha de trabalho. Como resultado, o NT apresentou um desempenho fraco quando uma sincronização foi requisitada. O interessante nesse experimento é que o NT supera ligeiramente o Solaris. Um resultado surpreendente, visto que no teste anterior, utilizando chamada síncrona o NT apresentou um desempenho inferior. Outro ponto interessante apresentado pelo autor é que utilizando uma ou mais thread unbound no Solaris o desempenho foi o mesmo que utilizando dois threads encadeados no mesmo SO.

O último experimento demonstra como cada implementação de thread de sistema operacional desempenharia em processos que apresentam muitos threads com explosão (espalhamento) de CPU (bursts). Pode-se citar como exemplo os processos de E/S como, uma rede ou uma aplicação de cliente/servidor. O tempo de espera foi determinante nesse teste e no desempenho dos SO’s. O Solaris utilizando concorrência restrita apresentou um resultado um pouco melhor que o NT.
Enfim, o autor conclui o estudo afirmando que ambos os Sistemas Operacionais foram aptos para a utilização de multiprocessadores. Um fator pertinente para o problema de desempenho de cada sistema foi a falta de documentação. O sistema Windows NT apresentou ótimos resultados quando se utilizou a sessão crítica, porém, na maioria dos outros testes o Solaris apresentou melhores resultados, algumas vezes muito próximo ao NT, especialmente na utilização das unbounds threads. Realmente esses aspectos foram observados no estudo. Ele cita ainda, o POSIX (Portable Operating System Interface) como solução para padronização de threads e assim, quem sabe, uma otimização gradual dos threads em todos os Sistemas Operacionais, presentes ou futuros.

O estudo demonstra ainda que embora o Solaris seja um Sistema considerado em alguns pontos superior aos demais, alguns aspectos precisam ser melhores aproveitados. Já o Windows NT, um sistema criado pela Microsoft para complementar as distribuições do Windows, com foco empresarial, demonstra alguns pontos inferiores ao Solaris, contudo, o mesmo pode ser explorado para programação paralela e sessão crítica.
Enfim, com esse estudo, pode-se observar que do ponto de vista de Sistemas Operacionais e seus recursos, tudo é relativo, ou seja, cada categoria de thread é melhor ou pior em determinados momentos e com determinados ambientes, tanto no Windows NT quanto no Solaris.


Resenha escrita por:
Daniel H. Carrara de Azevedo
Mestrando em IA - UFU
E-mail: dhcarrara@gmail.com

sexta-feira, 19 de março de 2010

Tudo Novo

Well,

Esse ano ainda não tinha conseguido postar.
Ano novo, tudo novo.
Minha vida está mudando de rumo de uma forma que nunca imaginei.
Primeiro estou muito feliz com as aulas que estou ministrando no curso de Sistemas da Ulbra, está sendo trabalhoso preparar todas as aulas, pela primeira vez, mas muito recompensador.
Outra novidade é que estou fazendo Mestrado na UFU, como aluno especial, na Linha de Pesquisa em IA (Inteligência Artificial).
Estou cursando duas disciplinas: Sistemas Operacionais e Computação Bio-inspirada. Está muito corrido, bem difícil, mas nada que algumas noites sem dormir e alguns finais de semana trancado no quarto estudando não resolva.

Bom, vou postando aqui, assim que encontrar um tempinho, as novidades de minha vida e do mundo da Tecnologia.

See Ya!

Regards

quarta-feira, 2 de setembro de 2009

Java vs .net: the community

Trata-se de um pequeno texto sobre comparações entre Java e .Net
Sabemos que essa discussão vai longe, eu, particularmente, gosto das duas coisas: Java e C#... =D

See you!

java vs .net: the community
Fonte: http://geekswithblogs.net/alternativedotnet/archive/2009/08/31/134405.aspx

Since the beginning of July, I've been working on a java project. The language is very close to C#, although it has some minor irritating differences, like the lack good generic support, extension methods and closures. The big difference however is not in the language, the tools, the libraries or the utilities. One of the big differences I've seen is the community.

I've been on many projects that have worked exclusively with Microsoft tools, libraries and (god forbid) examples. When the subject is raised of alternatives like an open source ORM or IoC container the response is predictable. It's a raised eyebrow stating clearly that non-MS solutions couldn't possibly be better than libraries like the EF, EntLib and such. Oh, and were you suggesting using anything else than stored procedures for data access?

Your idea won't scale...
Your idea won't perform...
Your idea won't be secure...
Your idea will be buggy...
Have you thought about the maintenance ...

Let's look over the wall now, shall we? If you announce proudly that you're going to work on a java project with hibernate and spring, you get a blank look from your fellow devs. "Duh! Of course! What else?". This best of breed approach took some years to mature but is way ahead of the default .net crowd.

The alt.net movement, the NHibernate mafia and all those alternative folks who don't adhere to the true MSDN way of doing software development are actually very close to this. The difference is that we are there by choice and by experience. The java guys are there, almost by default. This means that the mainstream java dev knows and understands things like IoC, AoP, ORM. He might have forgotten (or doesn't know) why these practices were introduced, but he's been using them daily for some years. Just like we forgot about writing our own compilers and practicing bit shifts to divide by 2.

I think it is our responsibility to enlighten our colleagues, one at a time, for the rest of our professional lives. To try and bridge that gap between alt.net and the mainstream .net development. And ultimately, as a community, help Microsoft on the course it is taking to embrace open source.

Quoting a fellow alt.net colleague I value greatly: How on earth did it ever get this far in our industry for this mindset to be considered alternative?

quarta-feira, 5 de agosto de 2009

Crowdsourcing

Pessoal, hoje vi o termo Crowdsourcing no meu Twitter e fiquei curioso, dei uma pesquisada e encontrei esse artigo do Bruno Bartels sobre esse assunto, vale a pena dar uma lida...

--------

Crowdsourcing na produção de uma nova mídia.

Artigo por Bruno Bartels em abr.30, 2009, na categoria Comunicação 2.0

Apesar do nome pouco popular, Crowdsourcimg já é um assunto bem discutido e aplicado na internet, principalmente no que diz respeito a desenvolvimento de softwares e geração de conteúdos.

“O crowdsourcing é um modelo de produção que utiliza a inteligência e os conhecimentos coletivos e voluntários espalhados pela internet para resolver problemas, criar conteúdo ou desenvolver novas tecnologias.”

Leia mais sobre o termo aqui (português de Portugal).

São bons exemplos de crowdsourcing o navegador Firefox, o sistema operacional Linux, a plataforma para blogs WordPress, fora uma série de outras aplicações que vão de antivírus até complexos sistemas, como o Google e suas APIs.

Apesar de extremamente popular na internet, esse conceito é pouco percebido. Grandes exemplos dessa filosofia é o Wikipedia, YouTube, e tantos outros geradores de conteúdos.

O Wikipedia em si não é a mais completa enciclopédia do mundo. Ele é apenas uma plataforma que possibilitou a construção e organização de seu conteúdo. Os verdadeiros produtores são internautas, espalhados pelo mundo, que alimentam massivamente o site de informação, filtram o que é certo e errado, deixando-a confiável sim, apesar das críticas de quem certamente não a conhece.

A mesma coisa acontece com o YouTube, que nada mais é do que uma ferramenta de uploads, organização e compartilhamento de vídeos. O que o faz ser o que é, é a enorme videoteca que foi alimentada ao longo do tempo pelos diversos usuários. Você nunca perguntou a um amigo se ele já visitou o YouTube hoje, mais certamente já perguntou se já viu o vídeo da Susan Boyle, ou simplesmente passou o link para ele. Aliás, se não fossem os internautas, ela seria apenas mais uma concorrente de um programa de talentos inglês.

- Ok, já entendido o conceito. Mas que diabos o crowdsourcing tem a ver com a construção de uma nova mídia?

- Bom, em se tratando de internet, tudo.

O jornalismo colaborativo ainda engatinha, mas aos poucos vem se tornando uma realidade. Basta estar no lugar certo, na hora certa, com uma câmera digital na mão e um belo flagrante à sua frente. Pronto, agora é só postar na internet. Pena que ainda não temos um portal sério de notícias colaborativas. Em alguns grandes portais de jornalismo on-line, essa cultura já é explorada, mas se limitam a temas, complementos, besteirol e oportunismo. Fora que ninguém ganha um centavo quando tem sua notícia publicada no VC Repórter ou outros portais com serviços do gênero.

www.midiaindependente.org

Mídia Independente

Um bom exemplo da filosofia colaborativa para a produção jornalística é o www.midiaindependente.org. O visual infelizmente não é lá grandes coisas, parece ter sido criado por programadores. Porém as más impressões param por aí. O jornal é bem completo, com ótimos temas e comentários que deixam claro o nível cultural de seus leitores.

A publicidade segue pelo mesmo caminho. Na internet, os principais concorrentes e também aliados das agências e empresas que buscam seu espaço na rede são seus próprios consumidores. Produtores de conteúdos que a todo instante estão postando um novo vídeo, mais uma piada medíocre - ou genial -, mais uma foto oportunista ou estão simplesmente interagindo. Interação que gera muito mais que ibope. Gera discussão, compartilhamento e persuasão. Persuasão do velho e eficaz boca-a-boca, agora muito mais forte e intenso.

Na internet, assim como futuramente na TV digital, o tempo estimado para a propaganda acaba. Ninguém mais tem 30 segundos exclusivos para passar uma mensagem. O consumidor não é mais passivo.

Voltando à filosofia Crowdsourcing, o foco da publicidade online deve estar na interatividade. Não basta mais criar um vídeo bonitinho, ou uma bela composição de imagens. A publicidade tem que oferecer algo ao público. Oferecer ferramentas que o façam ter novas experiências interativas, idéias que antes de vender os encante, que os ofereça algo que o faça passar a propaganda a diante. Certamente uma publicidade que exige ainda mais neurônios e criatividade por parte dos publicitários.

Um bom exemplo dessa nova publicidade é o site jogo Jelly Battle. Criado em 2006 para divulgar a linha de teclado para games da Logitech, o se espalhou rapidamente para os sites do genero. Ao longo de quase 3 anos fez tanto sucesso que recentemente foi comprado por uma empresa com foco em jogos on-line (por isso não se vê mais o merchandising da marca e algumas outras características peculiares).

Mas o que isso tem a ver com a Crowdsourcing e onde afinal a filosofia se aplica ao internet marketing e, futuramente, à publicidade em geral?

Bom, o jogo em si não se faz sozinho, não se divulga e nem vende sozinho. Os grande veículo da publicidade são os próprios internautas. Jogadores que disputam e interagem entre si. Eles gostam do conceito, convidam seus contatos e compartilham. Pensou em viral na internet? É exatamente isso! Um investimento mínimo, se comparado às mídias convencionais, somada a uma bela dose de criatividade e interação. Pronto, o consumidor faz o resto.

E o mais legal disso tudo, e que explica a imagem de topo do site: na comunicação 2.0 não é a massa passiva ao meio, é o meio que fica passivo a massa.

-----

Fonte: http://comunicacao2.0.vixtime.com.br/?tag=crowdsourcing

quarta-feira, 3 de junho de 2009

Achei muito interessante o site MyHeritage <http://www.myheritage.com.br/>

Nesse site você consegue montar sua árvore genealógica, como a minha, além de também poder brincar com suas fotos e dos seus amigos:

---
Olha só as montagens que fiz com minha foto:

































Esse flash é uma transformação de mim no Jay Hernandez.... Claro que sou mais bonito né... kkk

domingo, 5 de abril de 2009

Max Payne

Well, mais um comentário sobre filmes.
Acabei de assisitir o filme da 20th Century Fox: Max Payne (2008). 

Trata-se da Clássica história de Max Payne, um detetive da Polícia dos EUA que tem seu Filho e esposa assassinados. Muita gente já jogou esse Game no Computador, mas o filme me surprendeu. A fotografia, os efeitos especiais, a história em si; tudo na mais perfeita sincronia. Vale a pena assistir:

Veja o Trailler:
http://www.youtube.com/watch?v=Q2jAEoBz6RY

See You!
=)