A afinidade do processador não é respeitada pelos encadeamentos iperf

0

Estou executando o iperf no modo de servidor em uma caixa do Ubuntu (14.04 LTS). O hardware é quad core com hyper-threading, então eu tenho núcleos 0-7 disponíveis (0 é emparelhado com 4, 1 com 5 e assim por diante).

Eu configurei a afinidade do processador do processo iperf em execução para usar apenas processadores 0,1. Eu posso verificar isso com o taskset:

$ taskset -pc 27745
pid 27745's current affinity list: 0,1

Se eu visualizar o processo na parte superior ou htop, o processo será exibido corretamente como sempre em execução apenas em um desses núcleos. No entanto, se eu alternar para a exibição de thread, vejo os threads filhos sendo executados em núcleos arbitrários.

O top / htop me engana de alguma forma? Isso pode realmente acontecer? Se sim, por que e como evito isso?

EDITAR

Eu devo comentar que, embora eu veja isso com o iperf, não estou necessariamente sugerindo que ele seja específico do iperf. Acontece que é a configuração que tenho. Se eu não conseguir chegar ao fim disso, provavelmente vou brincar com outros executáveis e ver se o comportamento é reproduzível.

    
por Andrew Parker 18.07.2016 / 10:18

1 resposta

0

Eu cheguei ao fundo disso (mais ou menos). Foi a maneira incomum que eu estava lançando iperf de ansible. Originalmente, eu não tinha visto que o iperf tinha um modo daemon ( -D ), então eu estava iniciando manualmente o iperf com daemon . Eu esqueci sobre isso e não consegui mudar isso.

Estranhamente, se eu iniciar o iperf usando esse método, ele parece gerar imediatamente alguns encadeamentos extras. Observe que não estou falando dos processos filho que daemon precisa iniciar para separar corretamente o processo filho corretamente (ou seja, certifique-se de que ele não seja um líder de grupo de processos, filho de init etc.). O próprio processo iperf, uma vez iniciado, está iniciando alguns tópicos extras (a menos que isso realmente seja uma faceta da execução de daemon - mas eles realmente parecem ser encadeamentos de acordo com htop ).

Eu estava taskset -tingendo tanto o processo daemon quanto o processo iperf, mas acho que isso não ocorreu nos threads filhos (veja aqui uma discussão sobre isso: Definindo a afinidade do processo em execução com o conjunto de tarefas falha ). Não estou convencido de que esta é a história completa, já que não vejo o processo iperf principal sendo executado no processador correto, então algo suspeito está acontecendo. Tenho certeza que isso pode ser explicado por uma melhor investigação do comportamento de daemon , mas eu não tenho tempo para investigar isso agora, então vou deixar por aqui.

    
por 19.07.2016 / 05:06