6.4.3. Noop

O agendador Noop E/S implementa algorítimos simples de First-in-first-out (FIFO). A mesclagem de requisições acontece em uma camada de bloco genérica mas é um cache simples de último toque. Se um sistema é limitado à CPU e o armazenamento é rápido, este agendador de E/S pode ser o melhor a utilizar.
Segue abaixo ajustes disponíveis para a camada de bloco.

/sys/block/sdX/queue tunables

add_random
Em alguns casos, o cabeçalho de eventos de E/S que contribuem para o pool de entropia para /dev/random é mensurável. Em alguns casos, pode ser melhor ajustar este valor para 0.
max_sectors_kb
Por padrão, o tamanho máximo de requisição para disco é de 512 KB. Este ajuste pode ser utilizado tanto para aumentar ou diminuir o valor. O valor mínimo é limitado por tamanho de bloco lógico; o valor máximo é limitado pelo max_hw_sectors_kb. Existem alguns SSDs que possuem um pior desempenho quando os tamanhos de E/S excedem o tamanho de bloco de remoção interno. Em alguns casos recomendamos ajustar o max_hw_sectors_kb para baixo para apagar o tamanho do bloco. Você pode testar isto utilizando um gerador de E/S tal como o iozone ou aio-stress, variando o tamanho de histórico, por exemplo, de 512 bytes para 1 MB.
nomerges
Este ajuste é inicialmente um assistente de depuração. A maioria de cargas de trabalhos de mesclagem de requisição (até mesmo em armazenamento mais rápido tal como SSDs). Em alguns casos, no entanto, deseja-se desabilitar a mesclagem, tal como quando você vê quantos IOPS um backend de armazenamento pode processar sem desabilitar o cabeçalho de leitura ou realizando uma E/S aleatória.
nr_requests
Cada fila de requisição tem um limiete no número total de descritores de requisição que pode ser alocado para cada uma das E/Ss das leituras e gravações. Por padrão, o número é 128, o que significa 128 leituras e 128 gravações que podem ser enfileiradas uma por vez antes de colocar um processo em inativo. O processo inativo é o próximo a tentar alocar uma requisição, não necessariamente o processo que tenha alocado todas as requisições disponíveis.
Se você possui aplicativo de latência sensível, você deve considerar diminuir o valor do nr_requests em sua fila de requisições e limitar a profundidade da fila de comando no armazenamento para um número mais baixo (até mesmo tão baixo quanto 1), para que a E/S writeback não possa alocar todos os descritores de requisições disponíveis e preencher a fila de dispositivo com uma E/S de gravação. Uma vez que o nr_requests tenha sido alocado, todos os outros processos que estão tentando realizar uma E/S serão transformados em inativos para esperar por requisições a ficarem disponíveis. Isto torna as coisas mais justas, pois as requisições são então distribuídas em uma moda de repetição alternada (ao invés de deixar um processo consumí-los todos em sucessão rápida). Note que este é o único problema ao utilizar a data limite ou agendadores de noop, pois a configuração CFQ padrão protege contra esta situação.
optimal_io_size
Em algumas circunstâncias o armazenamento adjacente irá reportar um tamanho de E/S adequado. Isto é mais comum em hardware e software RAID, onde o tamanho da E/S adequada é o tamanho da faixa. Se este valor é reportado, os aplicativos devem emitir uma E/S alinhada e em múltiplos do tamanho de E/S adequado sempre que possível.
read_ahead_kb
O sistema operacional pode detectar quando um aplicativo está lendo dados seqüencialmente de um arquivo ou de disco. Nesses casos, ele executa um algoritmo inteligente de leitura antecipado, em que mais dados do que é solicitado pelo usuário é lido a partir do disco. Assim, nas próximas tentativas do usuário de ler um bloco de dados, ele já o fará no cache da página do sistema operacional. A desvantagem é que o sistema operacional pode ler mais dados do disco do que o necessário, o que ocupa espaço no cache de página até que ele seja expulso por causa da alta pressão de memória. Depois de vários processos realizando leituras falsas futuras, aumentaria a pressão de memória nesta circunstância.
Para os dispositivos de mapeador, recomenda-se aumentar o valor do read_ahead_kb para um número maior, tal como 8192. A razão é que um mapeador de dispositivo é geralmente criado de dispositivos adjacentes múltiplos. Configurar este valor para um padrão (128 KB) multiplicado pelo número de dispositivos que você está mapeando é um bom começo para ajuste.
rotational
Discos rígidos tradicionais são rotacionais (feitos de discos rodopiantes). Os SSDs no entanto, não. A maioria de SSDs promoverão isto adequadamente. Se, no entanto, você encontar um dispositivo que não promova esta bandeira adequadamente, pode ser necessário configurar o rotacional para 0 manualmente; quando o rotacional estiver desabilitado, o elevador de E/S não usará lógica, que significa reduzir buscas, uma vez que existe pouca penalidade para busca de operações em mídia não rotacional.
rq_affinity
Conclusões de E/S podem ser processadas em uma CPU diferente daquela que emitiu a E/S. Configurar o rq_affinity para 1 faz com que o kernel entregue conclusões para a CPU na qual a E/S foi emitida. Isto pode aprimorar a efetividade do cache de dados de CPU.