Material da palestra: Mineração de Dados com SQL Server 2014 Analysis Services e além

Conforme prometido, seguem os slides da palestra que realizei ontem no Codificando Night Week disponíveis no link: http://bit.ly/1A2RyOR. :)

Regressão Linear e Árvore de Decisão

Confira também as sessões do Diego Nogare, Luan Moreno, e Fabiano Amorim pois foram muito legais!

A gravação das palestras também está disponível, no Youtube:

Vale lembrar que o evento está só começando. Ontem foi o primeiro dia, dedicado a SQL Server, e ainda teremos vários dias de palestras dedicados a diversos assuntos. Se você tiver interesse ainda dá tempo de aproveitar!

Veja a agenda de palestras aqui.

Pin It

Ciência de Dados no Brasil: Iuri Queiroz

Conforme prometido no último artigo essa semana temos a primeira entrevista com um Cientista de Dados falando sobre o seu trabalho e sobre o mercado de trabalho no Brasil: Iuri Queiroz.

Tive a oportunidade de trabalhar com o Iuri ao longo do ano de 2014 na Neocom e com certeza aproveitei muito para aprender com ele. Aliás a Neocom faz um trabalho muito legal de análise de dados em Brasília e possui uma excelente equipe. Acredito que ainda teremos a oportunidade de conversar com mais profissionais de lá.

Iuri é formado em Ciências Econômicas e mestre em Desenvolvimento Regional. Trabalha como cientista de dados desde que se formou e hoje é especialista em análise de mercado. Realiza estudos para grandes multinacionais de vários ramos da indústria como Walmart, Toyota e Hyundai, utilizando métodos e modelos de estatística, econometria espacial e machine learning. Também atua como assistente de pesquisa para o Instituto de Pesquisa Econômica Aplicada (Ipea). Possui um blog próprio Órbita Econômica onde fala um pouco sobre seu trabalho e você também pode encontrá-lo no LinkedIn através desse link.

