monitoramento de baixa sobrecarga de I / O no Windows

votos
3

Gostaria de um método de baixo sobrecarga de monitorar a I / O de um processo do Windows.

Eu tenho várias respostas úteis para Monitoramento certas chamadas de sistema feitas por um processo no Windows . O mais promissor estava prestes a utilizar o Windows Performance Toolkit para obter um rastreamento de eventos kernel. Todas as informações necessárias podem realmente ser puxado de lá, mas o WPT é um exagero enorme para o que eu preciso e, posteriormente, tem uma sobrecarga proibitivo.

Minha idéia era implementar uma abordagem alternativa para a detecção de C / C ++ gráficos de dependência. Geralmente isso é feito passando uma opção para o compilador (-M, por exemplo). Isso funciona bem para compiladores e ferramentas que têm essa opção, mas nem todos eles fazem, e aqueles que muitas vezes implementá-los de forma diferente. Então, eu implementada uma forma alternativa de fazer isso no Linux usando strace para detectar quais arquivos são abertos. Correndo gcc (por exemplo), desta forma tem uma sobrecarga de 50% (valor aproximado), e eu estava esperando para descobrir uma maneira de fazer isso no Windows com uma sobrecarga similarish.

O conjunto XPerf de ferramentas tem duas questões que me impede de usá-los neste caso:

  • Não há nenhuma maneira de monitorar eventos arquivo-I / O para um único processo; Eu tenho que usar o rastreamento de eventos do kernel que traça cada processo e, portanto, gera enormes quantidades de dados (15Mb para o tempo que leva para executar gcc, YMMV).
  • Como resultado de ter que usar o rastreamento de eventos do kernel, eu tenho que correr como administrador.

Eu realmente não precisa de eventos no nível do kernel; Acho que eu poderia gerir tão bem se eu pudesse monitorar, dizer, o CreateFile chamada de API Win32 (), e, possivelmente, CreateProcess () se eu quiser pegar processos bifurcados.

Todas as idéias inteligentes?

Publicado 19/05/2009 em 17:55
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

Use enganchando API. Enganchando NtCreateFile e algumas outras chamadas em ntdll deve ser suficiente. Eu tive uma boa experiência usando easyhook como uma estrutura para fazer a ligar-se - livre e open source. Mesmo suporta conseguiu ligar (c # etc) se você quisesse fazer isso. É muito fácil de configurar.

É na localizado na http://easyhook.codeplex.com

Edit: btw desvios não permite que 64 bits de engate (a menos que você comprar uma licença para um preço nominal de 10,000USD) não EasyHook não permite ganchos nativas em um limite de WOW64. Ele permite conseguiu ligar através de fronteiras WOW64 embora.

Respondeu 19/05/2009 em 18:05
fonte usuário

votos
0

Parece que o Dr. Memória do Sistema de chamadas Tracer para Windows é exatamente o que eu estava procurando. É basicamente uma straceaplicação para Windows.

Respondeu 03/04/2014 em 17:02
fonte usuário

votos
0

Eu costumava da Microsoft Detours no passado para controlar as alocações de memória, interceptando chamadas de API particulares. Você poderia usá-lo para rastrear CreateFile e CreateProcess.

Respondeu 19/05/2009 em 18:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more