我收到的数据包需要根据时间戳(64位)重新排序
我使用了boost :: priority_queue。
所以每次我收到一个数据包,我都会把它插入队列中
我收到的每100个数据包我弹出timedout数据包
通常堆的大小在8000-15000个元素之间
从google perf顶部来看,pop似乎比插入更多的cpu
55.80% [.] CrReorderMbuf::GetTimedOut(unsigned long, unsigned int&)
14.59% [.] CrReorderMbuf::Insert(rte_mbuf*, unsigned long&, unsigned int&)
这是我在堆中保存的元素:
struct SrMbufElement
{
RU64 nTimeStamp;//timestamp of packet + timeout
rte_mbuf * pMbuf;//pointer to mbuf
RU32 nMbufIndex;
};
这是我的GetTimeout功能
rte_mbuf * CrReorderMbuf::GetTimedOut(RU64 pi_nCurrentTime,RU32 & po_nMbufIndex)
{
if(!m_heapMBuff.empty())
{
const SrMbufElement &mbufElmnt = m_heapMBuff.top();
if(mbufElmnt.nTimeStamp <= pi_nCurrentTime)
{
rte_mbuf * pmBuf = mbufElmnt.pMbuf;
po_nMbufIndex = mbufElmnt.nMbufIndex;
m_heapMBuff.pop();
return pmBuf;
}
}
return NULL;
}