Você descarta as especulações usando a função discard() . Quando um buffer especulativo é descartado, seu conteúdo é jogado fora. Se a especulação estiver ativa apenas na CPU que chama discard(), o buffer será imediatamente disponibilizado para chamadas subseqüentes a speculation (). Se a especulação estiver ativa em mais de uma CPU, o buffer descartado será disponibilizado para a speculation() subseqüente algum tempo depois da chamada a discard(). O tempo entre uma discard() em uma CPU e o buffer que está sendo disponibilizado para especulações subseqüentes é garantidamente mais curto que o tempo definido pela taxa de limpeza. Se, na hora em que speculation () for chamada, não houver nenhum buffer disponível porque todos os buffers especulativos estão sendo descartados no momento ou comprometidos, será gerada uma mensagem do dtrace semelhante ao exemplo seguinte:
dtrace: 905 failed speculations (available buffer(s) still busy) |
A probabilidade de todos os buffers estarem indisponíveis pode ser reduzida, através do ajuste do número de buffers de especulação ou a taxa de limpeza. Consulte Opções e ajuste de especulação para obter detalhes.