我在 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 上实现相同的性能。