Guia de rastreamento dinâmico Solaris

Comprometendo uma especulação

Você compromete as especulações usando a função commit. () Quando um buffer especulativo é comprometido, seus dados são copiados para o buffer principal. Se houver mais dados no buffer especulativo especificado do que o espaço disponível no buffer principal, nenhum dado será copiado e a contagem de soltar do buffer será incrementada. Se o buffer tiver sido rastreado especulativamente para mais de uma CPU, os dados especulativos da CPU comprometida serão copiados imediatamente, enquanto os dados especulativos em outras CPUs serão copiados algum tempo depois de commit(). Portanto, algum tempo pode passar entre uma commit() iniciando em uma CPU e os dados sendo copiados dos buffers especulativos para os buffers principais em todas as CPUs. Esse tempo não pode ser mais longo do que o tempo determinado pela taxa de limpeza. Consulte Opções e ajuste de especulação para obter mais detalhes.

Um buffer especulativo de comprometimento pode não estar disponível para chamadas de speculation() subseqüentes, até que cada buffer especulativo por CPU tenha sido completamente copiado para seu buffer principal por CPU correspondente. Semelhantemente, as chamadas subseqüentes a speculate() para o buffer de comprometimento serão silenciosamente descartadas, e as chamadas subseqüentes para commit() ou discard() falharão silenciosamente. Finalmente, uma cláusula contendo uma commit() não pode conter uma ação de gravação de dados, mas uma cláusula pode conter várias chamadas commit() para comprometer os buffers de deslocamento.