Então vamos à entrevista:

  • Ivan: Olá Iuri! Obrigado por participar da nossa entrevista. Conte-nos um pouco sobre você e sua formação profissional.
  • Iuri: Eu que agradeço. Eu sou de Brasília mesmo, mas venho mantendo uma boa marca no que se refere a morar pelo Brasil. Até agora já cobri a boa parte do nordeste, seja no rastro das mudanças dos meus pais, para Fortaleza e Maceió (onde concluí Ciências Econômicas na federal de lá, UFAL) seja por minhas próprias pernas, para Aracaju onde concluí o mestrado em Desenvolvimento Regional em 2011. Ainda em 2011, retornei a Brasília a passeio e acabei participando de uma seleção para Analista de Estudos de Mercado na empresa Neocom, onde estou desde então. Mais recente, em 2013 apliquei currículo e projeto à uma pesquisa no IPEA, referente a dinâmica de empregos industriais no brasil, e desde então desempenho o papel de assistente em pesquisa àquela instituição.
  • Ivan: Quando você ficou sabendo do termo “Ciência de Dados”? O que achou?
  • Iuri: Da primeira vez que fiquei sabendo do termo Cientista de Dados ou “Ciência de Dados” partiu do gerente em TI da Neocom, ao elencar atividades que percebia serem realizadas dentro da área de análise em estudos adhoc. A princípio achei somente um nome diferente para o que fazia, rs, não me parecia que as atividades exercidas lá se diferenciavam muito do que tinha como ideal de economista, ainda mais um com gosto por métodos quantitativos. A impressão de que estava a fazer algo diferente veio somente muito depois, com o trabalho realizado com duas pessoas lá dentro.
  • Ivan: Pra você, o que diferencia um cientista de dados de um analista ou estatístico?
  • Iuri: Demorou um pouco para entender o que diferenciava o cientista de dados de um analista, seja um economista ou estatístico, mas acho que os sinais estavam lá, rs. Um dos pontos de estranheza foi na entrada para a pesquisa realizada no ipea, onde tive uma convivência com mais profissionais da minha área, Economia, e se por um lado o core da coleta, tratamento e estrutura de dados estava lá, era muito menos intensivo computacionalmente, digamos assim. Sendo assim os dados de uma pesquisa usualmente estavam desnormalizados e de difícil crescimento na escala deste.
  • Ivan: A ciência de dados é um campo multidisciplinar. Como você busca se manter atualizado em conhecimentos além da sua formação acadêmica original?
  • Iuri: Olha, em determinado trabalho já cheguei passar um dia ou mais imerso em artigos de epidemiologia, rs. Do período do mestrado um dos professores sempre fazia a observação de evitar livros, o tempo para um conhecimento chegar àquele livro é grande e você já estará desatualizado. Então em geral vou acumulando artigos que digam respeito ao tipo de problema que enfrentei ou pretendo enfrentar em cada trabalho, o mais comum é da técnica já existir, porém aplicada à outra área de conhecimento completamente distinta. Nesse ponto é importante se despir de preconceitos, se você moldar sua literatura de uma forma idiossincrática de que modo poderá ser surpreendido por algo novo?
  • Ivan: Qual a formação da equipe com o qual você trabalha? Também é multidisciplinar?
  • Iuri: Sim, neste momento trabalho com contadores, economistas, geógrafos, analistas de banco de dados e, mais recente, uma aproximação importante de um analista em arquitetura de software sênior, que veio dar visibilidade algumas modelagens de minha autoria e permitiu melhorar bastante meu traquejo no que se refere às melhores práticas de desenvolvimento. Além disso, como meu trabalho tem um foco em técnicas espaciais e gestão empresarial, cada um daqueles citados anteriormente já contribuíram de alguma forma com o conhecimento que tenho acumulado ao longo dos anos.
  • Ivan: A ciência de dados também envolve o uso de uma grande variedade de ferramentas. Quais você mais usa e quais prefere?
  • Iuri: Antes mesmo da universidade tive a oportunidade de aprender um pouco de desenvolvimento, à época ainda com pascal/delphi e SQL Server. Pouco deste conhecimento foi explorado durante a universidade ou mesmo o mestrado, como as necessidades eram menores, nunca houve chance de aplicar qualquer coisa àquele ferramental adquirido, utilizando sempre de ferramentais mais analíticos como o SPSS, o Eviews e num momento em particular ao Gretl, que atendia às necessidades por análises em painel, não disponível nas outras duas ferramentas. Fui retomar a programação já na Neocom, utilizando bastante de SQL Server para poder estruturar os dados conforme minhas necessidades e as dos estudos, tendo aprofundado principalmente no quesito de dados espaciais, tendo sido apresentado ao Python e os pacotes: Numpy e scipy por um amigo lá mesmo. Gostei bastante da linguagem e me senti a vontade logo de cara, ao contrário da minha experiência com R, partindo para pesquisar diversas bibliotecas de análise. Além disso, o Python conversa de forma muito natural com o ARCGIS, principal ferramental dos geógrafos da empresa, e com o SQL Server. Ainda, o desenvolvimento e suporte à biblioteca PYSAL, Python Spatial Analysis Library, específica de análise exploratória e econométrica espacial, atendem às minhas expectativas.Nesse momento em alguns cursos tenho sido reapresentado algumas ferramentas, como o octave/matlab e o R, se o primeiro me parece bem simples de usar, uma linguagem limpa e clara, falta-lhe conectividade com o legado das informações já utilizadas nos estudos, enquanto ao segundo me estranha a linguagem, e se por um lado a curva de aprendizado parece incoerente com o momento atual do trabalho, também lhe parece faltar conectividade com o legado das informações já disponíveis.
  • Ivan: Quais os métodos e modelos que você usa com mais frequência? E quais você usa com pouca frequência mas acha interessantes?
  • Iuri: Para mim há um viés muito forte em decorrência dos dois trabalhos exercidos, para economia espacial a distância é fator preponderante da maioria das análises, dado um mesmo indivíduo/loja, então a aplicação de modelos resultantes da teoria do lugar central (Losch, 1954 e Christaller, 1933) toma grande espaço, orientando modelos gravitacionais não-paramétricos e/ou também paramétricos, utilizando o ferramental de regressões com variáveis dependentes com defasagem espacial ou termo erro com defasagem espacial. Apliquei somente uma vez a título de teste (apesar de ainda estar rodando, rs) os conceitos de estatística bayesiana, modelos frequentistas me dão pouca ou nenhuma liberdade para inserção e interação com a opinião de especialistas, o que considero ser um passo importante para melhoria de alguns resultados de modelos muito sensíveis à amostra até então disponível.
  • Ivan: Como você vê a situação atual do mercado de trabalho para cientistas de dados no Brasil? E no futuro?
  • Iuri: É importante lembrar que as análises tem relação direta com a tomada de decisão das empresas, é natural que agora, após uma época de euforia dos clientes acreditando numa realidade de crescimento que os isentava de cuidado em suas decisões, venham a rever parte de suas decisões e explorar de forma mais fortuita o mercado brasileiro. Isso deve acontecer tanto no campo operacional quanto nas áreas de expansão e inteligência de mercado, exigindo uma quantidade e qualidade das análises até então não exploradas. No futuro a análise principalmente comportamental, voltada à otimização do lado operacional, deve tomar conta das empresas.
  • Ivan: Interessante. E de que outras formas você espera que a ciência de dados vá afetar as empresas e as pessoas no futuro próximo?
  • Iuri: A ciência de dados veio a dar visibilidade à muitos preceitos da administração e economia que antes somente grandes gênios nessas áreas puderam conceber em artigos teóricos. É possível que num futuro próximo a possibilidade de emergir com soluções “inovadoras” (mas aquelas inovadoras de 19**) para uma empresa de médio a grande porte, com uma medida precisa dos impactos de cada ação tomada, otimizando os resultados por parte da empresa e até mesmo da satisfação do consumidor, em ter soluções que se adequem cada vez mais a ele.
  • Ivan: Alguma dica para quem tem interesse em começar a trabalhar na área?
  • Iuri: Bom, é uma profissão de quem está disposto a assimilar toda a multidisciplinariedade que puder, não é comum ver esse economista/estatístico Frankenstein, com uma necessidade irritante de pesquisar em artigos de epidemiologia soluções para uma revenda de carros, ou supermercados… e assim por diante. Ainda, acredito ser importante ter uma base boa em estatística, por mais que não se resuma a isso, ela está lá e se tem um buraco onde você não vai querer se meter é numa análise frágil. Por fim, sempre tem alguém que já respondeu algo como o que você quer, é extremamente importante ir atrás de uma bibliografia que te dê algum suporte na interpretação inicial daquele problema. Já vi analistas experientes indo atrás de problemáticas como retorno marginal decrescente do capital, conceito ensinado no início do curso de economia, sem consultar uma literatura a respeito.

Essa foi nossa primeira entrevista. Na próxima vamos conversar com outro cientista com um background bastante diferente do Iuri. Fique ligado!

Se quiser fazer alguma pergunta, deixe seu comentário abaixo!

Pin It

O que é a Ciência de Dados?

Essa é a primeira dúvida de todo profissional de áreas relacionadas quando comento sobre o assunto. Confesso que eu mesmo me pergunto isso de vez em quando. É difícil definir exatamente o que é Ciência de Dados, por ser uma área bastante abrangente e que aproveita muito de diversas disciplinas, muitas vezes já bastante ligadas entre si como Machine Learning das Ciências da Computação, otimização matemática e inferência estatística. Para citar alguns dos principais exemplos:

  • Matemática
  • Estatística
  • Ciências da Computação
  • Marketing
  • Ciências Econômicas

Entre tantos outros…

Como o próprio nome indica o profissional cientista de dados passa o dia trabalhando com dados. Mas existem diversas tarefas diferentes que podem ser realizadas com tais dados. Uma abordagem simples para entender a Ciência de Dados é subdividí-la em suas principais atividades, que, juntas, formam as bases da profissão e que se encaixam, em parte, com a definição do Gartner sobre Business Analytics, outra área bastante relacionada. São elas:

  • Preparação
  • Análise descritiva
  • Análise prescritiva
  • Análise preditiva

Preparação dos dados

Na preparação o cientista é responsável pela coleta e limpeza dos dados. Suas principais preocupações são a disponibilidade e qualidade em geral do dado. Isso remete à famosa frase: “Garbage In-Garbage Out.”

É nesse momento que são realizadas integrações de fontes díspares, checagem de valores e às vezes até a remoção de outliers das amostras. Também poderíamos encaixar aqui o transporte dos dados de um lugar a outro, como por exemplo a extração do dado da fonte, importação do dado em algum banco de dados, o transporte entre bancos de dados distintos, entre bancos de dados e o Hadoop, ou algo do gênero.

Também relacionado, mas que particularmente eu não colocaria aqui é a preparação dos dados especificamente para a aplicação de algum modelo estatístico ou de Machine Learning, como por exemplo a normalização de dados numéricos. Esse tipo de tarefa vai variar de acordo com o modelo a ser utilizado, portanto eu classificaria como uma das fases envolvidas nas análises preditiva ou prescritiva.

Análise prescritiva

No caso da análise, o produto final geralmente é um relatório com dados e o resultado da aplicação de modelos para auxiliar na tomada de decisões. Em geral, o trabalho vai além da análise descritiva, de forma que fornece a inferência para aliviar um pouco do “achômetro” na hora de decidir. A análise prescritiva não remove de forma alguma a necessidade de avaliação por parte de executivos e analistas especializados na área (que pode ser operações, marketing, publicidade, etc.) e serve “apenas” como mais uma ferramenta, embora uma ferramenta bem mais científica do que utilizada em geral.

Análise preditiva

Já na análise preditiva ou automação, o cientista é responsável pela criação de modelos preditivos, não necessariamente se preocupando com o poder de explicação daquele modelo. O resultado principal aqui seria a capacidade preditiva do modelo, ou seja, se ele é capaz de fazer previsões com acurácia e precisão suficientemente bons. Nesse tipo de trabalho, em geral, são aplicados modelos mais complexos de Machine Learning ou até conjuntos de modelos (chamados de “ensembles“) através de técnicas como bagging e boosting.

Apesar dessa divisão, dentro de cada uma dessas principais atividades se encontram o uso de técnicas de mineração de dados, estatística aplicada e machine learning.

O que dizem os cientistas de dados sobre a sua profissão?

Já que o trabalho do cientista de dados é tão amplo e ainda é uma área relativamente nova (apesar das técnicas serem bastante antigas), talvez a melhor forma de entender realmente do que se trata é conversamos diretamente com praticantes, pessoas que estão no dia a dia executando tarefas da ciência de dados e que se dedicam para a área.

Por isso convenci um seleto grupo de amigos a participar de uma série de entrevistas para contar um pouco da experiência de cada um, como imaginam o campo de ciência de dados no futuro e como está o mercado de trabalho hoje no Brasil. Todos eles são profissionais experientes que já estavam trabalhando com dados muito antes do nome “Ciência de Dados” ser criado.

A primeira entrevista será na próxima semana. Se você quer saber mais assine o feed do blog ou siga meu twitter para não perder! ;)

Pin It

Mathematica

I’ve been using Wolfram Mathematica a lot lately. From Microeconomics classes to Econometrics to data analysis and demonstrations. Here’s what I make of it, good and bad.

The Good

Picture of an article about Mathematica in 1988

Mathematica in 1988

Mathematica truly is state of the art. It recently turned 25, which is quite some time for any piece of software. It’s been the tool I’ve used most frequently for data analysis when given the chance to choose. It’s powerful, it’s simple and it’s highly productive. If you do scientific work and/or data analysis and haven’t already, I think you should give it a try and decide for yourself.

The Language

Stephen Wolfram himself and the guys at Wolfram Research have spent a lot of time in language design and it shows. Here’s what he says about it:

“I’ve been doing language design now for 35 years—and it’s the hardest intellectual activity I know. It requires a curious mixture of clear thinking, aesthetics and pragmatic judgement. And it involves always seeking the deepest possible understanding, and trying to do the broadest unification—to come up in the end with the cleanest and “most obvious” primitives to represent things.”

The Wolfram Language is a descendant of the Lisp family of programming languages, even though it doesn’t look like it.

I’ve been programming in functional programming languages for quite some time now, and since then I’ve worked with Haskell, Erlang, Common Lisp, Scheme and even a little bit of Clojure. In my opinion, the Wolfram Language is definitely among the top ones. And for the kind of work that I do, the functional programming paradigm fits perfectly. Use the right tool for the right job, right?

The Environment

Besides the programming language, the Notebook environment is surprisingly good. I didn’t think so when I first started using it. It was different, unusual. But after some time I’ve grown used to it, and not only that but I also began missing it when working in something else. I like it better even compared to other notebook style environment like IPython notebook. This is a matter of taste, obviously, so YMMV.

Integration

One of the first things that caught my attention is that Mathematica has a “curated data backend” where you can request data from the Wolfram servers (assuming you’re online) without ever leaving it. Of course it’s far from complete, but it does have some interesting Demographic, Geographic and Economic data¹ I can work with for prototyping or exploratory analysis. It has a lot of other kinds of data as well (more on this later). This is the same data used in Wolfram|Alpha, which also integrates nicely with Mathematica.

While still in its infancy, I really hope they keep improving this service and adding more data over time!

Cross-platform

This is basic and a must-have.

Batteries included

I was quite surprised to see how easy it was to start working with geographic data in Mathematica. It works with Shapefiles (arguably the de facto standard for this kind of data) out of the box. No third-party plugins, add-on, libraries or you-name-it. In fact, it works with quite a lot of other data formats as well, some more well known than others. This includes geographic, image, sound, tabular, XML, CAD and many other kinds of data. There’s a list here.

In this regard, this is a very different user experience than that of Python or R, both of which I also use a lot.

Mathematica 8 logo

Mathematica 8 logo

