CN110928680A - 一种适用于证券交易***的订单内存分配方法 - Google Patents
一种适用于证券交易***的订单内存分配方法 Download PDFInfo
- Publication number
- CN110928680A CN110928680A CN201911090592.XA CN201911090592A CN110928680A CN 110928680 A CN110928680 A CN 110928680A CN 201911090592 A CN201911090592 A CN 201911090592A CN 110928680 A CN110928680 A CN 110928680A
- Authority
- CN
- China
- Prior art keywords
- order
- memory pool
- memory
- stock
- pool
- 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
Links
Images
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
- G06Q30/0635—Processing of requisition or of purchase orders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Finance (AREA)
- Accounting & Taxation (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Technology Law (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明涉及计算机数据处理技术领域,具体来说是一种适用于证券交易***的订单内存分配方法,方法具体如下:S1:内存的分配将按单只股票隔离,分别进行,每只股票同一价格档位的订单将依次从一系列的微型内存池中分配;S2:当一个微型内存池被分配满之后,***将从每只股票各自拥有的一个订单块内存池中分配一个新的内存池,用于后续的新订单分配;S3:***启动时需要预先给单个订单块内存池分配的内存池;本发明使得撮合成交时,对订单的访问基本落在CPU的一级缓存内,比现有技术快100倍,只有在每273笔订单撮合完成时,访问才会有一次落在三级缓存内,即使在三级缓存内,访问的时延也比已有方案快十倍。
Description
技术领域
本发明涉及计算机数据处理技术领域,具体来说是一种适用于证券交易***的订单内存分配方法。
背景技术
证券交易***在交易的过程中,我们需要在内存中维护一个订单容器,里面存放着所有还未成交的订单,这个容器记作“订单簿(OrderBook)”。
在一个“订单簿”中,所有价格相等并且买卖方向相同的订单被视作同一档订单,属于同一档位的订单我们需要用链表串联起来,并用一个数据结构(记作priceLeader)保存这个链表的信息、以及保存这个价格档位上所有订单的汇总信息(价格,总下单股数,剩余未成交股数,已成交股数),如图1所示。一个订单簿包含买卖方向相反的两个priceLeader的集合,记作leaderBookBuy和leaderBookSell,订单簿的结构如图2所示。
由于股票的交易规则中有最小价格变动单位的限制(记作tickSize),在单个股票的最高价(记作highLimit)和最低价(记作lowLimit)构成的涨跌幅范围内,价格档位数量(记作levelCount)可通过下面的公式计算出来:levelCount=int((highLimit-lowLimit)/tickSize)+1。
在交易的过程中,每收到一笔新订单(记作newOrder),***会尝试与交易方向相反的最优价格档位上的订单进行撮合成交,如果交易方向相反的最优价格档位不满足newOrder所设定的价格或newOrder只有部分数量被撮合时,则***会为newOrder分配一块内存,结构为技术订单(记作TechOrder),TechOrder内会复制newOrder的订单业务信息,并且记录TechOrder在订单簿中的索引信息,然后将TechOrder***到它自己所属的priceLeader记录的未成交订单链表中去,等待将来被其它新订单撮合。
内存的大小我们使用字节为单位,一个字节用大写字母“B”表示,1024个字节我们用“KB”表示,1024个“KB”我们用“MB”表示,1024个“MB”我们用“GB”表示。在计算中度量时间时,最小单位可以精确到0.1纳秒。我们使用“ns”表示纳秒,使用“us”表示微妙,使用“ms”表示毫秒,使用“s”表示秒。
现在在内存中分配TechOrder的方法是从整个主机的一个共享内存池中进行分配的。一个主机的交易进程会负责几百只股票的撮合操作,这些股票的所有TechOrder会共享一个内存池。
每只股票的订单到达主机的顺序是随机的,每次从共享内存分配TechOrder的内存地址也是随机的。同一只股票的所有订单基本上不会被分配在共享内存中的连续内存地址上,地址的跨度(MemSpan)可以通过每笔订单大小(orderSize)和当天的订单总数(orderCount)来计算:MemSpan=orderSize*orderCount。
根据一个订单大小为120字节来计算,一个交易主机上每天处理的订单量是2000万,计算出的内存地址跨度为2.23GB。在撮合成交时,每只股票的订单是按订单进入订单簿的价格顺序、时间顺序被撮合的;即相同价格档位的订单,先进入订单簿的先被撮合。
以主机配置Intel Core i7 CPU为例,当一笔新订单依次与对手方档位上多笔订单撮合时,按现有TechOrder随机分布在不同物理地址上的情况,CPU在依次读取每次被撮合的订单时,跨越的内存范围会超过CPU一级缓存的大小(32KB),二级缓存的大小(512KB),甚至三级缓存的大小(4-32MB),导致CPU去主存上读取被撮合订单。
而CPU的一、二、三级缓存、及主存对应的访问延迟分别为:0.9ns、2.8ns、12.9ns、120ns。
可以看到,现有的TechOrder内存分配方法,每次访问下一个被撮合订单时,CPU需要耗费120ns在等待上,增加了交易***的整体延时,降低了交易***的吞吐量。
发明内容
本发明的目的在于解决现有技术的不足,提供一种适用于证券交易***的订单内存分配方法,将同一个档位的TechOrder分配在连续的内存地址上,处于CPU的缓存跨度范围内,使得访问每笔被撮合订单的时间缩短为0.9ns到12.9ns之间。
为了实现上述目的,设计一种适用于证券交易***的订单内存分配方法,其特征在于所述方法具体如下:
S1:内存的分配将按单只股票隔离,分别进行,每只股票同一价格档位的订单将依次从一系列的微型内存池中分配;
S2:当一个微型内存池被分配满之后,***将从每只股票各自拥有的一个订单块内存池中分配一个新的内存池,用于后续的新订单分配;
S3:***启动时需要预先给单个订单块内存池分配的内存池;
S4:除了启动时的预分配外,***将在运行时根据订单的增长情况,动态的分配新的内存池加入到订单块内存池中进行管理。
微型内存池大小为CPU一级缓存的大小。
单个订单块内存池的内存大小完全落在CPU三级缓存范围内。
每个股票拥有一个订单块内存池,管理的单位是局部订单内存池,局部订单内存池的每个空闲订单槽,用于分配给一个个订单。
所述方法具体如下:给新订单分配一块内存是先尝试从已经被链在对应价格档位上的局部订单内存池中空闲的订单槽中分配,当这个档位上没有含空闲订单槽的局部订单内存池,就会从这个股票的订单块内存池中拿空闲的内存池出来链入这个价格档位内存池列表中,并从这个新的内存池上面取空闲订单槽分配给新订单。
本发明同现有技术相比,其优点在于:
1.本发明使得撮合成交时,对订单的访问基本落在CPU的一级缓存内,比现有技术快100倍,只有在每273笔订单撮合完成时,访问才会有一次落在三级缓存内,即使在三级缓存内,访问的时延也比已有方案快十倍。
2.撮合效率得到了极大的提升,使得***拥有了更大的订单处理吞吐量和更低的时延。
3.实现了按订单分布自然规律进行特别优化的分级内存池,即有大的订单内存池,同时又做到遵循mechanical sympathy设计思想,尽可能做到每个档位上的订单和CPU缓存亲和。而且支持动态扩展订单的内存池,和老的***在启动***前配置固定大小订单内存池相比,可以动态支持更多订单,应对突发的证券报单量。
附图说明
图1是本发明程序流程示意图1;
图2是本发明程序流程示意图2
具体实施方式
下面结合附图对本发明作进一步说明,本发明的原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参见图1:各编号所指图形含义如下:1.一个订单簿的结构体,2.订单簿包含的买卖价格档位集合,3.特定于这个订单簿的订单块内存池,4.买方价格档位集合,5.买方价格档位集合,6.订单块内存池结构,7.价格档位双向链表,8.该买卖方向所有订单的剩余未成交报单量,9.该内存池中所有未分配的订单块组成的双向链表。
参见图2:各编号所指图形含义如下:6.订单块内存池结构,9.该内存池中所有未分配的订单块组成的双向链表,10.在内存池中未分配的订单块结构11.用于链接订单块的双向链表元素,内含该元素的前一个链表元素的指针,后一个链表元素的指针,12.订单块将来分配给价格档位时用于保存价格档位的指针,13.订单从这个订单块上分配时,通过这个值来记录已经从15.techOrders数组中分配了多少订单出去,14.这个订单块上还未被分配的订单结构在15.techOrders数组中的下标位置,下次从这个位置开始分配,记录这个订单块上所有可被分配给价格档位的订单。
TechOrder内存分配方法:
内存的分配将按单只股票隔离,分别进行;每只股票同一价格档位的订单将依次从一系列的微型内存池(记作orderChunk)中分配,如图2所示,这种微型内存池的大小为CPU一级缓存的大小。根据背景技术中所述的订单大小和CPU一级缓存的大小,我们可以按下面的公式计算出一个orderChunk可以分配的订单数量(记作OrderPreChunk)为:OrderPreChunk=32KB/120B。
OrderPreChunk约等于273个订单,即图2中的15号元件中数组大小OrderPreChunk。
当一个orderChunk被分配满之后,***将从每只股票各自拥有的一个订单块内存池(记作orderChunkPool)中分配一个新的orderChunk,用于后续的新订单分配,如图1所示。
现有***每只股票平均每天大约有三万笔订单,单个orderChunkPool的内存大小(Mempool)可以按以下公式计算得出:Mempool=30000*120B,Mempool等于3.42MB,可以完全落在CPU三级缓存范围内。
***启动时需要预先给单个orderChunkPool分配的orderChunk个数(记作orderChunkCountpool)可以计算得出:orderChunkCountpool=30000/OrderPreChunk。
orderChunkCountpool等于109个,除了启动时的预分配外,***将在运行时根据订单的增长情况,动态的分配新的orderChunk加入到orderChunkPool中进行管理。
实施例一:每个股票拥有一个OrderChunkPool,这个是订单块内存池,管理的单位是OrderChunk;OrderChunk是局部订单内存池,管理的单位是每个空闲订单槽,即Slot,用于分配给一个个订单。
给NewOrder分配一块内存是先尝试从已经被链在对应价格档位上的OrderChunk中空闲的Slot中分配,这个档位上没有含空闲Slot的OrderChunk,我们就会从这个股票的OrderChunkPool中拿空闲的OrderChunk出来链入这个价格档位OrderChunk列表中,并从这个新的OrderChunk上面取空闲Slot分配给NewOrder。
OrderChunk在预分配阶段,采用的是分配一个大的内存块,在上面切成一个个OrderChunk的方式,所以它们也是局限在一定内存地址范围内的。尽量和CPU的三级四级缓存亲和。
实施例二:本发明中所述的订单内存分配方法已经在【上海证券交易所-交易***升级建设一期项目】中进行了实施,并取得了上述的性能提升,源代码位于内部代码仓库地址GTS/orderbook.git中,主要逻辑在order_chunk.go实现,下面是order_chunk.go的部分源代码:
Claims (5)
1.一种适用于证券交易***的订单内存分配方法,其特征在于所述方法具体如下:
S1:内存的分配将按单只股票隔离,分别进行,每只股票同一价格档位的订单将依次从一系列的微型内存池中分配;
S2:当一个微型内存池被分配满之后,***将从每只股票各自拥有的一个订单块内存池中分配一个新的内存池,用于后续的新订单分配;
S3:***启动时需要预先给单个订单块内存池分配的内存池;
S4:除了启动时的预分配外,***将在运行时根据订单的增长情况,动态的分配新的内存池加入到订单块内存池中进行管理。
2.如权利要求1所述的一种适用于证券交易***的订单内存分配方法,其特征在于微型内存池大小为CPU一级缓存的大小。
3.如权利要求1所述的一种适用于证券交易***的订单内存分配方法,其特征在于单个订单块内存池的内存大小完全落在CPU三级缓存范围内。
4.如权利要求1所述的一种适用于证券交易***的订单内存分配方法,其特征在于每个股票拥有一个订单块内存池,管理的单位是局部订单内存池,局部订单内存池的每个空闲订单槽,用于分配给一个个订单。
5.如权利要求4所述的一种适用于证券交易***的订单内存分配方法,其特征在于所述方法具体如下:给新订单分配一块内存是先尝试从已经被链在对应价格档位上的局部订单内存池中空闲的订单槽中分配,当这个档位上没有含空闲订单槽的局部订单内存池,就会从这个股票的订单块内存池中拿空闲的内存池出来链入这个价格档位内存池列表中,并从这个新的内存池上面取空闲订单槽分配给新订单。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911090592.XA CN110928680B (zh) | 2019-11-09 | 2019-11-09 | 一种适用于证券交易***的订单内存分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911090592.XA CN110928680B (zh) | 2019-11-09 | 2019-11-09 | 一种适用于证券交易***的订单内存分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928680A true CN110928680A (zh) | 2020-03-27 |
CN110928680B CN110928680B (zh) | 2023-09-12 |
Family
ID=69853661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911090592.XA Active CN110928680B (zh) | 2019-11-09 | 2019-11-09 | 一种适用于证券交易***的订单内存分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928680B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114037506A (zh) * | 2021-10-21 | 2022-02-11 | 深圳市道旅旅游科技股份有限公司 | 工单分配方法、装置、设备和介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作***中内存分配的方法 |
US20070288526A1 (en) * | 2006-06-08 | 2007-12-13 | Emc Corporation | Method and apparatus for processing a database replica |
CN102253897A (zh) * | 2011-07-26 | 2011-11-23 | 大唐移动通信设备有限公司 | 一种内存池管理方法及装置 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式***的内存控制方法 |
CN103176911A (zh) * | 2011-12-20 | 2013-06-26 | 陕西银河网电科技有限公司 | 一种嵌入式软件安全内存管理方法 |
CN103810115A (zh) * | 2012-11-15 | 2014-05-21 | 深圳市腾讯计算机***有限公司 | 一种内存池的管理方法和装置 |
CN105094997A (zh) * | 2015-09-10 | 2015-11-25 | 重庆邮电大学 | 一种云计算主机节点间物理内存共享方法和*** |
CN105302738A (zh) * | 2015-12-09 | 2016-02-03 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
CN106681842A (zh) * | 2017-01-18 | 2017-05-17 | 迈普通信技术股份有限公司 | 一种多进程***中共享内存的管理方法及装置 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理*** |
CN110264353A (zh) * | 2019-05-28 | 2019-09-20 | 必成汇(成都)科技有限公司 | 基于内存的高可用交易撮合***及方法 |
-
2019
- 2019-11-09 CN CN201911090592.XA patent/CN110928680B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作***中内存分配的方法 |
US20070288526A1 (en) * | 2006-06-08 | 2007-12-13 | Emc Corporation | Method and apparatus for processing a database replica |
CN102253897A (zh) * | 2011-07-26 | 2011-11-23 | 大唐移动通信设备有限公司 | 一种内存池管理方法及装置 |
CN103176911A (zh) * | 2011-12-20 | 2013-06-26 | 陕西银河网电科技有限公司 | 一种嵌入式软件安全内存管理方法 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式***的内存控制方法 |
CN103810115A (zh) * | 2012-11-15 | 2014-05-21 | 深圳市腾讯计算机***有限公司 | 一种内存池的管理方法和装置 |
CN105094997A (zh) * | 2015-09-10 | 2015-11-25 | 重庆邮电大学 | 一种云计算主机节点间物理内存共享方法和*** |
CN105302738A (zh) * | 2015-12-09 | 2016-02-03 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
CN106681842A (zh) * | 2017-01-18 | 2017-05-17 | 迈普通信技术股份有限公司 | 一种多进程***中共享内存的管理方法及装置 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理*** |
CN110264353A (zh) * | 2019-05-28 | 2019-09-20 | 必成汇(成都)科技有限公司 | 基于内存的高可用交易撮合***及方法 |
Non-Patent Citations (4)
Title |
---|
JAEYOUNG DO JAEYOUNG DO UNIVERSITY OF WISCONSIN-MADISON, MADISON, WI, USA VIEW PROFILE: "Turbocharging DBMS buffer pool using SSDs", PROCEEDINGS OF THE 2011 ACM SIGMOD INTERNATIONAL CONFERENCE ON MANAGEMENT OF DATA * |
刘翔;童薇;刘景宁;冯丹;陈劲龙;: "动态内存分配器研究综述", no. 10 * |
姚金成;张世栋;史玉良;李庆忠;: "基于Chunk Folding的多租户数据库缓存管理机制" * |
笑笑东风: "Buffer Poll基础知识", pages 1 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114037506A (zh) * | 2021-10-21 | 2022-02-11 | 深圳市道旅旅游科技股份有限公司 | 工单分配方法、装置、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110928680B (zh) | 2023-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10303596B2 (en) | Read-write control method for memory, and corresponding memory and server | |
CA2209549C (en) | Method and apparatus for loading data into a database in a multiprocessor environment | |
CN100375067C (zh) | 异构多核微处理器局部空间共享存储方法 | |
US4707784A (en) | Prioritized secondary use of a cache with simultaneous access | |
CN101382953B (zh) | 在用户空间访问文件***的接口***与文件读、写方法 | |
US9189389B2 (en) | Memory controller and memory system | |
US20070156997A1 (en) | Memory allocation | |
CN105684020B (zh) | 硬件平台中的订单账簿管理设备 | |
US7539689B2 (en) | Bundling database | |
US6742078B1 (en) | Management, data link structure and calculating method for flash memory | |
CN101986649B (zh) | 应用于电信行业计费***的共享数据中心 | |
EP0032956B1 (en) | Data processing system utilizing hierarchical memory | |
US6381686B1 (en) | Parallel processor comprising multiple sub-banks to which access requests are bypassed from a request queue when corresponding page faults are generated | |
CN100517305C (zh) | 阴影分页 | |
CN106775462A (zh) | 一种读写过程中减少内存拷贝的方法和装置 | |
CN101661437A (zh) | 旁路转换缓冲器以及在其中进行地址匹配的方法和装置 | |
CN110928680A (zh) | 一种适用于证券交易***的订单内存分配方法 | |
CN110020954B (zh) | 一种收益分配方法、装置及计算机设备 | |
US6704753B1 (en) | Method of storage management in document databases | |
CN104751362A (zh) | 一种订单提交方法及装置 | |
KR100288680B1 (ko) | 기억수단의제어방법및장치 | |
CN114549129A (zh) | 一种低延时高吞吐的实时订单簿生成方法 | |
Simons | Cheap computers bridge digital divide | |
JPS601670B2 (ja) | 処理デ−タ伝送方式 | |
JP2913591B2 (ja) | オンライン・ジャーナル取得方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |