Em primeiro lugar, desculpe por postar uma pergunta de estudo óbvia. Eu sei que isso é um mau hábito, mas espero ainda conseguir ajuda aqui, porque fiz muitas pesquisas e não consegui encontrar nenhuma resposta para isso.
Ocenárioé assim: Um NFS-Client grava um único arquivo com 50GB no NFS-Server. Depois de gravar 4 GB com uma velocidade média de 125 MByte/s, ela cai para 12 MByte/s.
Pergunta: Como você pode explicar isso.
Odadorespondera pergunta é esta: Após 4GB de gravação o Servidor não responde ao COMMIT e o Cliente envia periodicamente COMMIT's até que o Servidor responda, pois o cliente deseja esvaziar seu cache. Nesse período, a taxa de dados cai para o nível do elemento mais lento.
Tudo o que posso encontrar sobre o processo COMMIT é uma explicação como esta:
O cliente grava os dados e quando os dados são transferidos para o Servidor, o Cliente envia o COMMIT. O servidor grava os dados no armazenamento estável e responde ao COMMIT com o verf-Cookie. Se o cookie NÃO for diferente do cookie do cliente, o cliente poderá esvaziar seu cache.
Então aqui estáminha pergunta: É verdade que se o servidor não responder ao procedimento COMMIT enviando o cookie verf, o cliente envia COMMIT periodicamente e a taxa de dados cai significativamente? Se sim, até que nível a taxa de dados cai. Não consigo concluir da resposta até que nível a taxa de dados cai.
Responder1
Acho que está acontecendo o seguinte:
Os dados enviados pelo cliente são gravados no cache FS no lado do servidor. Depois que a solicitação COMMIT é enviada, esses dados começam a ser descarregados para o armazenamento persistente (DISK). Dependendo do desempenho do disco do servidor, isso pode levar algum tempo. Digamos que o desempenho do disco seja de 300 MB/s. Para liberar 4 GB, serão necessários 13 segundos. Se esse tempo for maior que o tempo limite do NFS, o cliente poderá enviar outra solicitação COMMIT, assumindo que a primeira será perdida. O verificador COMMIT/WRITE é usado para garantir que o servidor não seja reinicializado entre essas operações.
Nesse cenário, você pode fazer:
- aumente o tempo limite do NFS no cliente especificandotempo =opção de montagem. Embora isso só váconsertartentei novamente COMMITs.
- diga ao servidor para iniciar a liberação dos dados com antecedência suficiente e evitar atrasos no log.
usar
sysctl -w vm.dirty_background_ratio=0
sysctl -w vm.dirty_ratio=0
sysctl -w vm.dirty_background_bytes=67108864
sysctl -w vm.dirty_bytes=536870912
Os tamanhos devem ser ajustados de acordo com o desempenho de E/S do servidor e da rede.
Para controlar quando o kernel começa a liberar dados para o disco no servidor e envia para o servidor no lado do cliente.
NOTA: estas opções são globais e afetarão todos os sistemas de arquivos.