1

我在 Ubuntu 上运行基于 tcpdump 的脚本已经有一段时间了,最​​近我被要求在 CentOS 6.5 上运行它,我注意到一些非常有趣的差异

我在两种设置上都运行 tcpdump 4.6.2、libpcap 1.6.2,它们实际上都在相同的硬件上运行(双启动)

我在两个操作系统上运行相同的命令。

sudo /usr/sbin/tcpdump -s 0 -nei eth9 -w /mnt/tmpfs/eth9_rx.pcap -B 2000000

从“free -k”,我看到在 Ubuntu 上分配了大约 2G

前:

free -k
         total       used       free     shared    buffers     cached

内存:65928188 1337008 64591180 1164 26556 68596 -/+ 缓冲区/缓存:1241856 64686332 交换:67063804 0 67063804

之后:free -k total used free shared buffers cached 内存:65928188 3341680 62586508 1160 26572 68592 -/+ 缓冲区/缓存:3246516 62681672 交换:67063804 0 67063804

expr 3341680 - 1337184

2004496

一个 CentOS,我看到从同一命令分配的内存量(4G)是两倍

前:

free -k
         total       used       free     shared    buffers     cached

内存:16225932 394000 15831932 0 15308 85384 -/+ 缓冲区/缓存:293308 15932624 交换:8183804 0 8183804

之后:free -k total used free shared buffers cached 内存:16225932 4401652 11824280 0 14896 84884 -/+ 缓冲区/缓存:4301872 11924060 交换:8183804 0 8183804

expr 4401652 - 394000

4007652

从命令中,我正在监听一个接口并转储到 RAMdisk 中。

在 Ubuntu 上,我可以以线速捕获大尺寸数据包(10G,1024 字节帧)的数据包

但是在 CentOS 上,我只能以 60% 的线速(10G,1024 字节帧)捕获数据包

此外,两个操作系统都运行相同版本的 NIC 驱动程序和驱动程序配置。

我的目标是在 CentOS 上达到与 Ubuntu 相同的性能。

我用谷歌搜索了一下,似乎 libpcap 的魔力在不同的内核上表现不同。我很好奇是否有任何内核方面的选项我必须在 CentOS 端进行 tweek 以在 Ubuntu 上实现相同的性能。

4

1 回答 1

0

这已经回答了。根据 tcpdump/libpcap 的 Guy Harris 的说法,差异是由于 CentOS6.5 运行的是 2.6.X 内核。以下是他的回应:

” 3.2 为 PF_PACKET 套接字引入了 TPACKET_V3 版本的“T(urbo)PACKET”内存映射数据包捕获机制;较新版本的 libpcap(1.5 及更高版本)支持 TPACKET_V3,如果内核支持它,将使用它。TPACKET_V3 做得更多"

于 2014-11-05T10:53:52.607 回答