Pode ser um para o ServerFault.
Mas você está bem correto. O Fibre Channel não possui os mesmos mecanismos de proteção que o TCP. É mais parecido com o UDP a esse respeito (embora seja uma analogia fraca) e por muitas das mesmas razões - para algumas aplicações, o TCP é uma má solução devido a esses mecanismos de confiabilidade - seu fluxo pode "parar" para retransmitir e que fere um aplicativo quase em tempo real mais do que um pacote descartado faz. A latência de IO de armazenamento começa a "doer" quando você é mais do que cerca de 20 ms, e isso não é tempo suficiente para o TCP fazer isso realmente.
O que acontece para o FCP é que o driver SCSI no nó de extremidade lida com a confiabilidade, porque, como parte disso, também pode fazer o balanceamento de carga. Geralmente, você não anexará uma fibra única, mas terá HBAs duplos com dois caminhos independentes para armazenamento.
Portanto, o seu driver roteia os pacotes da maneira que preferir (alguns são mais inteligentes do que outros - a maioria faz vários caminhos nos dias de hoje, mas alguns fazem alguns caminhos múltiplos adaptáveis) e rastreia quais IOs foram reconhecidos ou não. O SO pode enfileirar IO quando apropriado, ou ... bem, não, se achar que é uma má ideia. Na prática, isso é feito de qualquer maneira como parte dos mecanismos de cache do sistema de arquivos de rotina. É por isso que, por exemplo, open
tem a opção O_DIRECT
:
O_DIRECT (since Linux 2.4.10) Try to minimize cache effects of the I/O to and from this file. In general this will degrade performance, but it is useful in special situations, such as when applications do their own caching. File I/O is done directly to/from user- space buffers. The O_DIRECT flag on its own makes an effort to transfer data synchronously, but does not give the guarantees of the O_SYNC flag that data and necessary metadata are transferred. To guarantee synchronous I/O, O_SYNC must be used in addition to O_DIRECT. See NOTES below for further discussion.