CN103544324B - 一种内核态的数据访问方法、装置及系统 - Google Patents
一种内核态的数据访问方法、装置及系统 Download PDFInfo
- Publication number
- CN103544324B CN103544324B CN201310557075.5A CN201310557075A CN103544324B CN 103544324 B CN103544324 B CN 103544324B CN 201310557075 A CN201310557075 A CN 201310557075A CN 103544324 B CN103544324 B CN 103544324B
- Authority
- CN
- China
- Prior art keywords
- data
- client
- data message
- kernel
- kernel state
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000004891 communication Methods 0.000 claims abstract description 54
- 238000012544 monitoring process Methods 0.000 claims description 25
- 230000015654 memory Effects 0.000 claims description 23
- 230000005540 biological transmission Effects 0.000 claims description 13
- 230000003111 delayed effect Effects 0.000 claims 1
- 230000008569 process Effects 0.000 abstract description 3
- 238000012545 processing Methods 0.000 description 14
- 230000007246 mechanism Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 239000000686 essence Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种内核态的数据访问方法、装置和系统,所述方法包括:与客户端建立通信连接;接收客户端发送的数据访问请求;解析所述数据访问请求获得数据索引;根据所述数据索引判断内核态缓存区是否缓存有所述数据信息;当内核态系统缓存有所述数据信息时,获取所述数据索引所对应的数据信息;将所述数据信息利用所述连接套接字所建立的通信连接发送到客户端,从内核态的缓存空间获取客户端所请求的数据信息,在内核态中实现客户端的数据访问过程,无需CPU从用户态的memcached中获取数据信息经由内核态发送到客户端,避免了CPU在用户态和内核态之间不断的切换,加快了客户端访问数据的速度。
Description
技术领域
本发明涉及互联网技术领域,特别是涉及一种内核态的数据访问方法、装置及系统。
背景技术
在互联网应用中,服务器中大量的相同的数据被多个客户端反复访问,给服务器中的数据库带来很大的压力。为了减轻数据库的负载,目前主要采用memcached分布式内存对象缓存系统,将数据库中多次被访问的数据缓存在内存中,客户端通过memcached访问数据库,当memcached中没有客户端访问的数据时,memcached从数据库中获取客户端所访问的数据发送到客户端,并缓存数据;当memcached中有客户端访问的数据时,客户端直接从memcached中获得所访问的数据,不再去数据库中访问所需要的数据,从而减少了客户端访问数据库的次数,减轻了数据库的负载。
Memcached系统工作在操作系统的用户态,而操作系统处理客户端的数据访问请求事件是由操作系统的内核态处理,因此,处理器(CPU)在处理客户端通过网络访问memcached的数据事件时,需要在用户态和内核态之间不断切换,消耗大量的时间,降低服务器处理客户端请求的速度。
发明内容
有鉴于此,本发明提供了一种内核态的数据访问方法、装置及系统,从内核态的缓存空间获取客户端请求的数据信息,无需从用户态的memcached中获取数据信息,避免CPU在用户态和内核态之间不断切换。
一种内核态的数据访问方法,应用于内核态系统,所述方法包括:
与客户端建立通信连接;
接收客户端发送的数据访问请求;
解析所述数据访问请求获得数据索引;
根据所述数据索引判断内核态缓存区是否缓存有所述数据信息;
当内核态系统缓存有所述数据信息时,获取所述数据索引所对应的数据信息;
将所述数据信息利用所建立的通信连接发送到客户端。
可选的,所述方法还包括:
利用netlink套接字所建立的通信连接从用户态获取初始化配置参数,所述初始化配置参数包括监听网络地址、监听端口、最大容量和传输协议类型;
根据所述初始化配置参数进行初始化。
可选的,所述方法还包括:
当内核态缓存区没有缓存所述数据信息时,接收客户端发送的所述数据信息进行缓存,所述数据信息为客户端从数据库获取的。
可选的,所述接收客户端发送的所述数据信息进行缓存包括:
接收客户端从数据库获取的数据信息;
根据所述数据信息的长度选择数据缓存接口;
判断空闲缓存区域是否小于所述数据信息的长度;
当空闲缓存区域不小于所述数据信息的长度时,存储所述数据信息;
当空闲缓存区域小于所述数据信息的长度时,获取内核缓存空间,存储所述数据信息。
可选的,所述获取内核缓存空间包括:
判断所请求的内核缓存空间是否大于第一预设阈值;
当所请求的内核缓存空间不大于第一预设阈值时,通过kmalloc获取内核缓存空间;
当请求的内核缓存空间大于第一预设阈值时,判断所请求的内核缓存空间是否大于第二预设阈值;
当所请求的内核缓存空间大于第二预设阈值时,通过alloc_pages获取内核缓存空间;
当所请求的内核缓存空间不大于第二预设阈值时,通过vmalloc获取内核缓存空间。
可选的,所述根据所述数据索引判断内核态缓存区是否缓存有所述数据信息包括:
根据所述数据索引利用hashtable查找item list中的数据描述信息指针;
根据所述数据描述指针查找是否缓存有所述数据信息。
可选的,所述与客户端建立通信连接包括:
利用预先设置的监听套接字监听与其关联的端口所接收的至少一个客户端的tcp或unix连接请求;
当接收到客户端的tcp或unix连接请求时,给所述客户端创建一个连接套接字;
创建与所述客户端通过所述连接套接字通信的连接对象。
可选的,所述与客户端建立通信连接包括:
当接收到的客户端的udp请求时,建立客户端与预设UDP连接对象的通信连接。
一种内核态的数据访问装置,应用于内核态系统,所述装置包括:
通信模块,用于与客户端建立通信连接;
接收模块,用于接收客户端发送的数据访问请求;
解析模块,用于解析所述数据访问请求获得数据索引;
数据查找模块,用于根据所述数据索引判断内核态缓存区是否缓存有所述数据信息;
数据获取模块,用于当内核态系统缓存有所述数据信息时,获取所述数据索引所对应的数据信息;
数据发送模块,用于将所述数据信息利用所建立的通信连接发送到客户端。
可选的,所述装置还包括:
参数获取模块,用于利用netlink套接字所建立的通信连接从用户态获取初始化配置参数,所述初始化配置参数包括监听网络地址、监听端口、最大容量和传输协议类型;
初始化模块,用于根据所述初始化配置参数进行初始化。
可选的,所述装置还包括:
缓存模块,用于当内核态缓存区没有缓存所述数据信息时,接收客户端发送的所述数据信息进行缓存,所述数据信息为客户端从数据库获取的。
可选的,所述缓存模块包括:
接收单元,用于接收客户端从数据库获取的数据信息;
选择接口单元,用于根据所述数据信息的长度选择数据缓存接口;
比较单元,用于判断空闲缓存区域是否小于所述数据信息的长度;
第一存储单元,用于当空闲缓存区域不小于所述数据信息的长度时,存储所述数据信息;
第二存储单元,用于当空闲缓存区域小于所述数据信息的长度时,获取内核缓存空间,存储所述数据信息。
可选的,所述第二存储单元包括:
第一判定子单元,用于判断所请求的内核缓存空间是否大于第一预设阈值;
第一获取子单元,用于当所请求的内核缓存空间不大于第一预设阈值时,通过kmalloc获取内核缓存空间;
第二判定子单元,用于当请求的内核缓存空间大于第一预设阈值时,判断所请求的内核缓存空间是否大于第二预设阈值;
第二获取子单元,用于当所请求的内核缓存空间大于第二预设阈值时,通过alloc_pages获取内核缓存空间;
第三获取子单元,用于当所请求的内核缓存空间不大于第二预设阈值时,通过vmalloc获取内核缓存空间。
可选的,所述数据查找模块包括:
第一查找单元,用于根据所述数据索引利用hashtable查找item list中的数据描述信息指针;
第二查找单元,用于根据所述数据描述指针查找是否缓存有所述数据信息。
可选的,所述通信模块包括:
监听单元,用于利用预先设置的监听套接字监听与其关联的端口所接收的至少一个客户端的tcp或unix连接请求;
第一创建单元,用于当接收到客户端的tcp或unix连接请求时,给所述客户端创建一个连接套接字;
第二创建单元,用于创建与所述客户端通过所述连接套接字通信的连接对象。
可选的,所述通信单元包括:
第三创建单元,用于当接收到的客户端的udp请求时,建立客户端与预设UDP连接对象的通信连接。
一种内核态的数据访问系统,所述系统包括:
调度模块,用于按照数据访问处理线程调度系统中其他模块;
监听队列,用于监听客户端的请求,创建所述客户端的连接套接字;
处理队列,创建与客户端通过所述连接套接字通信的连接对象,以及建立客户端与预设UDP连接对象的通信连接;
Protocol layer模块,用于提供客户端与系统通信的协议层;
Hashtable模块,用于根据所述数据索引查找item list中的数据描述信息指针;
Tiem list模块,用于根据所述数据描述指针查找slab中是否缓存有所述数据信息;
Slab模块,用于给数据信息分配缓存空间;
Buffer manager模块,用于根据所述slab模块的请求给slab分配内存空间。
由上述内容可知,本发明有如下有益效果:
本发明提供了一种内核态的数据访问方法、装置和系统,所述方法包括:与客户端建立通信连接;接收客户端发送的数据访问请求;解析所述数据访问请求获得数据索引;根据所述数据索引判断内核态缓存区是否缓存有所述数据信息;当内核态系统缓存有所述数据信息时,获取所述数据索引所对应的数据信息;将所述数据信息利用所建立的通信连接发送到客户端,从内核态的缓存空间获取客户端所请求的数据信息,在内核态中实现客户端的数据访问过程,无需CPU从用户态的memcached中获取数据信息经由内核态发送到客户端,避免了CPU在用户态和内核态之间不断的切换,加快了客户端访问数据的速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一种内核态的数据访问方法实施例一流程图;
图2为本发明一种内核态的数据访问方法实施例二流程图;
图3为内核态系统kmemcache.ko中的buffer manager提供缓存区域的机制;
图4为本发明一种内核态的数据访问装置实施例三结构示意图;
图5为本发明一种内核态的数据访问装置实施例四结构示意图;
图6为本发明第二存储单元507结构示意图;
图7为本发明一种内核态的数据访问系统实施例五结构示意图。
具体实施方式
本发明提供了一种内核态的数据访问方法、装置及系统,内核态中缓存有数据库中客户端不断反复访问的数据信息,在内核态中实现数据访问,CPU无需在用户态和内核态之间不断切换,加快数据访问的速度。
下面结合附图对本发明具体的实施方式进行详细说明。
实施例一
图1为本发明一种内核态的数据访问方法实施例一流程图,所述方法包括:
步骤101:与客户端建立通信连接。
客户端与内核态系统中的连接对象进行通信。
内核态中的kmemcach.ko系统在初始化时,设置tcp(Transmission ControlProtocol)监听套接字和unix监听套接字。tcp监听套接字用于监听客户端发送的tcp连接请求,unix监听套接字用于监听客户端发送的unix连接请求。当tcp监听套接字监听到客户端的tcp连接请求或unix监听套接字监听到客户端的unix的连接请求时,将监听套接字放入监听队列,监听队列给每一个监听套接字所监听到的客户端创建一个连接套接字,然后将创建的连接套接字放入处理队列,处理队列为每一个连接套接字所对应的客户端创建一个连接对象,所述连接对象通过客户端的连接套接字与客户端建立通信连接。
当接收到客户端的udp(User Datagram Protocol)请求时,将客户端的请求直接发送到处理队列,处理队列为每一个客户端建立客户端与预设UDP连接对象的通信连接。步骤102:接收客户端发送的数据访问请求。
内核态中的连接对象接收客户端的数据访问请求,当客户端发送的请求为tcp或unix请求时,客户端的连接对象通过连接套接字接收客户端的数据访问请求;当客户端发送的请求为udp请求时,预设的UDP连接对象直接从客户端接收udp数据访问请求。所述数据访问请求携带有数据信息的数据索引,数据索引用于描述客户端所请求的数据信息。
步骤103:解析所述数据访问请求获得数据索引。
连接对象解析客户端发送的数据访问请求,得到数据索引。
步骤104:根据所述数据索引判断内核态缓存区是否缓存有所述数据信息,如果是,执行步骤105;如果否,执行步骤107。
连接对象根据数据索引在内核态的缓存空间中查找数据信息,当查找到客户端所请求的数据信息时,将数据信息发送到客户端。当没有查找到客户端所请求的数据信息时,向客户端返回没有查找到数据信息的结果,客户端从数据库获取所要访问的数据信息,并将所述数据信息发送到内核态的缓存空间进行缓存,以便下次访问时,直接从内核态的缓存空间获取所述数据信息。
步骤105:获取所述数据索引所对应的数据信息。
步骤106:将所述数据信息利用所建立的通信连接发送到客户端。
步骤107:接收客户端发送的所述数据信息进行缓存,所述数据信息为客户端从数据库获取的。
由上述内容可知,本发明有如下有益效果:
与客户端建立通信连接;接收客户端发送的数据访问请求;解析所述数据访问请求获得数据索引;根据所述数据索引判断内核态缓存区是否缓存有所述数据信息;当内核态系统缓存有所述数据信息时,获取所述数据索引所对应的数据信息;将所述数据信息利用所建立的通信连接发送到客户端,从内核态的缓存空间获取客户端所请求的数据信息,在内核态中实现客户端的数据访问过程,无需CPU从用户态的memcached中获取数据信息经由内核态发送到客户端,避免了CPU在用户态和内核态之间不断的切换,加快了客户端访问数据的速度。
实施例二
图2为本发明一种内核态的数据访问方法实施例二流程图,与实施例一相比,还包括对内核态初始化,所述方法包括:
步骤201:利用netlink套接字所建立的通信连接从用户态获取初始化配置参数。
kmemcache服务器包括用户态系统umemcached以及内核态系统kmemcache.ko。用户态系统umemcached主要为内核态系统kmemcache.ko提供初始化所需的初始化配置参数。所述初始化配置参数包括监听网络地址、监听端口、最大容量和传输协议类型。
用户在用户态系统umemcached中设置初始化配置参数,用户态系统umemcached向内核态系统kmemcache.ko发送初始化请求事件,kmemcache.ko向netlink注册回调函数kmemcache.ko_bh_init。用户态系统umemcached与内核态系统kmemcache.ko通过netlink套接字建立通信连接。
用户态系统umemcached将初始化配置参数通过netlink套接字发送到内核态系统kmemcache.ko:用户态系统umemcached将初始化配置参数发送到netlink套接字,netlink套接字调用内核态系统kmemcache.ko注册的回调函数kmemcache.ko_bh_init发送初始化配置参数,当初始化配置参数发送完毕时,netlink套接字调用complete通知内核态系统kmemcache.ko初始化配置参数发送完毕。
步骤202:根据所述初始化配置参数进行初始化。
内核态系统kmemcache.ko根据所接收到的初始化配置参数进行初始化,设置kmemcache.ko系统中监听套接字所监听的网络地址及端口,设置kmemcache.ko系统中缓存数据信息的最大容量,设置kmemcache.ko系统与客户端的传输协议类型。
步骤203:与客户端建立通信连接。
kmemcache.ko系统中的监听队列和处理队列处理客户端的数据访问请求。kmemcache.ko系统初始化时设置了tcp监听套接字和unix监听套接字。
内核态系统kmemcache.ko利用预先设置的监听套接字监听与其关联的端口所接收的至少一个客户端的tcp或unix连接请求;当接收到客户端的tcp或unix连接请求时,给所述客户端创建一个连接套接字;创建与所述客户端通过所述连接套接字通信的连接对象。
内核态系统kmemcache.ko接收到客户端的tcp或unix连接请求时,将tcp或unix监听套接字放入监听队列,监听队列给客户端创建一个连接套接字,并将连接套接字发送到处理队列,处理队列给客户端创建一个连接对象,所述连接对象与所述客户端通过连接套接字进行通信。
当接收到客户端的udp(User Datagram Protocol)请求时,将客户端的请求直接发送到处理队列,处理队列为每一个客户端建立客户端与预设UDP连接对象的通信连接。连接对象与客户端的通信采用protocol layer所提供的文本和二进制的通信协议。
步骤204:接收客户端发送的数据访问请求。
步骤205:解析所述数据访问请求获得数据索引。
步骤204与步骤205与实施例一类似,参考实施例一的描述,这里不再赘述。
步骤206:根据所述数据索引判断内核态缓存区是否缓存有所述数据信息,如果是,执行步骤207;如果否,执行步骤209。
可选的,所述根据所述数据索引判断内核态缓存区是否缓存有所述数据信息包括:
根据所述数据索引利用hashtable查找item list中的数据描述信息指针;
根据所述数据描述指针查找是否缓存有所述数据信息。
在内核态中实现基于用户态的memcached系统设计的hashtable,将item list的数据描述信息的指针保存在hashtable的哈希表中,并启用一个内核线程处理对hashtable的哈希表的扩容。
在内核态中实现基于用户态的memcached系统设计的item list,实现对数据描述信息的存储。
内核态系统kmemcache.ko根据所解析得到的数据索引利用hashtable查找itemlist中的数据描述信息指针,再根据所述数据描述信息指针利用item list从slab中查找数据信息。
步骤207:获取所述数据索引所对应的数据信息。
步骤208:将所述数据信息利用所建立的通信连接发送到客户端。
当内核态系统kmemcache.ko在其缓存空间中查找到客户端所请求的数据信息时,获取所述数据信息,将所述数据信息发送到客户端。
步骤209:接收客户端从数据库获取的数据信息。
当内核态系统kmemcache.ko没有从其缓存空间中查找到客户端所请求的数据信息时,客户端向数据库请求所述数据信息,并将所述数据信息发送到内核态系统kmemcache.ko的缓存空间进行缓存。
步骤210:根据所述数据信息的长度选择数据缓存接口。
内核态系统kmemcache.ko根据所接收到的数据信息的长度选择slab中的数据缓存接口。在内核态系统kmemcache.ko中实现slab内存分配机制,slab给提供了多种内存接口,内核态系统kmemcache.ko可以根据实际需要选择slab中的数据缓存接口。
举例说明:slab给内核态系统kmemcache.ko提供了三种数据缓存接口,1k,1G和10G,当客户端发送到内核态系统kmemcache.ko的数据信息的长度小于1k时,选择slab中1k的数据缓存接口;当客户端发送到内核态系统kmemcache.ko的数据信息的长度大于1k小于1G时,选择slab中1G的数据缓存接口;当客户端发送到内核态系统kmemcache.ko的数据信息的长度大于1G小于10G时,选择slab中10G的数据缓存接口。
步骤211:判断空闲缓存区域是否小于所述数据信息的长度,如果否,执行步骤212;如果是,执行步骤213。
步骤212:存储所述数据信息。
当slab能提供的缓存区域大于数据信息的长度时,直接存储所述数据信息。
步骤213:获取内核缓存空间,存储所述数据信息。
当slab能提供的缓存区域小于数据信息的长度时,slab从buffer manager中获取缓存区域。在内核态系统kmemcache.ko的底层实现buffer manager分配子系统,buffermanager尽量减少内核态系统的页间和页内碎片,给slab提供缓存区域。
可选的,图3所示的是内核态系统kmemcache.ko中的buffer manager依据slab的请求提供缓存区域的机制:
步骤301:判断所请求的内核缓存空间是否大于第一预设阈值,如果否,执行步骤302;如果是,执行步骤303。
当内核态系统kmemcache.ko中的slab向buffer manager请求内核缓存时,buffermanager判断所请求的内核缓存空间是否大于第一预设阈值,第一预设阈值是kmallc内存分配接口可以分配的最大内核缓存空间。
步骤302:通过kmalloc获取内核缓存空间。
当slab所请求的内核缓存空间小于或等于第一预设阈值时,buffer manager通过kmalloc内存分配接口给slab分配内核缓存空间。
步骤303:判断所请求的内核缓存空间是否大于第二预设阈值,如果是,执行步骤304;如果否,执行步骤305。
当slab所请求的内核缓存空间大于第一预设阈值时,判断slab所请求的内核缓存空间是否大于第二预设阈值,第二预设阈值是vmalloc内存分配接口可以分配的最大内核缓存空间。
步骤304:通过alloc_pages获取内核缓存空间。
当slab所请求的内核缓存空间大于第二预设阈值时,buffer manager通过alloc_pages内存分配接口给slab分配内核缓存空间,若alloc_pages内存分配接口分配失败,则采用vmalloc内存分配接口给slab分配内核缓存空间。
步骤305:通过vmalloc获取内核缓存空间。
当slab所请求的内核缓存空间不大于第二预设阈值时,buffer manager通过vmalloc内存分配接口给slab分配内核缓存空间。
实施例三
图4为本发明一种内核态的数据访问装置实施例三结构示意图,是与实施例一中所述的方法所对应的装置,所述装置包括:
通信模块401,用于与客户端建立通信连接。
接收模块402,用于接收客户端发送的数据访问请求。
解析模块403,用于解析所述数据访问请求获得数据索引。
数据查找模块404,用于根据所述数据索引判断内核态缓存区是否缓存有所述数据信息,如果是,进入数据获取模块405;如果否,进入缓存模块407。
数据获取模块405,用于获取所述数据索引所对应的数据信息。
数据发送模块406,用于将所述数据信息利用所建立的通信连接发送到客户端。
缓存模块407,用于当内核态缓存区没有缓存所述数据信息时,接收客户端发送的所述数据信息进行缓存,所述数据信息为客户端从数据库获取的。
实施例三与实施例一的描述类似,参考实施例一的描述,这里不再赘述。
实施例四
图5为本发明一种内核态的数据访问装置实施例四结构示意图,是与实施例二中所述的方法所对应的装置,所述装置包括:
参数获取模块501,用于利用netlink套接字所建立的通信连接从用户态获取初始化配置参数,所述初始化配置参数包括监听网络地址、监听端口、最大容量和传输协议类型。
初始化模块502,用于根据所述初始化配置参数进行初始化。
通信模块401,用于与客户端建立通信连接。
可选的,所述通信模块401包括:
监听单元,用于利用预先设置的监听套接字监听与其关联的端口所接收的至少一个客户端的tcp或unix连接请求;
第一创建单元,用于当接收到客户端的tcp或unix连接请求时,给所述客户端创建一个连接套接字;
第二创建单元,用于创建与所述客户端通过所述连接套接字通信的连接对象。
可选的,所述通信模块401包括:
第三创建单元,用于当接收到的客户端的udp请求时,建立客户端与预设UDP连接对象的通信连接。。
接收模块402,用于接收客户端发送的数据访问请求。
解析模块403,用于解析所述数据访问请求获得数据索引。
数据查找模块404,用于根据所述数据索引判断内核态缓存区是否缓存有所述数据信息,如果是,进入数据获取模块405;如果否,进入接收单元503。
数据获取模块405,用于获取所述数据索引所对应的数据信息。
数据发送模块406,用于将所述数据信息利用所建立的通信连接发送到客户端。
接收单元503,用于接收客户端从数据库获取的数据信息;
选择接口单元504,用于根据所述数据信息的长度选择数据缓存接口;
比较单元505,用于判断空闲缓存区域是否小于所述数据信息的长度,如果否,进入第一存储单元506;如果是,进入第二存储单元507。
第一存储单元506,用于当空闲缓存区域不小于所述数据信息的长度时,存储所述数据信息。
第二存储单元507,用于当空闲缓存区域小于所述数据信息的长度时,获取内核缓存空间,存储所述数据信息。
可选的,图6为所述第二存储单元507结构示意图,包括:
第一判定子单元601,用于判断所请求的内核缓存空间是否大于第一预设阈值,如果否,进入第一获取子单元602;如果是,进入第二判定子单元603。
第一获取子单元602,用于通过kmalloc获取内核缓存空间。
第二判定子单元603,用于判断所请求的内核缓存空间是否大于第二预设阈值,如果是,进入第二获取子单元604;如果否,进入第三获取子单元605。
第二获取子单元604,用于当所请求的内核缓存空间大于第二预设阈值时,通过alloc_pages获取内核缓存空间。
第三获取子单元605,用于当所请求的内核缓存空间不大于第二预设阈值时,通过vmalloc获取内核缓存空间。
实施例五
图7为本发明一种内核态的数据访问系统实施例五结构示意图,所述系统包括:
调度模块701,用于按照数据访问处理线程调度系统中其他模块。
监听队列702,用于监听客户端的请求,创建所述客户端的连接套接字。
处理队列703,创建与客户端通过所述连接套接字通信的连接对象,以及建立客户端与预设UDP连接对象的通信连接。
Protocol layer模块704,用于提供客户端与系统通信的协议层。
Hashtable模块705,用于根据所述数据索引查找item list中的数据描述信息指针。
Tiem list模块706,用于根据所述数据描述指针查找slab中是否缓存有所述数据信息。
Slab模块707,用于给数据信息分配缓存空间。
Buffer manager模块708,用于根据所述slab模块的请求给slab分配内存空间。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (17)
1.一种内核态的数据访问方法,其特征在于,应用于内核态系统,所述方法包括:
与客户端建立通信连接;
接收客户端发送的数据访问请求;
解析所述数据访问请求获得数据索引;
根据数据索引在内核态的缓存区中查找数据信息,判断所述内核态缓存区是否缓存有所述数据索引对应的所述数据信息;
当内核态系统缓存有所述数据索引对应的所述数据信息时,获取所述数据索引所对应的数据信息;
将所述数据信息利用所建立的通信连接发送到客户端。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
利用netlink套接字所建立的通信连接从用户态获取初始化配置参数,所述初始化配置参数包括监听网络地址、监听端口、最大容量和传输协议类型;
根据所述初始化配置参数进行初始化。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当内核态缓存区没有缓存所述数据信息时,接收客户端发送的所述数据信息进行缓存,所述数据信息为客户端从数据库获取的。
4.根据权利要求3所述的方法,其特征在于,所述接收客户端发送的所述数据信息进行缓存包括:
接收客户端从数据库获取的数据信息;
根据所述数据信息的长度选择数据缓存接口;
判断空闲缓存区域是否小于所述数据信息的长度;
当空闲缓存区域不小于所述数据信息的长度时,存储所述数据信息;
当空闲缓存区域小于所述数据信息的长度时,获取内核缓存空间,存储所述数据信息。
5.根据权利要求4所述的方法,其特征在于,所述获取内核缓存空间包括:
判断所请求的内核缓存空间是否大于第一预设阈值;
当所请求的内核缓存空间不大于第一预设阈值时,通过kmalloc获取内核缓存空间;
当请求的内核缓存空间大于第一预设阈值时,判断所请求的内核缓存空间是否大于第二预设阈值;
当所请求的内核缓存空间大于第二预设阈值时,通过alloc_pages获取内核缓存空间;
当所请求的内核缓存空间不大于第二预设阈值时,通过vmalloc获取内核缓存空间。
6.根据权利要求1所述的方法,其特征在于,所述根据所述数据索引判断内核态缓存区是否缓存有所述数据信息包括:
根据所述数据索引利用hashtable查找item list中的数据描述信息指针;
根据所述数据描述指针查找是否缓存有所述数据信息。
7.根据权利要求1-6任意一项所述的方法,其特征在于,所述与客户端建立通信连接包括:
利用预先设置的监听套接字监听与其关联的端口所接收的至少一个客户端的tcp或unix连接请求;
当接收到客户端的tcp或unix连接请求时,给所述客户端创建一个连接套接字;
创建与所述客户端通过所述连接套接字通信的连接对象。
8.根据权利要求1-6任意一项所述的方法,其特征在于,所述与客户端建立通信连接包括:
当接收到的客户端的udp请求时,建立客户端与预设UDP连接对象的通信连接。
9.一种内核态的数据访问装置,其特征在于,应用于内核态系统,所述装置包括:
通信模块,用于与客户端建立通信连接;
接收模块,用于接收客户端发送的数据访问请求;
解析模块,用于解析所述数据访问请求获得数据索引;
数据查找模块,用于根据数据索引在内核态的缓存区中查找数据信息,判断所述内核态缓存区是否缓存有所述数据索引对应的所述数据信息;
数据获取模块,用于当内核态系统缓存有所述数据索引对应的所述数据信息时,获取所述数据索引所对应的数据信息;
数据发送模块,用于将所述数据信息利用所建立的通信连接发送到客户端。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
参数获取模块,用于利用netlink套接字所建立的通信连接从用户态获取初始化配置参数,所述初始化配置参数包括监听网络地址、监听端口、最大容量和传输协议类型;
初始化模块,用于根据所述初始化配置参数进行初始化。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
缓存模块,用于当内核态缓存区没有缓存所述数据信息时,接收客户端发送的所述数据信息进行缓存,所述数据信息为客户端从数据库获取的。
12.根据权利要求11所述的装置,其特征在于,所述缓存模块包括:
接收单元,用于接收客户端从数据库获取的数据信息;
选择接口单元,用于根据所述数据信息的长度选择数据缓存接口;
比较单元,用于判断空闲缓存区域是否小于所述数据信息的长度;
第一存储单元,用于当空闲缓存区域不小于所述数据信息的长度时,存储所述数据信息;
第二存储单元,用于当空闲缓存区域小于所述数据信息的长度时,获取内核缓存空间,存储所述数据信息。
13.根据权利要求12所述的装置,其特征在于,所述第二存储单元包括:
第一判定子单元,用于判断所请求的内核缓存空间是否大于第一预设阈值;
第一获取子单元,用于当所请求的内核缓存空间不大于第一预设阈值时,通过kmalloc获取内核缓存空间;
第二判定子单元,用于当请求的内核缓存空间大于第一预设阈值时,判断所请求的内核缓存空间是否大于第二预设阈值;
第二获取子单元,用于当所请求的内核缓存空间大于第二预设阈值时,通过alloc_pages获取内核缓存空间;
第三获取子单元,用于当所请求的内核缓存空间不大于第二预设阈值时,通过vmalloc获取内核缓存空间。
14.根据权利要求9所述的装置,其特征在于,所述数据查找模块包括:
第一查找单元,用于根据所述数据索引利用hashtable查找item list中的数据描述信息指针;
第二查找单元,用于根据所述数据描述指针查找是否缓存有所述数据信息。
15.根据权利要求9-14任意一项所述的装置,其特征在于,所述通信模块包括:
监听单元,用于利用预先设置的监听套接字监听与其关联的端口所接收的至少一个客户端的tcp或unix连接请求;
第一创建单元,用于当接收到客户端的tcp或unix连接请求时,给所述客户端创建一个连接套接字;
第二创建单元,用于创建与所述客户端通过所述连接套接字通信的连接对象。
16.根据权利要求9-14任意一项所述的装置,其特征在于,所述通信模块包括:
第三创建单元,用于当接收到的客户端的udp请求时,建立客户端与预设UDP连接对象的通信连接。
17.一种内核态的数据访问系统,其特征在于,所述系统包括:
调度模块,用于按照数据访问处理线程调度系统中其他模块;
监听队列,用于监听客户端的请求,创建所述客户端的连接套接字;
处理队列,创建与客户端通过所述连接套接字通信的连接对象,以及建立客户端与预设UDP连接对象的通信连接;
Protocol layer模块,用于提供客户端与系统通信的协议层;
Hashtable模块,用于根据所述数据索引查找item list中的数据描述信息指针;
Tiem list模块,用于根据所述数据描述指针查找slab中是否缓存有所述数据信息;
Slab模块,用于给数据信息分配缓存空间;
Buffer manager模块,用于根据所述slab模块的请求给slab分配内存空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310557075.5A CN103544324B (zh) | 2013-11-11 | 2013-11-11 | 一种内核态的数据访问方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310557075.5A CN103544324B (zh) | 2013-11-11 | 2013-11-11 | 一种内核态的数据访问方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103544324A CN103544324A (zh) | 2014-01-29 |
CN103544324B true CN103544324B (zh) | 2017-09-08 |
Family
ID=49967776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310557075.5A Expired - Fee Related CN103544324B (zh) | 2013-11-11 | 2013-11-11 | 一种内核态的数据访问方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103544324B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104463031B (zh) * | 2014-12-01 | 2018-01-02 | 上海斐讯数据通信技术有限公司 | 一种Linux隐藏配置文件的方法 |
CN105897915B (zh) * | 2016-05-23 | 2022-09-09 | 珠海格力电器股份有限公司 | 一种数据接收服务器、及数据处理系统 |
CN105933325B (zh) * | 2016-06-07 | 2019-04-12 | 华中科技大学 | 一种基于NFSoRDMA的内核态RPC通信加速方法 |
CN107479826B (zh) * | 2017-07-06 | 2020-08-28 | 北京北信源软件股份有限公司 | 一种数据写入方法及装置 |
CN110121114B (zh) * | 2018-02-07 | 2021-08-27 | 华为技术有限公司 | 发送流数据的方法及数据发送设备 |
CN111314273B (zh) * | 2018-12-12 | 2022-06-07 | 阿里巴巴集团控股有限公司 | 基于udp的数据传输方法和连接装置 |
CN109614345B (zh) * | 2018-12-18 | 2021-02-12 | 北京神州绿盟信息安全科技股份有限公司 | 一种协议层之间通信的内存管理方法及装置 |
CN110445580B (zh) * | 2019-08-09 | 2022-04-19 | 浙江大华技术股份有限公司 | 数据发送方法及装置、存储介质、电子装置 |
CN113296974B (zh) * | 2020-08-31 | 2022-04-26 | 阿里巴巴集团控股有限公司 | 数据库访问方法、装置、电子设备及可读存储介质 |
CN112052291A (zh) * | 2020-09-03 | 2020-12-08 | 苏宁云计算有限公司 | 一种用户态访问分布式块存储系统的方法及系统 |
CN112039999A (zh) * | 2020-09-03 | 2020-12-04 | 苏宁云计算有限公司 | 一种内核态访问分布式块存储系统的方法及系统 |
CN112416863A (zh) * | 2020-10-19 | 2021-02-26 | 网宿科技股份有限公司 | 数据存储方法及缓存服务器 |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN114296646B (zh) * | 2021-12-24 | 2023-06-23 | 天翼云科技有限公司 | 基于io业务的缓存方法、装置、服务器和存储介质 |
CN116107764B (zh) * | 2023-04-03 | 2023-09-26 | 阿里云计算有限公司 | 数据处理方法及系统 |
CN116204693A (zh) * | 2023-04-27 | 2023-06-02 | 中国信息通信研究院 | 基于工业互联网的标识解析方法和装置、设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
CN102695049A (zh) * | 2012-05-09 | 2012-09-26 | 浙江宇视科技有限公司 | 码流发送方法和装置 |
CN102819497A (zh) * | 2012-05-31 | 2012-12-12 | 华为技术有限公司 | 一种内存分配方法、装置及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8397287B2 (en) * | 2006-08-21 | 2013-03-12 | Citrix Systems, Inc. | Method and system for authorizing a level of access of a client to a virtual private network connection, based on a client-side attribute |
GB2446172B (en) * | 2007-01-30 | 2009-01-21 | Hewlett Packard Development Co | Control of data transfer |
-
2013
- 2013-11-11 CN CN201310557075.5A patent/CN103544324B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
CN102695049A (zh) * | 2012-05-09 | 2012-09-26 | 浙江宇视科技有限公司 | 码流发送方法和装置 |
CN102819497A (zh) * | 2012-05-31 | 2012-12-12 | 华为技术有限公司 | 一种内存分配方法、装置及系统 |
Non-Patent Citations (1)
Title |
---|
嵌入式Linux平台内存管理方案;高超 等;《小型微型计算机系统》;20110430;第32卷(第4期);614-618 * |
Also Published As
Publication number | Publication date |
---|---|
CN103544324A (zh) | 2014-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103544324B (zh) | 一种内核态的数据访问方法、装置及系统 | |
CN102882939B (zh) | 负载均衡方法、设备及泛域名加速访问系统 | |
Chalamalasetti et al. | An FPGA memcached appliance | |
CN107819802A (zh) | 一种在节点集群中的镜像获取方法、节点设备及服务器 | |
CN103716251B (zh) | 用于内容分发网络的负载均衡方法及设备 | |
KR101383905B1 (ko) | 해시 함수 결과를 이용한 서버 부하 분산 처리 방법 및 그 장치 | |
US20160132541A1 (en) | Efficient implementations for mapreduce systems | |
CN108173937A (zh) | 访问控制方法和装置 | |
US20080208961A1 (en) | Parallel retrieval system | |
CN108933829A (zh) | 一种负载均衡方法及装置 | |
CN107135268B (zh) | 基于信息中心网络的分布式任务计算方法 | |
CN102394880B (zh) | 内容分发网络中的跳转响应处理方法和设备 | |
US11184429B2 (en) | Sharing network connections to content sources | |
CN109274730A (zh) | 物联网系统、mqtt消息传输的优化方法及装置 | |
EP3161669B1 (en) | Memcached systems having local caches | |
CN103227826A (zh) | 一种文件传输方法及装置 | |
CN113014611B (zh) | 一种负载均衡方法及相关设备 | |
CN105978936A (zh) | Cdn服务器及其缓存数据的方法 | |
CN103338233A (zh) | 负载均衡设备、Web服务器及请求信息处理方法和系统 | |
Siracusano et al. | Is it a SmartNIC or a key-value store? both! | |
CN107332703B (zh) | 一种多应用日志的查看方法及装置 | |
CN102761608A (zh) | Udp会话复用的方法和负载均衡设备 | |
US20210243248A1 (en) | Cloud service load balancing | |
CN107682281A (zh) | 一种sdn交换机和sdn交换机的应用管理方法 | |
CN105025042B (zh) | 一种确定数据信息的方法及系统、代理服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 100086 12, 1201, 3 building, 2 South Road, Haidian District Academy of Sciences, Beijing. Patentee after: BEIJING SOHU NEW MEDIA INFORMATION TECHNOLOGY Co.,Ltd. Address before: 100084 Beijing Haidian District Zhongguancun East Road 1 hospital 9 building Sohu cyber Building 8 floor Patentee before: BEIJING SOHU NEW MEDIA INFORMATION TECHNOLOGY Co.,Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170908 |