как установить mmap для лучшей производительности необработанного сокета

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. , если минимальный размер кадра равен 64, является последним 4 октетом. СУММЫ. устанавливается операционной системой? если я установлю размер кадра равным 60 без места crc, может ли он быть успешно передан между маршрутизатором и коммутатором cisco? option: PACKET_TX_RING

Пример tp_block_size = 4096 // Минимальный размер непрерывного блока tp_frame_size = 2048 // Размер кадра tp_block_nr = 4 // Количество блоков tp_frame_nr = 8 // Общее количество блоков кадров, с резервированием

4096/2048 = 2, 2 * 4 = 8

каков размер tpacket_hdr? это 32 байта размером tpacket_hdr + frame с размером 64

, каков минимальный размер 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

, если количество блоков меньше, может ли оно иметь лучшую производительность? или больше блоков лучше?

, если каждый кадр всего 64, и отправлять немедленно, когда msg ret = sendto (sock, buffer, pkt_index-> ​​pktlen, MSG_DONTWAIT, (struct sockaddr *) (void *) в , sizeof (struct sockaddr_in));

  1. (бонус не требуется, чтобы ответить), как увидеть разницу между примененным выше и не примененным?
1
задан 21 July 2014 в 17:27

0 ответов

Другие вопросы по тегам:

Похожие вопросы: