Categories
Android Tutoriais

Como tornar o seu sistema Android mais eficiente — ajuste do I/O scheduler.

Neste artigo, vamos tratar dos ajustes do I/O scheduler – que, numa tradução livre, quer dizer agendador ou programador de E/S (Entrada/Saída de dados), que também ajuda a melhorar a performance geral do aparelho — se você conseguir ajustá-lo ao seu perfil de uso.
Diferente dos governors, os schedulers não atuam nos processadores, mas direcionam as prioridades no fluxo de dados do seu dispositivo.

O que é I/O Scheduler

De acordo com a Wikipedia, é o método que os sistemas operacionais usam para decidir em que ordem os blocos de E/S serão submetidos aos dispositivos de armazenamento — motivo pelo qual são chamados, às vezes, disk scheduling (agendamento de disco).

Os perfis de I/O Schedulers

Android CPU Painel de controle
clique para ampliar

Como já foi dito, este gestor determina as prioridades do fluxo de dados no seu aparelho em relação às mídias de armazenamento. Há diversos perfis possíveis de gestão que visam alcançar estes 4 propósitos:

  • Minimizar o uso do disco rígido, cartão etc;
  • Priorizar as requisições de E/S vindos de processos;
  • Reservar largura de banda para rodar processos nas mídias de armazenamento;
  • Garantir que certas requisições sejam satisfeitas antes que “prescrevam”.

Portanto, de forma resumida, o Kernel controla o acesso aos dispositivos de armazenamento usando o scheduler, que tenta se pautar pelas seguintes diretrizes:

  • Justiça – permitir que cada processo tenha o seu tempo de acesso aos dispositivos de armazenamento;
  • Performance – tenta atender as requisições mais próximas à posição atual de leitura/gravação na mídia, uma vez que ali a busca será mais rápida;
  • Tempo real – tenta garantir a rapidez para atender cada requisição, no momento em que ela chega.

Dito isto, vamos analisar cada perfil do scheduler e a que eles se propõem, além de suas vantagens e desvantagens. De posse destas informações, você poderá escolher aquele que mais se adéqua ao seu estilo pessoal de uso do smartphone.

Anticipatory

noop deadline android schedulers
Clique para ampliar

Baseia-se no fato de que a velocidade de acesso aos dispositivos de armazenamento é muito lenta, que as operações de escrita podem ocorrer a qualquer momento e há sempre um processo querendo realizar uma operação de leitura.

Portanto, prioriza as operações de leitura em relação às de escrita. Ele antecipa operações de leitura síncrona.

Vantagens
  • As requisições para leitura nunca ficam “morrendo à míngua”;
  • Tão bom quanto o noop quanto à performance de leitura em mídias flash;
Desvantagens
  • O seu trabalho de “adivinhação” nem sempre é confiável;
  • Reduzida velocidade de escrita em discos de alta performance.

BFQ

Em vez de fatias de tempo alocados pela CFQ, a BFQ propõe “orçamentos”. O disco é oferecido a um processo ativo até que seu orçamento (número de setores alocados) expire. O BFQ determina grandes previsões de recursos a tarefas que não são de leitura. O orçamento associado a um processo varia de acordo com seu comportamento.

Vantagens
  • Há usuários que concordam que é muito bom para transferência de dados via USB;
  • Acredita-se que seja o melhor scheduler para gravação de videos de alta definição e streaming de video;
  • É considerado um I/O scheduler acurado;
  • Atinge cerca de 30% mais rendimento.
Desvantagens
  • Não é o melhor para benchmarking;
  • Orçamento mais elevado atribuído a um processo pode afetar a interatividade e aumento da latência

CFQ

Sigla para Completely Fair Queuing, é um scheduler que mantém uma fila de E/S escalável por processo e procura distribuir o fluxo igualmente entre todas as requisições.
No Linux, o CFQ é o scheduler padrão, desde a versão do kernel 2.6.18 (setembro de 2006).

Vantagens
  • Conhecido por oferecer uma performance de E/S balanceada;
  • Mais fácil de ajustar;
  • Se destaca em sistemas multiprocessados;
  • Depois do deadline, é o melhor sistema para lidar com bancos de dados.
Desvantagens
  • Alguns usuários têm reportado que as buscas nos dispositivos de armazenamento tomam mais tempo, com o uso do CFQ – o que pode ocorrer em função do scheduler atribuir a mesma prioridade a todas as operações de E/S e, portanto, nenhuma prioridade seria concedida à buscas nas outras mídias;
  • O Jitter (pior caso de atraso) pode ser bastante alto, por causa do número de tarefas competindo pelo acesso ao disco.

SIO

Sigla que corresponde a Simple I/O scheduler. Corresponde a um perfil que tem como objetivo produzir o mínimo de sobrecarga ao sistema para manter baixo o nível de latência para servir as requisições de E/S.

Vantagens
  • Simples – confiável, portanto;
  • Um mínimo de requisições que “morrem de inanição”.
Desvantagens
  • Comparado a outros schedulers, a velocidade de leitura aleatória é baixa em drives flash;
  • A leitura sequencial em drives flash também não muito boa.

V(R)

A diferença deste schedulers para outros é que as requisições síncronas e assíncronas não são tratadas separadamente. Em vez disto, um prazo “imparcial” para sua execução é imposto. A próxima requisição a ser executada é a que estiver mais próxima.

Vantagens
  • Há casos em que é melhor para benchmarking.
Desvantagens
  • Flutuações na performance pode resultar em desempenho abaixo da média;
  • Menos confiável/Mais instável.

Na próxima página, vamos falar sobre os 2 últimos e mais usados schedulers: o Noop e o Deadline.

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

3 replies on “Como tornar o seu sistema Android mais eficiente — ajuste do I/O scheduler.”

Há uma forma de, modificando os ajustes do scheduler CFQ, torná-lo (teóricamente) parecido com o Deadline? Pois meu dispositivo não possui Deadline, e eu gostaria de performance extra em games pesados.

Micro SD UHS-1 e pro armazenamento interno (flash)

Boa noite, parabéns! suas matérias estão me ajudando bastante, toda via necessito de uma opinião mais qualificada para esse assunto que é muito técnico para mim, qual desses schedulers é o melhor para se aumentar a velocidade de processamento sem consumir muita bateria?

Os Schedulers não são eficientes neste sentido.
Este é um trabalho pros governors.
A sua pergunta não é das mais fáceis de se responder, uma vez que cada governor é voltado ao perfil específico de cada usuário. Você vai ter que experimentar para saber qual o melhor pra você.
Não precisa experimentar todos. Leia as descrições de cada governor e anote aqueles que têm maior afinidade com o seu perfil. Você vai precisar usar cada um por, pelo menos, um dia inteiro, para ter a certeza de qual o melhor.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.