Of course, being able to read or write the data is nothing if you can’t work with it. There’s a wealth of functions and data for many different kids of use. From Chemistry to Image processing. I’ve tried to explore the Mathematica ecosystem a lot, and I feel like I still have only seen 5% or so. There’s a lot of specialized stuff, so I don’t think that someone would ever benefit of this 100%, of course. Still, it’s very interesting to see how flexible Mathematica can be and how many fields it’s been applied.

Compared to MATLAB, Mathematica packs everything in a single package: Statistics, Curve Fitting, Optimization, Finance, Signal Processing, etc., which makes it a lot cheaper if you need some of these to do work. I don’t have enough experience with MATLAB so I can’t say much with regard to performance or usability, though. The little experience I do have with it left me with a very good impression.

There are many more things to talk about Mathematica, but I chose to write just about the ones I care about the most and use frequently.

The Bad

While I like much of Mathematica, I don’t mean to imply that it is a “silver bullet”. It isn’t. There are some things I dislike about it and things I think Wolfram should do differently.

These things I list here are about how Mathematica is managed, or should be managed, when taking in consideration the strong growth of open source alternatives like R and Python, which are in my opinion the strongest candidates for data analysis in the longer term.

Here’s what Google Trends shows:

The CDF thing

Please Wolfram, just forget about CDF. There was a time when it made sense, but that time has passed. We are in 2015 already. No proprietary plugins on the internet, please! Why not just output to HTML5, Javascript, SVG instead?

I would love to use Mathematica-created content on my blog, but I can’t because my readers will not have the CDF player installed, and neither would I want them to install it.

The community around Python (here) and R (here and here) are already exploring this, and so should Wolfram.

Package Management/Installation

Talking about communities, Mathematica already has a good community around it. It even has a StackExchange site, Mathematica.SE. But I was surprised to learn that there isn’t a central repository for third-party packages. Yes, I know there is the Wolfram Library Archive where I can download (sometimes decades old) packages, but I’m not talking about that. I’m talking about an automated system, something similar to Python’s pip, and R’s CRAN. Even .NET has one already, for crying out loud! (See NuGet.)

Licensing

Mathematica licensing and pricing is actually transparent. You have a bunch of options, you look for the one that fits your use case and you can go and buy directly from their website. You just need a credit card. Compare that to other vendors where you have to send an e-mail, wait for a “personalized” (aka expensive) quote and talk to a local sales representative. Quick, right?

Anyway, I don’t know if Wolfram has ever considered opening Mathematica up (as in FOSS), but if it hasn’t, it should. Maybe they can find a sustainable business model around it, maybe they can’t, but that doesn’t mean they shouldn’t look into it.

I would say that if Mathematica were open source it could compete head on with R, and maybe Julia wouldn’t need to exist.

But if Wolfram can’t make it open source, they should make it free for individuals, or at the very least free to students. Something along the lines of what SAS has done with SAS University.

Think this is too unlikely? Well, Wolfram has already done something quite similar recently with Raspberry Pi. Yup, you can use Mathematica for free with Raspberry Pi. To me, this suggests that Wolfram is indeed looking to expand its market share, mainly with regard to the so called Internet of Things, where it’ll probably be competing with (guess who?) Python.

I think they got things right this time. Maybe they can expand on that line of thought.

Pin It

Material adicional de Data Science

Essa semana tive a oportunidade de palestrar sobre Data Science e assuntos relacionados (data mining, machine learning, etc.) na Microsoft de Brasília através do grupo SQLServerDF, juntamente com o Luciano Moreira.

Iniciando a palestra Pragmatic Data Science

Iniciando a palestra Pragmatic Data Science

Foi uma ótima experiência e agradeço a todos que estiveram lá! Como sempre, o grupo estava participativo e surgiram diversas dúvidas relevantes durante a apresentação.

Disponibilizei aqui o material da palestra para quem pediu ou qualquer um que tenha interesse no assunto.

Por questões de espaço e tempo, não coloquei muitos recursos que acredito que sejam interessantes para quem quiser saber mais sobre Data Science. Então segue uma lista complementar ao que está no fim da apresentação:

Livros:

Dados:

 

Pin It

Palestra Windows Internals

Enquanto não sai o próximo post da série Inside the Machine, fiz uma apresentação sobre fundamentos de Windows Internals para alguns DBAs SQL Server.

Nessa palestra falei, entre outras coisas, sobre um pequeno segredo para gerar dumps “full” do SQL Server sem que se tenha que suspender o processo original do mesmo. Isso é bastante interessante em cenários onde você tem uma instância com um Buffer Pool relativamente grande (30 GB+) e não pode manter o processo parado enquanto gera um dump.

Pretendo (um dia haha) postar sobre isso, mas por enquanto veja nos slides para maiores informações. Vale ressaltar que essa funcionalidade não é documentada, não é suportada pela Microsoft e pode destruir o processo da sua instância SQL, corromper os bancos de dados, explodir o seu data center e ainda por cima matar alguns gatinhos! Não use em produção.

Segue o link para download do pdf: http://bit.ly/1KgXElG

Se você quer se aprofundar mais nos assuntos, recomendo dar uma olhadinha nas referências ao fim da apresentação e também o meu treinamento on-demand de Windows Internals na Sr. Nimbus.

No mais, fique à vontade para deixar seus comentários sobre o material!

Pin It

Inside the Machine Parte 2 – Processadores

Introdução

Continuando nossa série de artigos sobre hardware, vamos falar um pouco sobre microprocessadores. Se você não viu a primeira parte da série,  sugiro que leia antes de continuar, pois nessa parte vamos seguir a linha de pensamento apresentado anteriormente.

Processadores

Já que vamos falar sobre mecanismos internos das CPUs precisamos escolher alguma implementação, ou microarquitetura específica como ponto de partida.

Escolhi a microarquitetura Nehalem [1] pelo simples fato de que tenho processadores baseados nessa microarquitetura tanto nos servidores do ambiente onde trabalho quanto no meu notebook. :)

Segundo a Intel, o desenvolvimento dessa microarquitetura custou aproximadamente 12 bilhões de dólares, incluindo US$ 9 bilhões na construção das fábricas (fabs), US$ 1 bilhão para o design do processo de fabricação de 45 nanômetros em material dielétrico “High-k” [11], e US$ 2 bilhões no design da microarquitetura em si [3].

Outra microarquitetura, chamada Westmere é a versão reduzida (shrink) da microarquitetura Nehalem, seguindo o padrão tick-tock de fabricação da Intel [2]. Esse tem um processo de fabricação de 32nm. A atualização das fabs para esse shrink custou à Intel mais US$ 7 bilhões [10].

Apesar da Intel já ter lançado novas microarquiteturas desde então – Sandy Bridge, Ivy Bridge e o recém-anunciado Haswell – as microarquiteturas Nehalem e Westmere são bastante comuns nos servidores que se encontram em produção hoje. Além do mais, pretendo cobrir as microarquiteturas mais novas ao longo do tempo.

Overview da Microarquitetura

Nehalem foi uma microarquitetura particularmente importante em relação a tecnologias Intel. Foi nessa microarquitetura que a Intel reintroduziu o hyper-threading ao seus processadores, após remover a funcionalidade nos processadores baseados na microarquitetura Core. Outra tecnologia importante introduzida pelo Nehalem foi o uso de um interconnect entre os processadores, similar ao que a AMD já vinha oferecendo, para remover o gargalo do acesso à memória com o Front-Side Bus (FSB). Chamado de QuickPath Interconnect (QPI), a Intel criou a tecnologia visando recuperar o mercado perdido para a AMD durante o período.

Falaremos sobre o QPI no futuro, quando entrarmos no assunto de Non-Uniform Memory Access, ou NUMA.

Primeiro chip Nehalem, Cortesia Intel

Primeiro chip Nehalem, Cortesia Intel

Core e Uncore

Na terminologia dos designers e engenheiros de processadores, os processadores são divididos entre Cores e Uncore.

Cores são desenhados como blocos reutilizáveis de lógica e hardware e não mudam entre um modelo e outro.

Os cores Nehalem e Westmere possuem 64 KB de cache L1 e 256 KB de cache L2 cada. O cache L3 é compartilhado entre todos os caches do chip, e o seu tamanho é dependente dos modelos.

O Uncore, por outro lado, são os componentes que não fazem parte do Core. Dependendo da literatura que você ler isso inclui L3, I/O, IMC e QPI. Outros separam os componentes, portanto teríamos Uncore, QPI, IMC, etc.

O Uncore pode mudar (e efetivamente muda) de um modelo para outro, mesmo entre modelos da mesma microarquitetura.

Planta

Além disso, os Cores rodam em frequências e voltagens independentes entre si. O Uncore também roda em uma frequência independente do restante dos cores. Nos slides da Intel, eles se referem ao Uncore e outros componentes de forma distinta, mas ao se referirem à frequência e voltagem, chamam todos de Uncore também.

Particionamento de voltagem e frequência do Nehalem, Cortesia Intel

Particionamento de voltagem e frequência do Nehalem, Cortesia Intel

A diferença na frequência entre Cores e Uncore tem impacto direto no desempenho da máquina. Falaremos disso tudo quando chegarmos aos assuntos de Turbo Boost e SpeedStep.

Quando estiver abordando um assunto específico de cada modelo (uncore) darei preferência ao Xeon E7-8870, o modelo com qual trabalho. Conhecido como Westmere-EX, este é o absoluto top de linha da Intel em arquitetura x86 nesse ciclo de lançamentos.

Xeon E7

Processador Intel Xeon E7, Cortesia Intel

Processador Intel Xeon E7, Cortesia Intel

O Xeon E7-8870 possui aproximadamente 2.6 bilhões (!) de transístores em uma pastilha de 513 mm²; quatro portas QuickPath Interconnect (full-width)  em 3.2 GHz rodando a 25.6 GB/s full-duplex; 2 controladoras de memória DDR3 on-chip dual-channel de 10.83 GB/s cada, totalizando 4 canais e 43.3 GB/s; 10 cores – 20 threads em com hyper-threading – por socket rodando a uma frequência base de 2.4 GHz. As 4 portas QPI permitem escalar até 8 sockets em um único sistema e chegar até 2 TB de memória com DIMMs de até 32 GB.

Chip Westmere, Cortesia Intel

Chip Westmere, Cortesia Intel

Note o aumento de cores na imagem do chip Westmere em relação ao Nehalem apresentado no início do post. Se olhar atentamente, poderá perceber que se tratam dos mesmos cores, apenas replicados mais 2 vezes. É possível perceber também o aumento nos bancos de cache, abaixo dos cores.

Core i5 460M

Já o meu notebook tem uma configuração bem mais modesta e é organizado de uma forma um pouco diferente, apesar de ser baseado na mesma microarquitetura.

É um Intel Core i5 460M, codinome Arrendale, rodando a 2.53 GHz. Possui aproximadamente 382 milhões de transístores divididos entre 2 cores e o LLC (aka L3) de 4 MB, porém somente 3 MB são habilitados para esse modelo. A controladora de memória (IMC) e o gráfico ficam em outro chip no mesmo package, interligados com o chip do processador através de uma interface QuickPath Interconnect. A controladora de memória possui 2 canais DDR3 de 1.333 MHz e suportam DIMMs de até 8 GB.

Na imagem abaixo podemos visualizar o chip do processador (88mm²) e o chip “Northbridge” de aprox. 177 milhões de transístores (114mm²) no mesmo package.

Intel's Core i5 Arrandale CPU, Cortesia Intel

Intel’s Core i5 Arrandale CPU, Cortesia Intel

No diagrama de blocos podemos ver claramente a topologia entre o processador e o GPU, conectados por uma interface QPI:

Diagrama de blocos dos Clarkdale/Arrandale, Cortesia Arstechnica

Diagrama de blocos dos Clarkdale/Arrandale, Cortesia Arstechnica

Moore’s Law

Como eu falei no post anterior, o clock dos processadores parou de subir, mas o desempenho dos cores continua subindo, embora não no mesmo ritmo que subia anteriormente. Como isso é possível? Através da lei de Moore.

Gordon Moore [4] é co-fundador da Intel, e a lei leva o seu nome pois ele foi o autor da frase que dizia que o número de transistors em cada processador dobraria a cada 2 anos. Existem diversas versões e interpretações das palavras ditas por Moore. Segue a frase original [5]:

“The complexity for minimum component costs has increased at a rate of roughly a factor of two per year. Certainly over the short term this rate can be expected to continue, if not to increase. Over the longer term, the rate of increase is a bit more uncertain, although there is no reason to believe it will not remain nearly constant for at least 10 years.”

A frase pode se encontrada no artigo escrito por Moore [14], mas sem entender a relação entre defeitos, custo e integração na fabricação de chips a frase é difícil de ser digerida. Uma versão que gosto e que modifica ao mínimo a frase foi publicada no Arstechnica, em 2008 [13]:

“The number of transistors per chip that yields the minimum cost per transistor has increased at a rate of roughly a factor of two per year.”

Esse é o sentido original da frase, e a percepção do mercado de chips em geral nas últimas décadas. A frase foi dita em 1965, e apesar de Moore ter previsto a continuidade por 10 anos, a lei continua em vigor até hoje.

A frase foi dita em 1965, e apesar de Moore ter previsto a continuidade por 10 anos, a lei continua em vigor até hoje.

Gráfico do número de transístores ao longo da história, Cortesia Wikipedia

Gráfico do número de transístores ao longo da história, Cortesia Wikipedia

Essa quantidade extra de transístores é utilizada pelos engenheiros para aumentar a eficiência dos processadores. Com cada ciclo de lançamentos, os processadores ficam mais e mais complexos.

Em alguns modelos Nehalem, por exemplo, quase 60% desses transístores são dedicados aos caches, principalmente no cache L3 [12]. O restante é utilizado para adicionar mais lógica e mais funcionalidades, aumentando assim a complexidade dos chips.

Complexidade

Vista aérea de Shangai, China

Vista aérea de Shangai, China

Para se ter uma ideia da complexidade desses processadores, basta imaginar que a cidade mais populosa da China, Shangai, possui aproximadamente 16 milhões de habitantes, enquanto o processador Xeon E7-8870, como dito anteriormente, possui aproximadamente 2.6 bilhões de transístores. Ou seja, se cada morador correspondesse a um transístor, precisaríamos de 162 Shangais e meia. Isso é o dobro de toda a população da própria China, o país mais populoso do mundo.

GPGPU

Uma forma alternativa de utilizar esses transístores seria a criação de núcleos pouco complexos, porém em quantidades muito maiores do que vistos hoje, como por exemplo um processador com dezenas ou centenas de cores.

Na verdade esse tipo de arquitetura existe e é muito utilizada. É encontrada em GPUs, que possuem centenas de núcleos simples (em relação aos núcleos de uma CPU). Em geral, esses núcleos não servem para fazer o processamento de qualquer tipo de código e operação e portanto não substituem os processadores comuns, mas podem ser úteis para algoritmos onde é possível fazer paralelismo massivo do processamento. Existem várias vertentes de desenvolvimento de dispositivos, linguagens e ferramentas para aproveitar melhor esses recursos como o NVIDIA CUDA, OpenCL e mais recentemente o C++AMP da Microsoft, do qual já falei por aqui.

Esse tipo de processamento, chamado de General-purpose computing on graphics processing units, ou GPGPU, ainda não é utilizado pelos SGBDs, mas já existem pesquisas nesse sentido, como pode ser visto em [8] e [9].

Cache

Agora que já fizemos uma introdução básica às CPUs, no próximo artigo vamos nos aprofundar um pouco no assunto dos caches.

Até a próxima. ;)

Referências

[1] http://en.wikipedia.org/wiki/Nehalem_(microarchitecture)
[2] http://en.wikipedia.org/wiki/Intel_Tick-Tock
[3] http://forwardthinking.pcmag.com/pc-hardware/283044-intel-looks-ahead-nehalem-larrabee-and-atom
[4] http://en.wikipedia.org/wiki/Gordon_Moore
[5] http://en.wikipedia.org/wiki/Moore’s_Law
[6] http://www.xbitlabs.com/articles/cpu/display/core-i7-920-overclocking_3.html
[7] http://www.extremetech.com/extreme/133541-intels-64-core-champion-in-depth-on-xeon-phi
[8] http://sacan.biomed.drexel.edu/vldb2012/program/?volno=vol5no13&pid=1004&downloadpaper=1
[9] http://wiki.postgresql.org/images/6/65/Pgopencl.pdf
[10] http://asia.cnet.com/blogs/intel-invests-us7-billion-in-32nm-westmere-cpu-manufacturing-62114335.htm
[11] http://www.intel.com/pressroom/kits/advancedtech/doodle/ref_HiK-MG/high-k.htm
[12] http://upcommons.upc.edu/e-prints/bitstream/2117/13932/1/hybrid_NUCA-hipc11.pdf
[13] http://arstechnica.com/gadgets/2008/09/moore/
[14] http://www.computerhistory.org/semiconductor/assets/media/classic-papers-pdfs/Moore_1965_Article.pdf

Pin It

Série – Inside The Machine – Introdução

Quando você pensa na memória do seu servidor, qual é a primeira coisa que te vem à cabeça? Gigabytes? Terabytes? Enfim, espaço? E quando você pensa em desempenho, a primeira coisa que você pensa são os Gigahertz da CPU?

Nessa série de artigos quero explorar o subsistema de memória de um ponto de vista um pouco diferente: o foco será a interação entre ele e a CPU. Falaremos do desempenho da memória e como ela pode afetar – e afeta! – o desempenho como um todo do seu servidor, e o que você pode – e não pode – fazer a respeito em relação ao seu banco de dados (ou qualquer outra aplicação).

Confesso que essa série estava parada no meu OneNote há algum tempo. Conversando com o meu amigo Luan Moreno recentemente cheguei a conclusão que era hora de tirar a poeira e postá-los. :)

Velocidade do processador é tudo?

