O ossfs 2.0.9 e versões posteriores suportam gravações aleatórias com base em um diretório temporário local. Ao configurar a opção de montagem --temp_dir, o ossfs 2.0 armazena os dados gravados em um disco local, conferindo ao ponto de montagem semântica completa de gravação aleatória POSIX, como gravações em offsets arbitrários, truncamento para qualquer tamanho e leitura durante a gravação. Este tópico descreve os princípios de funcionamento, métodos de configuração, restrições de uso e recomendações para gravações aleatórias.
Informações básicas
Após a criação de um objeto no OSS, não é possível modificá-lo parcialmente. Qualquer alteração de conteúdo exige a substituição integral do objeto. No modo padrão do ossfs 2.0, o caminho de gravação utiliza upload em streaming: os dados são enviados ao OSS em partes sequenciais à medida que são gravados, o que impõe as seguintes limitações:
Suporte apenas a gravações sequenciais. Chamadas
pwriteem posições além do final do arquivo não são suportadas.A operação
truncatesuporta apenas truncamento para 0. Truncar para qualquer outro tamanho diferente de zero retornaENOTSUP.Impossibilidade de ler um arquivo durante a gravação (antes do fechamento). Essa tentativa retorna
EBUSY.
Cenários como execução de código por agentes de IA, edição de scripts no local e resultados intermediários de computação científica dependem frequentemente de semântica de gravação aleatória. O recurso de gravação aleatória do ossfs 2.0 armazena os dados gravados em um diretório temporário local e, combinado com gerenciamento de chunks e upload incremental, implementa gravações aleatórias sobre o armazenamento de objetos.
O modo de gravação aleatória do ossfs 2.0 apresenta as seguintes características:
Semântica completa de gravação aleatória POSIX: Suporta
pwriteem offsets arbitrários,O_APPENDetruncatepara qualquer tamanho (aumento ou redução).Leitura durante a gravação: Permite ler um arquivo enquanto ele está sendo gravado. As partes modificadas são lidas da área de staging local, e as partes não modificadas são lidas diretamente do OSS.
Upload incremental: Em operações de flush ou close, apenas os blocos de dados modificados são enviados do disco local. As partes inalteradas são tratadas via cópia no lado do servidor no OSS, sem I/O local e sem consumo de largura de banda de upload.
Proteção de espaço em disco: Um orçamento global de disco integrado retorna
ENOSPCpara gravações quando o disco de staging estiver com pouco espaço. Reserve um limiar de espaço livre no momento da montagem para evitar que o disco do sistema seja preenchido totalmente.
O diretório temporário local atende exclusivamente ao caminho de gravação. Ele é independente do cache de dados local (--disk_data_cache_dir, que é um cache de leitura). É possível ativar ambos simultaneamente (usando diretórios diferentes) sem qualquer interferência entre eles.
Por padrão, o ossfs 1.0 usa o diretório /tmp como diretório temporário local. Para manter o caminho consistente com o padrão do ossfs 1.0, configure --temp_dir=/tmp.
Após ativar as gravações aleatórias, o desempenho de gravação fica limitado pelo desempenho de leitura/gravação do disco onde reside o diretório temporário local. Em cenários que envolvem gravações sequenciais em massa, como cópia de arquivos grandes, o desempenho é significativamente inferior ao do modo padrão. Ative este recurso apenas quando sua carga de trabalho realmente exigir semântica de gravação aleatória.
Princípios de funcionamento
Staging local e upload mesclado
Ao ativar as gravações aleatórias, o ossfs 2.0 cria um arquivo de staging no diretório temporário local para cada arquivo submetido a gravação aleatória, salvando as modificações mais recentes localmente com granularidade fixa de bloco de dados (chunk):
Os dados gravados vão diretamente para o arquivo de staging local. Se uma gravação sobrepor apenas parcialmente um bloco de dados que já existe na cloud, o ossfs busca primeiro esse bloco no OSS para garantir que os dados armazenados localmente estejam completos.
Em chamadas de
fsyncouclose, as modificações em staging local são automaticamente mescladas e enviadas junto com os dados na cloud: as partes modificadas são carregadas do disco local, e as partes não modificadas são tratadas via cópia no lado do servidor no OSS, sem retransmitir todo o arquivo ou consumir largura de banda de leitura do disco local.Após um upload bem-sucedido, o espaço em disco de staging é liberado automaticamente.
Leitura durante a gravação
Também é possível ler um arquivo enquanto ele está sendo gravado: as partes modificadas são lidas da área de staging local, e as partes não modificadas são lidas diretamente do OSS.
Proteção de espaço em disco
No momento da montagem, o ossfs verifica se o espaço livre no disco onde reside o diretório temporário atende ao requisito reservado e rejeita a montagem caso contrário. Se o espaço em disco reservado for insuficiente, as gravações retornam ENOSPC em vez de causar falha no processo devido a disco cheio.
Métodos de configuração
|
Item de configuração |
Obrigatório |
Descrição |
Valor padrão |
|
temp_dir |
Não |
Caminho do diretório temporário local. Deve ser um caminho absoluto. Definir um valor não vazio ativa as gravações aleatórias. Deixe vazio para desativar este recurso. |
Vazio |
|
temp_dir_free_bytes |
Não |
Espaço mínimo livre em disco reservado no disco onde reside o diretório temporário, em bytes (suporta unidades como K, M e G). O ossfs2 não usará esse espaço reservado para dados de staging: quando o espaço livre em disco cair abaixo desse limiar, novas gravações retornarão ENOSPC, deixando uma margem de segurança para outras cargas de trabalho no mesmo disco. Se o espaço livre em disco já estiver abaixo desse valor no momento da montagem, a montagem falhará. Valor mínimo: 64 MiB. |
1 GiB |
|
random_write_max_file_size |
Não |
Tamanho lógico máximo de um único arquivo no modo de gravação aleatória, em bytes (suporta unidades como K, M e G). Gravações ou truncamentos que excederem esse limite retornam EFBIG. O limite físico superior é a capacidade de upload multipart do OSS (10.000 partes × 5 GiB, aproximadamente 48,8 TiB). |
100 GiB |
Restrições:
Se o diretório apontado por
--temp_dirnão existir, ele será criado automaticamente. Recomendamos usar uma partição ou disco independente para evitar disputa de espaço com o disco do sistema ou outras cargas de trabalho.Os dados dos arquivos em gravação são armazenados no diretório temporário local. Se o disco não tiver capacidade suficiente, as gravações retornam ENOSPC. O espaço livre restante em disco menos o espaço reservado por
temp_dir_free_bytesé denominado espaço em disco gravável. O ossfs2 usa apenas essa porção de espaço para armazenar dados em gravação. O espaço em disco gravável deve ser maior que o tamanho total de todos os arquivos sendo gravados simultaneamente (no pior caso, um arquivo inteiro pode ser gravado localmente).Quando várias instâncias do ossfs2 são montadas na mesma máquina, elas podem compartilhar o mesmo diretório temporário, pois os nomes dos arquivos de staging não colidem. No entanto, múltiplas instâncias disputarão o espaço e o I/O do disco, portanto recomendamos o uso de diretórios independentes.
As opções
--temp_dire--enable_appendable_objectsão mutuamente exclusivas e não podem ser ativadas simultaneamente.
Exemplo de comando de montagem:
ossfs2 mount /mnt/oss/ \
--oss_bucket <your-bucket> \
--oss_endpoint <your-endpoint> \
--oss_access_key_id <ak> \
--oss_access_key_secret <sk> \
--temp_dir /mnt/disk/ossfs2/temp \
--temp_dir_free_bytes 1G
Requisitos de ambiente
|
Parâmetro |
Requisito |
|
Tipo de disco do diretório temporário |
Recomenda-se disco efêmero elástico, NVMe local ou ESSD. O throughput de gravação do disco afeta diretamente a latência de gravação aleatória e a velocidade de upload. |
|
Espaço disponível em disco |
Não inferior a |
Efeitos do recurso
Comparação das capacidades de gravação antes e depois de ativar --temp_dir:
|
Operação |
Modo padrão |
Modo de gravação aleatória |
|
Gravação sequencial por acréscimo |
Suportada |
Suportada |
|
pwrite em offset arbitrário (além do final do arquivo) |
Não suportada |
Suportada |
|
truncate para 0 |
Suportada |
Suportada |
|
truncate para qualquer tamanho (aumento ou redução) |
Não suportada (ENOTSUP) |
Suportada |
|
Gravação O_APPEND em arquivo existente |
Suportada |
Suportada |
|
Leitura de arquivo durante a gravação |
Não suportada (EBUSY) |
Suportada |
|
Múltiplos handles gravando no mesmo arquivo simultaneamente |
Não suportada |
Suportada |
Semântica de durabilidade:
Por padrão, o modo de gravação aleatória segue a semântica de
fsync:fsyncdispara um upload mesclado das modificações locais com os dados na cloud. Um retorno bem-sucedido significa que os dados foram persistidos no OSS. Os dados restantes também são enviados quando o arquivo é fechado.Uma falha de upload é retornada à aplicação como erro, e a aplicação pode tentar novamente via
fsync. Se o upload falhar definitivamente e o arquivo for fechado, os dados não persistidos são perdidos, e o conteúdo do arquivo reverte para a última versão enviada com sucesso no lado remoto.Se o processo encerrar anormalmente, os dados em staging não enviados são perdidos, mas o objeto no OSS permanece no estado do último upload bem-sucedido. Nenhum objeto corrompido é gerado.
Recomendações de uso
Gravações aleatórias baseadas em um diretório temporário local são adequadas para cenários que exigem semântica de gravação semelhante à de um sistema de arquivos local em um ponto de montagem OSS.
Cenários adequados para ativar gravações aleatórias:
|
Cenário |
Recomendação de uso |
|
Execução de código por agentes de IA / ambientes sandbox (agentes e interpretadores de código realizam leituras e gravações arbitrárias e edições no local em arquivos) |
Ative as gravações aleatórias. Recomendamos usar um disco independente e de alto desempenho para o diretório temporário, e reservar espaço em disco gravável com base no tamanho total dos arquivos sendo gravados simultaneamente. |
|
Arquivos de resultados intermediários de computação científica ou aplicações de simulação |
Ative as gravações aleatórias. Planeje o espaço em disco gravável com base no tamanho total dos arquivos sendo gravados simultaneamente. |
Cenários onde não se recomenda ativar gravações aleatórias:
|
Cenário |
Recomendação de uso |
|
Cópia de arquivos grandes (gravações em massa no ponto de montagem usando cp, rsync e ferramentas similares) |
Neste cenário, o desempenho de gravação é limitado pelo disco local e é muito inferior ao do modo padrão. Use o modo padrão de upload em streaming. |
|
Gravações puramente sequenciais por acréscimo (gravação de logs em streaming) |
O caminho padrão de upload em streaming tem menor sobrecarga, tornando desnecessário ativar gravações aleatórias. Se for necessária leitura durante a gravação, considere usar |
Recomendações de orçamento de disco:
Mantenha o diretório temporário separado do disco do sistema para evitar que os dados de staging preencham o disco do sistema e afetem a estabilidade do host. Se a máquina possuir apenas um disco, recomendamos definir
temp_dir_free_bytescom um valor maior (por exemplo, 10G) para reservar espaço livre suficiente para o sistema.O espaço em disco gravável (consulte as restrições acima) deve ser maior que o tamanho total dos arquivos sendo gravados simultaneamente.
Para um único arquivo maior que 100 GiB, além de aumentar explicitamente
--random_write_max_file_size(por exemplo,--random_write_max_file_size=500G), garanta que o espaço em disco gravável exceda o tamanho desse arquivo.