linux - Ubuntu 14.40 和 CentOS 6.5 之间的 libpcap 性能和行为差异

标签 linux ubuntu-14.04 libpcap centos6.5

一段时间以来,我一直在 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

之后: 免费-k 缓存的已用空闲共享缓冲区总数 内存: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

之后: 免费-k 缓存的已用空闲共享缓冲区总数 内存:16225932 4401652 11824280 0 14896 84884 -/+ 缓冲区/缓存:4301872 11924060 交换:8183804 0 8183804

expr 4401652 - 394000

4007652

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

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

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

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

我的目标是在 CentOS 上实现与在 Ubuntu 上相同的性能。

我在谷歌上搜索了一下,发现 libpcap 似乎对不同的内核有不同的表现。我很好奇是否有任何内核方面的选项我必须在 CentOS 方面调整才能在 Ubuntu 上实现相同的性能。

最佳答案

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

" 3.2为PF_PACKET套接字引入了TPACKET_V3版本的“T(urbo)PACKET”内存映射包捕获机制;较新版本的 libpcap(1.5 及更高版本)支持 TPACKET_V3 并将在内核支持时使用它。 TPACKET_V3 可以更有效地使用捕获缓冲区;在至少一项测试中,它丢弃的数据包更少。它还可能会带来更少的开销,因此请求 2GB 缓冲区占用的内核内存更少。”

关于linux - Ubuntu 14.40 和 CentOS 6.5 之间的 libpcap 性能和行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26476357/

相关文章:

linux - 从 vi/vim 中运行命令

php - 如何设置 Linux 服务器 Wordpress 插件或主题下载服务器询问 FTP 主机名、FTP 用户名、FTP 密码。?

php - 将命令置于后台并通过 PHP exec() 获取 PID?

c# - IntPtr 未在单声道中正确编码

android - Ubuntu 上 Android Studio 的键盘问题

c - 如何在 C 中与外部文本编辑器交互

ubuntu-14.04 - Ubuntu 上的 VirtualBox VERR_VM_DRIVER_VERSION_MISMATCH

在c中为捕获的数据包创建PCAP文件

c - 为什么我的代码不能用 libpcap 编译?

用于数据包创建//操作的 Python 库