Se você não conhece Martin Thompson, recomendo adicionar o blog ao seu leitor de RSS favorito e acompanhar o que ele escreve e palestra. Ele é definitivamente uma das grandes referências no assunto de HPC (High Performance Computing) e baixa latência e vamos utilizar alguns testes escritos por ele (e alguns meus) durante essa série, então nada mais justo do que começar fazendo referência a uma frase sua: “The real design action is nn the memory sub-systems.” [2]

Você já percebeu que ultimamente têm sido bastante falado sobre a velocidade dos processadores e como seu desempenho parou de evoluir nos últimos anos em favor do aumento da quantidade de cores? Quem desenvolve software com certeza já ouviu que deve aprender desenvolvimento de software com paralelismo para não arriscar ficar sem emprego no futuro. A famosa frase “the free lunch is over” tem sido repetida diversas vezes nas últimas conferências mundo à fora desde que o guru de C++ Herb Sutter escreveu o seu artigo homônimo em 2005 para o respeitado journal Dr. Bobb’s [1].

De fato a frequência dos processadores parou de subir, principalmente devido às questões de economia de energia e dissipação de calor, como é possível observar claramente no gráfico abaixo tirado do artigo de Sutter:

Intel CPU Trends Chart

Intel CPU Trends 1970-2010. Fonte: The Free Lunch Is Over, Herb Sutter

Mas olhar apenas para os GHz não conta toda a história.

Linha Modelo Ops/Sec Ano de Lançamento
Core 2 Duo  P8600 @ 2.40GHz 1434 2008
Xeon  E5620 @ 2.40GHz 1768 2010
Core i7  i7-2677M @ 1.80GHz 2202 2011
Core i7  i7-2720QM @ 2.20GHz 2674 2011

Podemos observar na tabela acima que o desempenho geral do CPU continua subindo, mesmo que a frequência esteja, de certa forma, estagnada. Medimos esse desempenho através de IPCs, ou Instructions per Cycle.

Ou seja, em um processador de 2 GHz capaz de fazer o retirement de até 4 instruções por ciclo (IPC), como é o caso da microarquitetura Nehalem, no caso ideal o seu desempenho pode chegar a 8 bilhões de instruções por segundo! Nada mal.

Single Threaded Performance Trends Chart

Single Threaded Performance Trends 1995-2011 [3]

Então se o desempenho das CPUs efetivamente continua subindo (apesar de claramente em um ritmo menor) mesmo que os clocks se mantenham estáveis, quem é o responsável por segurar o desempenho geral dos sistemas?

Refazendo a pergunta anterior de outra forma… Em um workload onde o gargalo não se encontra nem em I/O nem na CPU, o que impede o seu processador de realizar o trabalho mais rapidamente?

Você provavelmente já deve ter matado a charada: no acesso à memória, ou o que chamamos de latência. Mas esse fato não parece ser muito óbvio à primeira vista: memória não é só uma questão de quantidade.

Latência? E acesso à memória lá tem custo?!

Em relação ao custo de acesso ao disco, a latência do acesso à memória é irrisório.

A memória, porém, é o que previne que o seu sistema rode em seu desempenho máximo. Isso ocorre pois o acesso à memória é significativamente inferior à velocidade do processador, e essa diferença só cresceu ainda mais nas últimas décadas. Esse fenômeno é chamado de “Memory Wall“, termo cunhado no paper [4].

Se pudéssemos trabalhar com dados apenas nos registradores, a “memória” com a menor latência no CPU, o nosso processador poderia utilizar todo o seu potencial computacional. Infelizmente, principalmente em servidores de bancos de dados, isso está muito longe da realidade. É comum trabalharmos com working sets de dezenas ou centenas de GB. E por isso pagamos o custo de acesso à memória o tempo todo. Enquanto esse acesso ocorre, o processador precisa ficar esperando pelos dados até que ele possa voltar a trabalhar, efetivamente gastando ciclos de clock à toa. Um cache miss pode custar centenas de ciclos de clock do processador, tempo que ele poderia gastar realizando operações ao invés de esperar por dados para serem processados.

Com o fim da era de crescimento contínuo dos clocks dos processadores os engenheiros têm evoluído as microarquiteturas a fim de amenizar o impacto da latência do acesso à memória principal do sistema. Os processadores se utilizam de diversos artifícios para esconder essa latência, e assim diminuir a penalidade causada pela disparidade entre o desempenho entre eles. Já falei sobre um deles aqui, o Hyper-Threading (SMT). Ao longo da série, são esses mecanismos, artifícios e otimizações que vamos tratar, além de outros assuntos que estejam relacionados.

Seguem alguns dos tópicos que tenho planejado para essa série:

  • Microprocessadores
  • Latência
  • Caches e Hierarquia da memória
  • Intel SpeedStep e Turbo Boost
  • Hyper-Threading (SMT)
  • FSB e NUMA
  • Superscalar
  • Pipelining
  • Spinlocks & Latches
  • Algoritmos e Otimizações no SQL Server 2014

Tentarei seguir a lista acima, mas vou manter a possibilidade de inserir, mesclar ou remover tópicos conforme a série se desenvolve. Manterei a lista atualizada de acordo, incluindo atualizações (adição de tópicos, etc.) e links para os artigos conforme vão sendo lançados. Portanto se quiser acompanhar você pode marcar essa página nos seus favoritos, ou adicionar o feed do blog ao seu leitor RSS favorito, como preferir.

Referências:

[1] Sutter – The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
[2] Thompson – Mythbusting modern hardware to gain “Mechanical Sympathy”
[3] Moore – Data Processing in Exascale-class Computing Systems
[4] Wulf, McKee – Hitting the Memory Wall: Implications of the Obvious

Pin It

Hyper-Threading (SMT) e SQL Server

Semana passada postaram uma pergunta muito interessante na lista de SQL Server Nimbus Advanced, que participo. Pela própria natureza do assunto que o torna interessante para um grupo de pessoas além dos que participam da lista, e o fato de que a resposta que eu estava escrevendo acabou crescendo um pouco, acabei decidindo transformá-lo em um post. :)

