2012/08/06
A Lentidão das Memórias Flash nos Mobiles
Não há nada mais irritante do que ficar especado a olhar para o ecrã de um smartphone ou tablet, vendo um "loading" ou "aguarde por favor"... tempos que umas vezes poderão ser causados por insuficiência do poder de processamento do CPU, mas que na grande maioria das vezes são causados pelo tempo que o equipamento demora a ler os dados do suporte onde estão armazenados. No caso dos PCs isso significará quase sempre um disco rígido, nos equipamentos mobiles essa tarefa recai maioritariamente sobre a memória flash, idêntica à que encontramos nos cartões de memória.
Poderão então pensar... mas... as memórias Flash são excelentes, são as que se usam nos SSD, e cuja utilização faz com que qualquer computador pareça mais rápido.
O problema é que há memórias Flash... e memórias Flash.
E acima de tudo, a sua utilização varia muito dependendo do tipo de controlador que é utilizado. Infelizmente para nós, nos segmentos mobiles, a palavra de ordem ainda é "reduzir os custos" ao máximo, e a prioridade dada ao desempenho das memórias flash é algo que recai para segundo plano... tendo como consequência coisas como esta:
No vídeo podemos ver o que acontece a um tablet de topo (um Asus Transformer Infinity) quando se tem um download a correr em background... e que passa de um funcionamento fluido para algo bem mais lento e desesperante.
É que nestes equipamentos, em vez de termos controladores de memória Flash idênticos aos que foram sendo evoluídos nos SSD, continuam a usar-se controladores que eram concebidos para tipos de uso tradicionalmente dados aos cartões de memória: ou seja, a gravação de conteúdos em blocos ou em contínuo (a tirar fotos, ou a gravar vídeo digital), ou a sua leitura. Basicamente, uma operação simples a acontecer de forma exclusiva.
Mas, num equipamento mobile moderno, o uso dado à memória flash aproxima-se mais da de um "computador": ou seja, com acessos variados e contínuos, gravações ao mesmo tempo que se fazem leituras, etc. etc.
Para demonstrar o quanto isto afecta o desempenho, olhem para os resultados deste benchmark do Anandtech.
Equipamentos como o Asus Transformer Infinity, o Samsung Galaxy Nexus, e também o Nexus 7 (que é feito pela Asus) que têm velocidades de 15-26MB/s em leitura sequencial, e 7-8MB/s em escrita (valores idênticos ao que se obtém com uma vulgar pen USB), baixam para uns impressionantemente reduzidos 0.2-0.3MB/s em escrita aleatória de blocos de 4KB!
Não admira, portanto, que a Samsung esteja empenhada em criar memórias quatro vezes mais rápidas para equipamentos mobile. É que, tal como aconteceu nos computadores de secretária e portáteis, já se chegou ao ponto em que pouco ou nada servirá ter CPUs quad-core cheios de potência... que depois passam a maior parte do tempo à espera que os dados sejam lidos ou escritos. Com estas novas memórias flash da Samsung passamos a ter velocidades de até 140MB/s em leitura, 50MB/s em escrita, com 3500 e 1500 IOPS respectivamente.
Há muito que sou um apologista da "abolição" do tempo de espera nos computadores, e principalmente das mensagens de "loading". Isso era algo que se poderia admitir quando se tratava de um ZX Spectrum com 48KB e dados a serem lidos de uma cassete, os de computadores que trabalhavam a 4MHz, tinham apenas 256KB de RAM, e estavam dependentes de disquetes com 160 ou 320KB. Mas numa altura em que até num smartphone temos CPUs quad-core a mais de 1GHz e 1GB de RAM... desculpem-me lá se não consigo compactuar com qualquer App que se atreva a exibir uma dessas mensagens.
Qualquer que seja a "desculpa" para que tal possa suceder ("Ah, temos que ler 500MB de dados, e isso demora tempo!"), será facilmente contraposta com um: "Desenrasquem-se!" Os programadores de jogos nas consolas estão bem habituados a fazer coisas "impossíveis"... como por exemplo ter jogos que podem demorar horas e horas sem parar, sempre a passar por novos níveis, sem necessidade de loading, a correr em hardware bastante limitado. (Claro que também temos inúmeros maus casos de jogos, que por tudo e por nada fazem loadings de dezenas de segundos que nos fazem ter vontade de atirar o jogo pela janela!)
Tudo isto para dizer que, embora se deva apreciar que o hardware vá evoluindo e dê maiores liberdades aos programadores... é triste quando se vê que alguns deles já têm tão entranhada a velha máxima do "o hardware mais potente que vier a seguir desenrasca!"
Tal como há muito tempo venho a recomendar aos meus amigos que poupem o dinheiro entre escolher um CPU que seja a 2.5GHZ ou 3GHz, e antes invistam num SSD, que - esse sim - lhes dará uma diferença bem significativa no uso do seu futuro PC; parece-me que também nos mobile começamos a chegar a esse ponto em que o CPU deixa de ser o factor limitativo... e temos que passar a olhar para a velocidade das suas memórias flash, e outras coisas que depois - no dia a dia - é que acabam por ter o maior impacto na sua utilização.
Grande argumento esse do "desenrasquem-se"...
ResponderEliminarUma empresa ou um programador individual podem lancar o seu produto hoje conforme ele esta, ou podem passar mais 1, 2, 6, x meses a fazer optimizacoes de performance.
Entre o dia em que o produto esta suficientemente bom para ser vendido (subjectivo) e o momento em que a optimizacao parece adequada (subjectivo, Parte II) o PC ou smartphone de referencia no mercado alvo e y% mais rapido e z% mais barato (por hipotese) do que aquele que existia quando o desenvolvimento so software foi iniciado.
Quer entao dizer que o esforco de optimizacao que teve como custo de oportunidade x meses de vendas tem que ter um resultado de y% de rapidez, sob pena de nao ser perceptivel que efectivamente houve um investimento em optimizacao.
Junte-se a isto a possibilidade de o produto de software ser alojado "na cloud" e por isso ser facil de actualizar sem intervencao do utilizador para se perceber que e mais rentavel optimizar a data de lancamento do produto do que a velocidade de leitura.
Já sentia falta de um post deste género. Venham mais :)
ResponderEliminar