O que é compartilhamento falso?
O compartilhamento falso é uma situação que pode ocorrer em um programa de computador quando dois aplicativos em execução simultaneamente tentam acessar informações na mesma região de memória lógica que cada programa ou processo armazenou em seu próprio cache. Os dados no cache de cada aplicativo são copiados de uma fonte comum; portanto, a modificação de um cache faz com que o outro seja recarregado da fonte. O aspecto falso do compartilhamento surge quando as alterações feitas na linha de cache por um programa não afetam realmente os dados que o segundo programa está usando; nesse caso, forçar o recarregamento do cache é um desperdício de recursos do sistema e pode afetar negativamente o desempenho do programa. O problema do compartilhamento falso é difícil de detectar, porque não é um resultado direto de nenhum código contido nos aplicativos, embora existam maneiras eficazes de impedir o compartilhamento falso, como mover dados que estão em uma linha atualmente em cache para uma linha separada .
Um dos principais motivos pelos quais o compartilhamento falso pode ocorrer está na maneira como um sistema operacional ou hardware lida com a leitura e gravação de dados. Quando as informações de um disco rígido ou de outra fonte estão sendo lidas ou gravadas por um programa, elas geralmente são carregadas em um cache temporário para que possam ser acessadas rapidamente. A quantidade de informações armazenadas em cache do local de origem é chamada de linha de cache e é um bloco lógico de memória que normalmente pode ter entre 2 e 256 bytes de comprimento. Sob alguns sistemas operacionais ou arquiteturas de sistema, os programas podem ser executados ao mesmo tempo, como no processamento paralelo. Isso significa que é possível que dois programas separados tentem acessar informações na mesma linha de cache, para que cada programa tenha sua própria cópia dos dados de origem, potencialmente fazendo com que as alterações em um cache não sejam refletidas no outro cache, invalidando o dados que ele contém.
Existem vários mecanismos empregados para lidar com a situação quando dois programas tentam acessar a mesma linha de cache, mas o resultado é que um programa é forçado a recarregar seu cache com as informações atualizadas que o outro programa modificou. Esse tipo de incidente é conhecido como compartilhamento falso quando os dados na linha de cache que cada programa está acessando não estão relacionados, portanto, forçar um programa a recarregar o cache é um desperdício de poder de processamento e outros recursos. Isso geralmente é um problema para um programa que nunca modifica as informações em seu cache, portanto não há risco de a aplicação substituir as alterações que o outro processo fez.
Existem duas maneiras predominantes de prevenir ou atenuar os efeitos do compartilhamento falso. O primeiro é adicionar informações em branco antes ou depois dos dados na memória, forçando-os essencialmente a uma linha de cache separada que não está sendo acessada por outro programa. O segundo método é restringir a frequência de leitura e gravação na linha de cache para que ela seja recarregada o menos possível. Soluções mais complexas envolvem gerenciamento no nível do cache ou até alterações na maneira como um sistema operacional lida com o compartilhamento.