Hyper-Threading (SMT) e SQL Server

Muito interessante o asssunto. Vamos por partes…

O principal fator que vai definir o impacto do HT no seu ambiente é o seu workload – tanto positivamente quanto negativamente.

Intel Core i7 logoA própria Intel limita o ganho teórico do HT a 30% [1]. Isso é, no melhor do melhor dos casos, o máximo de desempenho que você vai “ganhar” com HT é 30%. É pouco? Não acho. Mas o que eu acho é que HT é muitas vezes confundido como uma funcionalidade de desempenho quando na realidade é uma funcionalidade que visa melhorar a eficiência do seu processador. Ele vai utilizar alguns ciclos a mais que teriam sido perdidos caso não houvesse um “pipeline” substituto pronto para entrar em cena. Não há ganho, e sim “controle de perda”. :)

HT nada mais é do que a duplicação de alguns componentes do pipeline do núcleo, permitindo que esse, no melhor caso, não pare totalmente de trabalhar quando houver uma dependência ainda não disponível durante a execução, como um acesso de memória que resultou em cache miss, por exemplo.

Pipeline wih and w/o SMT

Pipeline (SMT)

Teoria e prática

Ok, mas saindo um pouco da teoria e indo para a parte prática, muitas coisas começam a influenciar na brincadeira.

O próprio escalonamento do Windows (e de tabela o do SQL Server) afeta o desempenho do sistema com o HT habilitado ou não. Por exemplo, se o algoritmo do scheduler não levar em conta o fato de dois “núcleos lógicos” (por falta de nome melhor) compartilharem os mesmos ALUs o seu desempenho vai piorar sensivelmente quando o scheduler escalonar duas threads no mesmo núcleo físico ao invés de núcleos físicos distintos.

Esse cenário era muito comum nos primórdios do Windows Server [2], quando este não fazia distinção entre núcleos físicos e lógicos. Ainda vemos algo parecido hoje nos processadores oriundos da microarquitetura Bulldozer da AMD, que utiliza uma tecnologia que também afeta o comportamento do pipeline, mas não é exatamente uma implementação do SMT. Os schedulers não estavam preparados para lidar com isso durante o lançamento dos processadores dessa microarquitetura, fazendo a AMD sofrer em alguns benchmarks [3].

Trocando em miúdos, existem muitos fatores e o impacto no desempenho final pode ser bem maior do que os 30% teóricos, tanto positivamente quanto negativamente.

Mito

Existe um mito que o Hyper-Threading é o mal encarnado para o SQL Server, devido a diversos fatores, incluindo os citados acima. Um dos causadores (não intencional) desse rumor foi o Slava Oks [4] (ex-time de produto, SQLOS), e se você quiser ver um ótimo exemplo de como fazer o HT não funcionar, sugiro que leia o seu post e execute os testes você mesmo.

Processadores

Agora vamos para a questão de desempenho de processadores…

Observando o processo do SQL Server (sqlservr.exe) podemos notar que ele possui callstacks bastante profundas, de pelo menos uns 8 níveis desde o início do processamento de uma consulta, e muitos branches ao longo da execução dessa consulta, mesmo simples. Servidores OLTP, em geral, costumam ter um working set de GBs de dados em memória e processar pequenas partes dessa massa à cada segundo, de forma “aleatória”. Na teoria [5], esses tipos de cenários são excelentes candidatos a fazer um bom uso do SMT e também são bastante influenciados pelo tamanho dos caches do processador, a latência de acesso da sua memória RAM e a eficiência do branch predictor. Esses fatores podem até mesmo influenciar mais que o próprio clock do seu processador… Nada de comprar processadores olhando apenas os GHz!

Workloads de OLAP e aplicações científicas , por outro lado, tendem a ser mais sensíveis à “força bruta” do processador.

Enfim… No final das contas, a única coisa que vai te dizer se o HT pode ou não beneficiar o seu ambiente é o teste. São fatores demais que influenciam no resultado final para fazer uma previsão para qualquer direção. Se você tiver um processador com HT, teste seu workload com e sem o HT habilitado e colete métricas que te dirão qual é preferível.

No caso do seu processador não possuir a funcionalidade, só posso dizer que não se preocupe com isso. Há formas mais práticas e diretas de influenciar o desempenho do seu ambiente.

Referências:

[1] http://en.wikipedia.org/wiki/Simultaneous_multithreading#Modern_commercial_implementations
[2] http://www.hardwaresecrets.com/article/Activating-the-Hyper-Threading/20
[3] http://www.hardwarecanucks.com/news/cpu/microsoft-tries-again-second-win-7-bulldozer-hotfix-now-available/
[4] http://blogs.msdn.com/b/slavao/archive/2005/11/12/492119.aspx
[5] http://www.cs.washington.edu/research/smt/papers/smtdatabase.pdf

Pin It

Está chegando! SQLSaturday #253 Brasília

Como alguns já sabem, esse ano teremos o evento PASS SQLSaturday de número 253, aqui em Brasília!

PASS SQLSaturday #253 - Brasília Logo

PASS SQLSaturday #253 – Brasília

Organizado por um dos regional mentors do PASS no Brasil, Luciano Moreira, o evento contará com  a participação de diversos palestrantes de renome e algumas novas caras que são muito bem vindas à nossa comunidade.

Tive a honra de participar da organização do evento e montamos a agenda da melhor forma possível para que os participantes pudessem aproveitar ao máximo o conteúdo de alto nível digno de um evento desse calibre.

Teremos, além das tradicionais trilhas de Desenvolvimento (Dev), Administração (DBA) e Business Intelligence (BI), uma trilha especial Acadêmica para quem está iniciando no mundo de SQL Server e Bancos de Dados em geral:

Agenda SQLSat #253

Agenda provisória do evento

O evento ocorrerá no dia 28 de Setembro de 2013 e já possui mais de 400 inscritos. Portanto  se você tem interesse em participar, não deixe de fazer sua inscrição o mais rápido possível!

Para mais informações, acesso o blog do Luti e o site do evento.

Te espero lá!

Pin It