Contagem de tempo da CPU em sistemas HyperThreading no linux

0

Estou tentando estimar a quantidade de trabalho que um aplicativo multithread usa. Essa é uma tarefa bem simples com CPUs / núcleos reais, já que posso tirar o tempo da CPU do proc e isso será uma estimativa de quanto da CPU uma aplicação leva.

Mas e os processadores habilitados para HT? Como o tempo é contado? Se o encadeamento apenas aguardar a liberação do canal do processador no caso de uma corrida HT - será contado como tempo gasto na CPU? Ou se o segmento pudesse ter uma vantagem de 10% do HT, ele contaria 10% do tempo real de execução do processador?

    
por grandrew 11.07.2016 / 20:40

1 resposta

1

Desculpe, mas é muito não-definido.

Se você tiver HT ativado, você tem dois processadores lógicos por núcleo. Se você tiver desativado, você tem apenas um. (Isso nos permite falar sobre como o escalonador funciona sem qualificar constantemente o que entendemos por "CPU".) De qualquer maneira, um processador lógico é visto pelo SO como um processador e, exceto por algumas tentativas de agendamento de otimizações *, o SO não fazer qualquer outra coisa, por, ou por causa do hyperthreading.

A partir do momento em que um contexto LP é alternado para um thread, para o momento em que ele é alternado para outro thread, considera-se que o LP é usado 100% por esse thread. O sistema operacional não tem como saber se um segmento em um LP está usando 10% do núcleo, ou 90% do núcleo, ou está completamente parado por causa de algo que o segmento no outro LP está fazendo. O sistema operacional acha que está funcionando.

O HT também não implementa nada como prioridades de thread. Então, se dois threads estão tentando rodar nos dois LPs em um núcleo, e um está configurado no OS para uma prioridade mais alta do que o outro, o núcleo não pode fazer nada sobre isso - não há como ele saber. O núcleo tratará os dois segmentos como tendo a mesma prioridade e atribuirá recursos de microarquitetura de acordo.

* Otimizações: Os sistemas operacionais modernos estão cientes do relacionamento dos LPs com os núcleos e tentarão, por exemplo, usar apenas um LP de cada núcleo, até que mais de número_de_cores segmentos desejem executar; os dois LP de um núcleo são considerados equivalentes no que se refere ao investimento em cache; etc

    
por 12.07.2016 / 03:26