发明名称 一种针对半虚拟化网卡的数据包高效发送方法
摘要 本发明公开了一种针对半虚拟化网卡的数据包高效发送方法,借鉴Linux NAPI的设计,让I/O线程在处理发送队列时,根据客户机发送数据包的频率自动切换通知模式和轮询模式:如果客户机发送数据包的频率高于某个阈值,则持续轮询发送队列中是否有数据需要处理,保持客户机的通知机制处于关闭状态,消减VM Exit数量;如果客户机发送数据包的频率低于某个阈值,则退出轮询模式,并开启客户机的通知机制,等待下一次被唤醒,减少CPU资源的浪费。用两个I/O线程分别处理发送队列和接收队列,这两个I/O线程运行在同一个物理核上,它们之间的公平性由CFS调度器保证,CFS调度器会根据线程的运行时间、睡眠时间等实现公平调度。
申请公布号 CN106095580A 申请公布日期 2016.11.09
申请号 CN201610421258.8 申请日期 2016.06.14
申请人 上海交通大学 发明人 管海兵;胡小康;张望;马汝辉;李健
分类号 G06F9/50(2006.01)I 主分类号 G06F9/50(2006.01)I
代理机构 上海旭诚知识产权代理有限公司 31220 代理人 郑立
主权项 一种针对半虚拟化网卡的数据包高效发送方法,其特征在于,包括以下步骤:步骤1:在初始化vhost模块时创建两个线程,线程A负责接收队列的处理,线程B负责发送队列的处理;步骤2:当半虚拟化网卡接收到来自外界的数据包时,唤醒线程A;步骤3:线程A查看接收缓冲区中是否有数据;步骤3‑1:如果有数据,则处理接收队列:将数据写入接收队列,通知客户机有数据到达,客户机接收到通知后从接收队列中获取数据;处理完毕接收队列之后,转至步骤3;步骤3‑2:如果没有数据,则线程A进入睡眠状态,等待下一次被唤醒;步骤4:发送队列被配置为根据客户机发送数据包的频率自动切换通知模式和轮询模式;客户机发送数据包,执行IO特权指令造成VM Exit,KVM通知线程B有数据包需要传输,线程B被唤醒;步骤5:线程B关闭客户机通知机制,进入轮询状态,轮询发送队列中是否有数据,并统计一次轮询或一段时间内处理的数据包数量;步骤6:如果数据包数量高于阈值,说明客户机发送数据包的频率较高,则转至步骤5,继续轮询,减少VM Exit数量;步骤7:如果数据包数量低于阈值,说明客户机发送数据包的频率较低,则退出轮询模式,打开客户机的通知机制,线程B睡眠,等待下一次被唤醒,减少CPU资源的浪费;步骤8:线程A和B运行在同一个物理核上,CFS调度器根据线程的运行时间和睡眠时间进行公平调度。
地址 200240 上海市闵行区东川路800号