Existe uma interface mais rápida para informações de / proc / net / tcp?

7

Dado um inode do socket TCP do linux (obtido via /proc/<pid>/fd ), existe uma maneira mais rápida de procurar as informações que eu posso obter de /proc/net/tcp sobre este socket?

Eu escrevi uma ferramenta de solução de problemas que monitora processos e imprime informações em tempo real sobre operações IO ( strace -type informações coletadas em abstrações de nível superior e apresentadas de uma maneira menos crua), mas em um servidor de rede altamente carregado, achando que o tempo que leva para procurar informações de socket (por exemplo, o endereço / porta estrangeira) é proibitivo simplesmente devido ao tamanho muito grande de /proc/net/tcp (cerca de 2 MB no servidor que estou vendo no momento).

Eu posso gerenciar isso com cache, mas isso necessariamente introduz latência e me faz pensar sobre o absurdo de uma "API" que requer leitura e análise de 2 MB de texto ASCII para encontrar informações em um soquete.

    
por ntnt 15.11.2012 / 01:30

2 respostas

3

Aqui está um link para libnetfilter_conntrack . Você teria que reescrever seu programa em uma linguagem que possa suportar a chamada de funções C diretamente de uma biblioteca. Mas eu acho que esta biblioteca terá os ganchos que você precisa para obter os dados que você quer muito mais rápido do que analisar através desse arquivo de texto.

Isso é o que o programa iptstate usa para realizar sua tarefa.

    
por 15.11.2012 / 05:00
3

Netlink. Olhe para o comando ss da coleção iproute2 .

Aqui é a base de código para iproute2 e ss é descrito < href="http://man7.org/linux/man-pages/man8/ss.8.html"> aqui .

    
por 20.06.2013 / 09:11