Spinlock e Hyper-Thread
Algo curioso que estive vendo hoje..
Encontrei um disassembly do SQL Server rodando na minha máquina com o código do Spinlock (em vermelho):
sqlservr!Spinlock<60,7,0>::SpinToAcquireOptimistic+0x3d: 00000000`01aca459 33c9 xor ecx,ecx 00000000`01aca45b 85db test ebx,ebx 00000000`01aca45d 7412 je 00000000`01aca471 00000000`01aca45f 8b07 mov eax,dword ptr [rdi] 00000000`01aca461 85c0 test eax,eax 00000000`01aca463 7407 je 00000000`01aca46c 00000000`01aca465 90 nop 00000000`01aca466 03cd add ecx,ebp 00000000`01aca468 3bcb cmp ecx,ebx 00000000`01aca46a 72f3 jb 00000000`01aca45f 00000000`01aca46c 4c8b442438 mov r8,qword ptr [rsp+38h]
Um comentário curioso: a instrução NOP no endereço 01aca465 não realiza nada, mas permite que processadores com Hyper-Threading façam a mudança de contexto para o próximo processador lógico. Esse comportamento torna a função “Hyper-Threading Friendly” e economiza energia!
Comments
Anonymous
August 03, 2010
Muito interessante. Isso mostra que o processador possui varios nucleos.Anonymous
August 05, 2010
Exatamente, Pedro... É a prova cabal de que o processador dele é dotado de varios nucleos!Anonymous
August 07, 2010
Pedro, Joao A operador NOP não tem nenhuma relação com processadores multi-cores o mesmo está presente em quase todos os códigos de aplicativos bem mais simples. Posso afirmar que o NOP seria equivalente a seguinte instrução:XCHG EAX, EAX que é a mesma coisa dessa outra:
MOV X0, X0 Ou seja, não faz realmente nada só consome ciclos de CPU. Esse comportamento na arquitetura IA-32 pode resultar em mudança de contexto para outro processador virtual. claro, isso só vai acontecer se o kernel windows identificar mais de um processador então adicionando na lista dos recursos virtuais disponiveis para aplicações. Isso vale para processadores com single-cores, HyperThreading e multi-cores. obs.: Dependendo da arquitetura da CPU podemos utilizar o NOP para outras necessidades em desenvolvimento de aplicações. Leivio Fontenele www.dbaninja.com
Anonymous
August 09, 2010
Oi Leivio! O interessante é que o NOP não é exatamente um "faz nada"... mas, segundo o manual da Intel, esse inocente comando sinaliza o processador que é possível fazer o context switch da thread para o próximo processador lógico. Em um computador single-core, esse comando não faz absolutamente nada. Se o computador suportar o hyper-threading, ele sinaliza a possibilidade de fazer a mudança de contexto! De acordo que isso não prova que o processador tem vários núcleos - na verdade, apenas mostra que esse comando é backward compatible. Abraços, FabricioAnonymous
August 09, 2010
Mas enfim, NOP é tradicionalmente o FAZ NADA e equivalente ao XCHG EAX, EAX ou MOV EAX, EAX.Anonymous
August 11, 2010
Catae, Isso mesmo!. Como falei "Dependendo da arquitetura da CPU podemos utilizar o NOP para outras necessidades em desenvolvimento de aplicações. ". Em processadores Intel temos essa caracteristicas, pois somente a intel possui a tecnologia hyper-threading. Leivio Fontenele - dbaninja.comAnonymous
August 11, 2010
É verdade! Não sabia que o hyper-threading era exclusiva da Intel. Achei que houvesse outro mecanismo semelhante da AMD. Será que a AMD não acredita no HT?Anonymous
August 12, 2010
Fabricio, Complementando.... na arquitetura CISC somente a Intel temimplementa a tecnologia multi-thread por core. Ja na arquiterura RISC quase todos os fabricantes tem a tecnologia multi-thread por core ex: POWER7, T2 da SUN e a propria Intel com Itanium. Acredito que a AMD não acreditou em hyper-threading. mas quem sabe no futuro..: techpulse360.com/.../amd-hints-to-hyper-threading-in-2012 Agora, hyperthreding com banco de dados, eu particulamente não acredito. Pelo menos os processadores hyperthreading da arquitetura anterior da Intel. Não funcionavam bem com banco de dados pq um processador logico acabava atrapalhando o outro (cache, LPUs, etc). Ouvi falar que HT nos novos processadores funcionam muito melhor, mais ainda nao vi nenhum resultado oficial. vamos ficar no aguardo...:) Conversando com o Fabricio da equipe SQL Server SQL OS Developers sobre a melhorias em HT o mesmo recomendou que até o momento ainda existe nenhum resultado que comprove alguma melhora com os novos processadores Intel HT. Qual é a recomendação da equipe PFE Brasil quanto a SQL Server e Hyperthreding? Leivio Fontenele - dbaninja.comAnonymous
August 20, 2010
Ótimo! Acabei de usar essas informações para responder a pergunta de um cliente que estava comigo. Obrigado! A minha recomendação, em particular, é habilitar o Hyperthreading. Existem casos que o HT diminui a eficiência do cache L1/L2, mas já observei ganhos concretos de performance em duas situações reais. Depois disso, recomendo sempre deixar habilitado até que se prove o contrário. Abraços, Fabricio