como definir mmap para melhor desempenho do soquete bruto

1
req.tp_block_size=96;
req.tp_frame_size=96;
req.tp_block_nr=2;
req.tp_frame_nr=2;
if ( (setsockopt(fd,
SOL_PACKET,
PACKET_RX_RING,
(char *)&req,
sizeof(req))) != 0 ) {
perror("setsockopt()");
close(fd);
return 1;
};
/* mmap() the sucker */
map=mmap(NULL,
req.tp_block_size * req.tp_block_nr,
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_SHARED, fd, 0);
  1. se o tamanho mínimo do quadro é 64, é o último octeto. crc. definido pelo sistema operacional? se eu definir o tamanho do quadro como 60 sem lugar crc, ele pode ser transferido com sucesso entre o roteador cisco e o switch?

  2. pode funcionar acima da configuração mínima para configurar a alocação da opção de buffer circular (anel): PACKET_TX_RING

Exemplo     tp_block_size = 4096 // Tamanho mínimo do bloco contíguo     tp_frame_size = 2048 // Tamanho do quadro     tp_block_nr = 4 // Número de blocos     tp_frame_nr = 8 // Número total de quadros, redundantes

4096/2048 = 2, 2 * 4 = 8

qual é o tamanho de tpacket_hdr? é 32 bytes tamanho de tpacket_hdr + frame com tamanho 64

qual é o tamanho mínimo de tp_frame_size? é = 32 + 64 = 96

tp_block_size = 96 tp_frame_size = 96 tp_block_nr = 2 tp_frame_nr = 2

96/96 = 1, 1 * 2 = 2

se o número de blocos for menor, pode ter melhor desempenho? ou mais blocos é melhor?

se cada quadro tiver apenas 64, e enviar imediatamente quando tiver msg ret = sendto (meia, buffer, pkt_index- > pktlen, MSG_DONTWAIT,                          (struct sockaddr *) (void *) para, sizeof (struct sockaddr_in));

  1. (bônus não é necessário responder) como ver a diferença entre aplicado acima e não aplicado?
por user3277894 21.07.2014 / 13:33

0 respostas