CN103188209A - 基于多核处理器实现socket的方法 - Google Patents

基于多核处理器实现socket的方法 Download PDF

Info

Publication number
CN103188209A
CN103188209A CN2011104459145A CN201110445914A CN103188209A CN 103188209 A CN103188209 A CN 103188209A CN 2011104459145 A CN2011104459145 A CN 2011104459145A CN 201110445914 A CN201110445914 A CN 201110445914A CN 103188209 A CN103188209 A CN 103188209A
Authority
CN
China
Prior art keywords
socket
nuclear
message
controll block
virtual protocol
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011104459145A
Other languages
English (en)
Other versions
CN103188209B (zh
Inventor
汪革
彭双庭
方昊
张李平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHANGHAI BAUD DATA COMMUNICATION CO Ltd
Original Assignee
SHANGHAI BAUD DATA COMMUNICATION CO Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SHANGHAI BAUD DATA COMMUNICATION CO Ltd filed Critical SHANGHAI BAUD DATA COMMUNICATION CO Ltd
Priority to CN201110445914.5A priority Critical patent/CN103188209B/zh
Publication of CN103188209A publication Critical patent/CN103188209A/zh
Application granted granted Critical
Publication of CN103188209B publication Critical patent/CN103188209B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种基于多核处理器实现socket的方法,属于计算机网络技术领域,该方法通过抽象出一层虚拟协议控制块并且使其在所有核间共享,可以较好地解决目前多核socket实现中存在的一些问题:要么无法在多个核上使用socket,或者socket实现过于复杂。

Description

基于多核处理器实现socket的方法
技术领域
本发明属于计算机网络技术领域,具体涉及可应用于多核处理器网络设备的socket实现方式,它采用各个核之间的socket控制结构仍为私有的而在所有核之间共享一个虚拟协议控制层来实现socket可在多个核上进行访问操作。
背景技术
随着应用的多样性以及网络带宽的提升,对网络处理设备性能的要求也越来越高,单核处理器已经很难满足现有的要求,而多核技术的发展正好弥补了这一问题,多核处理器也越来越多地应用在网络设备中。但随之而来的是代码的复杂性,现有的代码必须要做相应的修改,以防止多个核同时访问和修改临界区资源,否则会造成异常情况,所以核间共享的数据在操作时必须做加锁保护。将socket子系统移植到多核处理器环境中面临着同样的问题,很多控制结构必须进行保护以防止多核间的并发操作。目前多核系统中对socket子系统的实现有以下几种方式:
(1)主核处理:这种方式不是传统意义上的SMP,而是将核进行分类,常用的就是专门有一个核(即主核)来处理控制流程,而其他核处理业务数据流程。所有关于socket的处理都在主核上进行,包括通过socket收发报文等。这样对于实现来说是最简单的,对原先的代码不需要做什么修改,只需将收到的本地报文重定向到主核上进行处理。虽然这种处理方式最简单,但无法发挥多核处理器的功能,对于socket子系统来说本质上还是单核系统,并且这种实现方式要求使用socket的任务都在主核上运行,限制了其应用范围,无法发挥多核处理器的优势。
(2)所有核上共享:socket相关的控制结构都在所有核间进行共享,并对相应的临界区资源的访问进行加解锁保护。这种是最理想的实现方式,这样通过socket进行报文收发处理可以在任意核上操作,最大限度地利用了多核处理器的特性,唯一的缺点是由于涉及状态机的变化,对临界区资源的访问要特别仔细设计,否则很容易出错。
上述两种方式都有各自的优点和缺点:
方式(1)实现简单,但无法充分发挥多核处理器的优势,并且所有的使用socket的任务必须在主核上,加重了主核的负担。
方式(2)可以最大限度地发挥多核处理器的优势,但实现比较复杂,对于临界资源的访问如果保护不当很容易出错。
对于网络处理器来说,使用socket来处理的都是一些控制报文,不同的核可能运行不同的任务,对于应用来说需要能在不同的核上使用socket来收发报文。因此提供一种简单有效的socket实现方式,该方式能最大限度地发挥多核的优势,并且实现也能相对简单是本领域亟需解决的问题。
发明内容
本发明针对上述多核中socket实现方式存在的问题,而提供一种便于在多核上实现socket的方法。该方法基于抽象出一层虚拟协议控制块在所有核间共享,其可以很好地解决现有多核socket实现方案中所存在的无法在多个核上使用socket或者socket实现过于复杂。
为了达到上述目的,本发明采用如下的技术方案:
基于多核处理器实现socket的方法,该方法包括如下两部分:
(1)在任一核上创建socket,并且使得在该socket上的收发包只能在创建该socket的核上进行处理;
(2)抽象出一层虚拟协议控制块,其包括本地地址、本地端口、远端地址、远端端口和协议号,该虚拟协议控制块控制网络设备收到的本地报文具体送到哪个核上的socket,并且使其在所有核之间共享。
本发明实例中,在进行bind操作时,首先需要查看socket所对应的五元组是否与现有的虚拟协议控制块中的五元组相冲突,如果没有冲突,就将相应的五元组插入到虚拟协议控制块中进行更新,并返回操作成功;如果发现有冲突,就直接返回操作失败。
进一步的,在通过socket发送报文时,如果相应的状态机(比如TCP的状态机)发生变化,则进行更新(比如进行TCP的connect操作,当发送完SYN报文后,就将状态从CLOSED更新到SYN_SENT)。
进一步的,在网络设备接收到本地报文时,通过五元组的一一对比查找相应的虚拟协议控制块,确定报文属于哪个核上的socket,并将接收到的报文提交给相应核上的socket,然后进行收报文流程。
进一步的,通过socket来收发报文等操作时,如果不在原始创建该socket的核上进行操作,则立即返回错误。
进一步的,所述虚拟协议控制块在收到本地报文和将报文提交给相应的socket之间,进行查找,通过查找到的结果来确定报文应该提交给哪个核上的socket来进行处理。
进一步的,所述虚拟协议控制块包括的本地地址、本地端口、远端地址、远端端口和协议号五元组组成一个表项,每个核上的每一个socket对应这样一个表项,通过哈希表的方式将这些表项组织起来。
进一步的,所述虚拟协议控制块通过内存共享的方式在所有核之间共享,所以在访问虚拟协议控制块时,需要进行加锁保护。
利用本发明可以有效地解决只有主核上的任务才可以使用socket的问题,并且不需要复杂的加解锁来保护临界区资源,只需合理地设计虚拟协议控制块(vinpcb)即可。
相对于完全核间共享的socket实现技术,本发明方案实现更简单,只需在原有的单核socket代码中加入相应的vinpcb处理即可。
由此,利用本发明可以将单核上的socket实现方案,很方便地移植到多核系统当中,不需要加入大量的锁操作来保护临界区资源,并且能够在不同的核上使用socket,充分发挥多核的特性。
附图说明
以下结合附图和具体实施方式来进一步说明本发明。
图1为本发明操作socket分配唯一本地端口号的流程图。
图2为本发明本地报文进入socket时处理的流程图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本发明基于抽象出一层虚拟协议控制块在所有核间共享,提供一种可应用于多核处理器网络设备的socket实现方法。该方法可以有效解决目前多核socket实现中存在的一些问题:要么无法在多个核上使用socket,或者socket实现过于复杂。
该方法实施时,首先必须明确相应的socket的处理都在同一个核上,即通过socket来收发包都必须在同一个核上,并且是创建该socket的核上。
然后所有的核之间都共享一层虚拟协议控制块(vinpcb)。当调用bind,connect等操作时,需要将socket所对应的五元组同步更新到虚拟协议控制块中。
而报文收上来时,通过查找vinpcb就可以知道将报文递交给具体哪个核上的socket了。具体过程如下:
(1)在任意核上创建socket,并且使得在该socket上的收发包只能在创建该socket的核上进行处理,如果应用程序使用该socket进行收发报文所在的核与创建该socket的核不一致,就直接返回错误。
(2)抽象出一层虚拟协议控制块在收到本地报文和将报文提交给相应的socket之间,增加了一层虚拟协议控制块的查找,用来控制网络设备收到的报文具体送到哪个核上的socket,并且通过内存共享的方式使虚拟协议控制块在所有核之间共享。
该步骤中的虚拟协议控制块由本地地址、本地端口、远端地址、远端端口和协议号组成,这些五元组组成一个表项,每个核上的每一个socket对应这样一个表项,通过哈希表的方式将这些表项组织起来,方便查找。
(3)在进行bind操作时,首先需要查看socket所对应的五元组是否与现有的虚拟协议控制块中的五元组(即本地地址、本地端口、远端地址、远端端口和协议号)相冲突,如果没有冲突,就将相应的五元组插入到虚拟协议控制块中进行更新,返回操作成功;如果发现有冲突,就直接返回操作失败。
(4)在通过socket发送报文时,如果相应的状态机(比如TCP的状态机)发生变化,则更新相应的状态机(比如进行TCP的connect操作,当发送完SYN报文后,就将状态从CLOSED更新到SYN_SENT);由于这些结构都是每个核私有的,无须考虑加解锁的问题。
(5)在网络设备接收到本地报文时,通过五元组的一一对比查找相应的虚拟协议控制块,确定报文属于哪个核上的socket,并将接收到的报文提交给相应核上的socket,然后进行收报文流程。该收报文流程与单核上收报文的流程一致。同样的,如果接收到的报文改变了状态机也无须考虑并发操作的问题。
基于上述方案,本发明的具体实施如下:
由于创建socket和通过socket来发送报文为现有技术,此处不加以赘述。
参见图1,其所示为操作socket分配唯一本地端口号的处理流程:
1.socket创建时,对应的本地端口号为0;
2.通过调用connect等操作来分配一个本地端口号;
3.随机分配一个本地端口号;
4.通过查找vinpcb确定本地端口是否重复;
5.如果重复,则继续步骤3,否则查找本地协议控制块确定本地端口是否重复;
6.如果重复,则继续步骤3,否则本地端口分配成功。
参见图2,其所示为本地报文进入socket时的处理流程,步骤如下:
1.首先报文进入网络处理器;
2.做一些常规的检查(如checksum检查等)后查路由,确定是否为本地报文还是需要转发;
3.如果不是本地报文并且需要转发则进行转发处理;
4.确定为本地报文时,就进行vinpcb块的查找,采用精确匹配,首先是五元组的精确匹配,当没有查找到时进行三元组匹配(本地地址、本地端口和协议号),最后是二元组的匹配,如果查到了就重定向到相应的核上进行处理,如果没查到就重定向到主核进行处理。
5.当报文重定向到相应的核上后,由于所有的socket控制结构都是各个核单独私有的,接下来的处理与单核处理相同,即提交给相应的传输层并查找本地协议控制块,并最终提交给相应的socket处理。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

Claims (8)

1.基于多核处理器实现socket的方法,其特征在于,所述方法包括如下两部分:
(1)在任一核上创建socket,并且使得在该socket上的收发包只能在创建该socket的核上进行处理;
(2)抽象出一层虚拟协议控制块,其包括本地地址、本地端口、远端地址、远端端口和协议号,该虚拟协议控制块控制网络设备收到的本地报文具体送到哪个核上的socket,并且使其在所有核之间共享。
2.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,在进行bind操作时,首先需要查看socket所对应的五元组是否与现有的虚拟协议控制块中的五元组相冲突,如果没有冲突,就将相应的五元组插入到虚拟协议控制块中进行更新,并返回操作成功;如果发现有冲突,就直接返回操作失败。
3.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,在通过socket发送报文时,如果相应的状态机发生变化,则进行更新。
4.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,在网络设备接收到本地报文时,通过五元组的一一对比查找相应的虚拟协议控制块,确定报文属于哪个核上的socket,并将接收到的报文提交给相应核上的socket,然后进行收报文流程。
5.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,通过socket来收发报文等操作时,如果不在原始创建该socket的核上进行操作,则立即返回错误。
6.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,所述虚拟协议控制块在收到本地报文和将报文提交给相应的socket之前,进行查找,通过查找到的结果来确定报文应该提交给哪个核上的socket来进行处理。
7.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,所述虚拟协议控制块包括的本地地址、本地端口、远端地址、远端端口和协议号五元组组成一个表项,每个核上的每一个socket对应这样一个表项,通过哈希表的方式将这些表项组织起来。
8.根据权利要求1所述的基于多核处理器实现socket的方法,其特征在于,所述虚拟协议控制块通过内存共享的方式在所有核之间共享,所以在访问虚拟协议控制块时,需要进行加锁保护。
CN201110445914.5A 2011-12-27 2011-12-27 基于多核处理器实现socket的方法 Active CN103188209B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110445914.5A CN103188209B (zh) 2011-12-27 2011-12-27 基于多核处理器实现socket的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110445914.5A CN103188209B (zh) 2011-12-27 2011-12-27 基于多核处理器实现socket的方法

Publications (2)

Publication Number Publication Date
CN103188209A true CN103188209A (zh) 2013-07-03
CN103188209B CN103188209B (zh) 2016-06-29

Family

ID=48679178

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110445914.5A Active CN103188209B (zh) 2011-12-27 2011-12-27 基于多核处理器实现socket的方法

Country Status (1)

Country Link
CN (1) CN103188209B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103533025A (zh) * 2013-09-18 2014-01-22 北京航空航天大学 一种减少多核系统上tcp连接建立时锁竞争的方法
CN104572259A (zh) * 2014-10-17 2015-04-29 新浪网技术(中国)有限公司 一种数据处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1710905A (zh) * 2004-06-16 2005-12-21 华为技术有限公司 网间互联协议报文处理装置及其方法
CN101026613A (zh) * 2007-04-04 2007-08-29 杭州华为三康技术有限公司 数据链接保护方法及装置
CN101321096A (zh) * 2008-07-11 2008-12-10 北京立通无限科技有限公司 基于共享socket的通信处理方法及装置
CN101957808A (zh) * 2010-06-04 2011-01-26 杭州海康威视数字技术股份有限公司 多cpu间的通信方法、系统及cpu

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1710905A (zh) * 2004-06-16 2005-12-21 华为技术有限公司 网间互联协议报文处理装置及其方法
CN101026613A (zh) * 2007-04-04 2007-08-29 杭州华为三康技术有限公司 数据链接保护方法及装置
CN101321096A (zh) * 2008-07-11 2008-12-10 北京立通无限科技有限公司 基于共享socket的通信处理方法及装置
CN101957808A (zh) * 2010-06-04 2011-01-26 杭州海康威视数字技术股份有限公司 多cpu间的通信方法、系统及cpu

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103533025A (zh) * 2013-09-18 2014-01-22 北京航空航天大学 一种减少多核系统上tcp连接建立时锁竞争的方法
CN104572259A (zh) * 2014-10-17 2015-04-29 新浪网技术(中国)有限公司 一种数据处理方法及装置

Also Published As

Publication number Publication date
CN103188209B (zh) 2016-06-29

Similar Documents

Publication Publication Date Title
US9888048B1 (en) Supporting millions of parallel light weight data streams in a distributed system
US10959089B2 (en) Data management microservice in a microservice domain
CN103248711B (zh) 一种文件上传的方法和服务器
CN102986171B (zh) 分布式虚拟桥接器环境中的寄存器访问
US20190004868A1 (en) System and method for distributed graphics processing unit (gpu) computation
CN101997924A (zh) 云存储文件传输协议(cftp)
CN110830574B (zh) 一种基于docker容器实现内网负载均衡的方法
CN104580124A (zh) 协议栈选择方法、装置及设备
US8606908B2 (en) Wake-up server
US8539089B2 (en) System and method for vertical perimeter protection
CN102902669A (zh) 基于互联网系统的分布式信息抓取方法
EP1589424A2 (en) Vertical perimeter framework for providing application services in multi-CPU environments
CN103546572A (zh) 一种云存储装置以及多云存储联网系统和方法
CN103618778A (zh) 利用Linux虚拟主机实现数据高并发的系统及方法
CN104125294A (zh) 一种大数据安全管理方法和系统
CN101789901B (zh) 多核平台上转发系统的加速方法及装置
CN102158406A (zh) 面向计算机网络链路的智能选路方法
CN103186536A (zh) 一种调度数据共享装置的方法及系统
CN108540408B (zh) 一种基于Openstack的分布式虚拟交换机的管理方法及系统
CN103188209A (zh) 基于多核处理器实现socket的方法
CN107026878A (zh) 订阅消息的发布方法及装置
CN104184729A (zh) 一种报文处理方法和装置
CN110324384A (zh) 数据推送的方法和装置
CN110166487B (zh) 局域网设备信息传输方法、主设备、存储介质及智能设备
CN109308210B (zh) 一种在多核服务器上优化nfv转发服务链性能的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20130703

Assignee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Assignor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Contract record no.: X2020980003092

Denomination of invention: Method for realizing socket based on multi-core processor

Granted publication date: 20160629

License type: Exclusive License

Record date: 20200615

EE01 Entry into force of recordation of patent licensing contract
PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Method for realizing socket based on multi-core processor

Effective date of registration: 20200615

Granted publication date: 20160629

Pledgee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Pledgor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Registration number: Y2020980003093

EC01 Cancellation of recordation of patent licensing contract

Assignee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Assignor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Contract record no.: X2020980003092

Date of cancellation: 20210809

EC01 Cancellation of recordation of patent licensing contract
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20210809

Granted publication date: 20160629

Pledgee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Pledgor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Registration number: Y2020980003093

PC01 Cancellation of the registration of the contract for pledge of patent right