Considerações de desempenho para NTFS transacional
O TxFS (NTFS transacional) foi cuidadosamente projetado para desempenho e normalmente terá um desempenho melhor do que as alternativas transacionais de uso geral em cenários semelhantes. No entanto, as transações do sistema de arquivos têm mais sobrecarga do que as operações não transacionadas e alguma redução no desempenho de E/S em comparação com a E/S não transacionada é esperada. Os aplicativos críticos ao desempenho devem executar um ciclo de qualificação de adoção de tecnologia, avaliando o impacto no desempenho das operações do sistema de arquivos transacionadas.
Visão geral das operações TxF
O TxF usa o log de desfazer para registrar as alterações necessárias para colocar o sistema de arquivos de volta em um estado consistente, também conhecido como reversão, caso ocorra uma anulação da transação. Esse log de desfazer gera E/S adicional e é a origem da sobrecarga de desempenho do TxF em comparação com operações do sistema de arquivos não transacionais.
Um resumo de alto nível de como o TxF opera é o seguinte:
- À medida que uma transação progride, o TxF grava registros desfazer em seu arquivo de log para cada modificação feita no sistema de arquivos. Se ocorrer uma anulação, esses registros de desfazer serão analisados para colocar o sistema de arquivos de volta no estado em que estava antes do início da transação.
- Um registro de desfazer alteração de metadados descreve uma alteração somente nos metadados do sistema de arquivos. Alguns exemplos disso são movimentações, renomeações, acréscimos e alterações de atributo. Para registros de desfazer alteração de metadados, todas as informações necessárias para desfazer a alteração estão no registro e armazenadas no arquivo de log.
- Um registro de desfazer de substituição descreve uma substituição de uma parte de um arquivo. Quando ocorre uma substituição de arquivo, o conteúdo original do arquivo é armazenado em um arquivo de desfazer especial em um diretório oculto e o registro de desfazer substituição aponta para esse arquivo. Quando as atualizações de arquivo são eventualmente liberadas do cache para o disco, o conteúdo do arquivo de desfazer também deve ser liberado, para que uma substituição de arquivo transacionada possa gerar até duas operações de E/S aleatórias extras: uma para ler os dados antigos e outra para gravá-los no arquivo desfazer. Essas operações de E/S extras são um custo de desempenho do TxF.
- Quando ocorre uma confirmação, o TxF primeiro libera todas as informações de desfazer, libera as alterações reais do arquivo e grava e libera um registro de confirmação. Se não houver arquivos de desfazer a liberação, a única sobrecarga adicional de TxF em relação à E/S não transacionada será a liberação de log em si. No entanto, as liberações de log resultam em gravações sequenciais grandes e eficientes para que o custo de desempenho seja mínimo.
- O TxF é otimizado para confirmação. Espera-se que a maioria das transações tenha êxito e não precise reverter, portanto, todos os registros de desfazer para uma transação devem ficar não utilizados. Do ponto de vista do desempenho, as operações de confirmação do TxF são rápidas e as reversões fazem uso intensivo de recursos.
- A reversão é mais intensiva em recursos do que a confirmação. Durante a reversão, todas as alterações feitas na transação precisam ser desfeitos. Em geral, a duração da reversão pode ser aproximadamente a mesma que levou para fazer as alterações originalmente. Por exemplo, se levou 1 segundo para fazer todas as alterações, pode levar cerca de 1 segundo para desfazê-las. Para transações muito longas, a reversão pode criar impactos adicionais no desempenho. Por exemplo, o tempo de inicialização do sistema poderá ser atrasado se o sistema precisar reverter automaticamente uma transação caso o sistema pare de responder e precise executar uma reinicialização não agendada.
As conclusões resumidas sobre o desempenho que podem ser obtidas da lista anterior são as seguintes:
- O custo de desempenho do TxF para transações que envolvem substituições de arquivo pode ser significativo.
- O custo de desempenho do TxF para transações que envolvem apenas operações de metadados pode ser relativamente baixo, desde que transações grandes sejam usadas. Uma transação grande é quando há muitos registros de desfazer para cada registro de confirmação.
Recomendações para melhor desempenho
Amortize a sobrecarga de TxF em transações maiores. Por exemplo, se você tiver N conjuntos de alterações para fazer onde cada alteração tem etapas M e você tiver a opção de fazer isso como N transações de etapas M cada uma ou fazer tudo isso como uma única transação com etapas M*N , a última opção seria mais eficiente.
Considere o possível impacto na inicialização de transações muito grandes. Conforme mencionado anteriormente, a reversão pode ser lenta e atrasará o tempo de inicialização se o sistema precisar executar reversões automáticas como tempo de inicialização. Quanto maior a transação, maior o atraso.
Mantenha as transações em operações de metadados principalmente. É para isso que o TxF é otimizado e, em geral, o desempenho é quase o mesmo que e/S de arquivo não transacionado para transações de metadados grandes. Exemplos de funções TxF de metadados eficientes são MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted e gravações acrescentadas (chamadas para a função WriteFile quando o ponteiro do arquivo como no final do arquivo ou EOF). Um exemplo de operações de não metadados com uso intensivo de recursos são chamadas para a função WriteFile quando o ponteiro do arquivo não está no EOF.
Resumo das expectativas de desempenho do TxF
Para atualizações in-loco, as substituições em uma seção de um arquivo serão muito mais lentas do que a E/S de arquivo não transacionada, enquanto o desempenho do TxF para operações de metadados do sistema de arquivos (por exemplo, criar, mover e acrescentar) é comparável à E/S de arquivo não transacionado para transações grandes.