15、多线程Snort:从简单线程到流固定的性能优化

多线程Snort:从简单线程到流固定的性能优化

1. 线程目标与性能分析

在对Snort进行多线程优化时,首先需要确定线程化的目标。线程化目标在调用链中应处于较高位置,明显要高于 _IO_fread_internal() ,因为这些函数位于系统库中。并且,当前花费大量时间的文件I/O函数在生产版本中并不存在,生产版本将从网络获取数据包而非文件。综合考虑,最适合进行线程化的位置是 InterfaceThread()

以下是Snort的部分调用时间数据:
| 函数名 | 总时间(微秒) | 自身时间(微秒) |
| — | — | — |
| InterfaceThread | 2,548,405 | 4 |
| Pcap_loop | 2,545,747 | 4 |
| Pcap_offline_read | 2,545,743 | 0 |
| _IO_fread_internal | 2,263,365 | 2,263,365 |
| PcapProcessPacket | 282,552 | 0 |
| Packet_time_update | 0 | 0 |
| Sfthreshold_reset | 0 | 0 |
| ProcessPacket | 282,552 | 0 |

2. 简单线程化Snort

为了进一步加速Snort应用程序,考虑利用系统的多核特性创建多线程版本。使用POSIX线程库(libpthread)实现简单线程化,即让每个线程运行整个Snort代码(不包括初始化和关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值