CN107391253B - 一种降低系统内存分配释放冲突的方法 - Google Patents

一种降低系统内存分配释放冲突的方法 Download PDF

Info

Publication number
CN107391253B
CN107391253B CN201710428101.2A CN201710428101A CN107391253B CN 107391253 B CN107391253 B CN 107391253B CN 201710428101 A CN201710428101 A CN 201710428101A CN 107391253 B CN107391253 B CN 107391253B
Authority
CN
China
Prior art keywords
memory
memory pool
pool
index
pools
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.)
Active
Application number
CN201710428101.2A
Other languages
English (en)
Other versions
CN107391253A (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.)
Zhuhai Xishanju Digital Technology Co ltd
Zhuhai Kingsoft Digital Network Technology Co Ltd
Original Assignee
Zhuhai Seasun Mobile Game Technology Co ltd
Zhuhai Kingsoft Online Game Technology 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 Zhuhai Seasun Mobile Game Technology Co ltd, Zhuhai Kingsoft Online Game Technology Co Ltd filed Critical Zhuhai Seasun Mobile Game Technology Co ltd
Priority to CN201710428101.2A priority Critical patent/CN107391253B/zh
Publication of CN107391253A publication Critical patent/CN107391253A/zh
Application granted granted Critical
Publication of CN107391253B publication Critical patent/CN107391253B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5022Mechanisms to release resources

Abstract

本发明的技术方案包括一种降低系统内存分配释放冲突的方法,用于实现:A.服务器启动时,创建由多个等同大小内存池组成的内存池组,初始化索引编号并设置下次被请求的内存池序号;B.根据线程请求,分配所述步骤A设置的内存池序列号,并同时修改索引编号;C.将已分配的内存池编号存储至内存块头部保留字段;D.当已分配内存池释放时,获取保留字段中的内存池编号并发送至对应的内存池。本发明的有益效果为:使得同一时刻的内存分配请求被分散到多个内存池中,降低了多线程分配内存请求时的锁竞争;由于分配的内存分散在多个内存池中,可以降低释放操作导致的锁竞争,可以显著降低内存分配及释放操作带来的锁等待时间。

Description

一种降低系统内存分配释放冲突的方法
技术领域
本发明涉及一种降低系统内存分配释放冲突的方法,属于计算机服务器数据处理领域。
背景技术
服务器需要处理大量用户的请求,大部分服务器都会使用多线程技术来提升多核CPU的利用率,而内存作为一个进程中多个线程的共享资源,当多个线程同时请求内存分配或释放时,为了保持内存的正确性,操作系统会使用线程锁,每次只能执行一个线程的请求,其他线程则需要等待线程锁,待前一个分配请求完成后再继续执行,因而降低了系统并发度。
一般来说,服务器会通过设置内存池,避免每次内存的申请与释放都通过调用系统提供的相关API接口,部分服务器也会根据分配的内存大小,对内存池的设计进行相关优化,尽可能提升内存分配与释放的速度,进而提升系统性能。
随着服务器硬件水平的不断提升,操作系统可用的内存越来越大,因此服务器可用内存也越大,通过在服务器启动时,分配多个内存池(每个内存池预先分配一定数量的内存),组成内存池组,每次请求内存分配时,依据一定的算法,从内存池组中挑选一个内存池,然后从该内存池中分配内存,并在分配的内存的头部保留一个字段用来记录内存池编号,当该内存被释放时,根据其头部保留字段存储的编号,释放到对应的内存池中。同一时刻多个线程请求内存分配时,每个线程选择的内存池不一样,这些线程可以并发的执行内存分配请求,从而可以提升系统并发度。
发明内容
针对现有技术的不足,本发明的技术方案提供了一种降低系统内存分配释放冲突的方法,用于将内存分配及释放请求分散在多个内存池中,以降低多线程内存分配释放操作导致的冲突,提高多线程并发度从而提升系统性能。
本发明的技术方案包括一种降低系统内存分配释放冲突的方法,其特征在于,该方法包括:A.服务器启动时,创建由多个等同大小内存池组成的内存池组,初始化索引编号并设置下次被请求的内存池序号;B.根据线程请求,分配所述步骤A设置的内存池序列号,并同时修改索引编号;C.将已分配的内存池编号存储至内存块头部保留字段;D.当已分配内存池释放时,获取保留字段中的内存池编号并发送至对应的内存池。
根据所述的降低系统内存分配释放冲突的方法,其中的步骤A还包括:启动服务器进程,创建多个内存池,其内存池编号依次为[0,1,2...(N-1)],内存池编号为[0,1,2...(N-1)]中所有内存池组成一个内存池组,并为每个内存池组分配等同大小的内存空间;创建与内存池对应的索引编号Index,使用Index记录下一次内存分配请求应该选择的内存池序号,并将Index初始化为0。
根据所述的降低系统内存分配释放冲突的方法,其中的步骤B还包括:当服务器线程请求分配内存时,使用Index对应编号的内存池进行内存分配,并在被分配内存块中增加一个保留字段,以及,修改Index为(Index+1)(mod N);当其他服务器线程再次请求分配内存时,自动循环分配后续编号的内存池。
根据所述的降低系统内存分配释放冲突的方法,其中的步骤D还包括:服务器使用分配的内存存储用户请求的数据包和/或待发送给用户的响应包,当完成请求和/或响应处理后释放内存块,取出内存块中对应的内存池编号,并将取出的内存池编号对应的内存释放至[0,1,2...(N-1)]内存池组中。
本发明的有益效果为:使用内存池组,使得同一时刻的内存分配请求被分散到多个内存池中,降低了多线程分配内存请求时的锁竞争;由于分配的内存分散在多个内存池中,因此释放时,也可以降低释放操作导致的锁竞争。在对游戏服务器进行压力测试时,通过分析,可以显著降低内存分配及释放操作带来的锁等待时间。
附图说明
图1所示为根据本发明实施方式的总体流程图;
图2所示为根据本发明实施方式的内存变化图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的降低系统内存分配释放冲突的方法适用于服务器内存释放,特别是游戏服务器。
图1所示为根据本发明实施方式的总体流程图。A.服务器启动时,创建由多个等同大小内存池组成的内存池组,初始化索引编号并设置下次被请求的内存池序号;B.根据线程请求,分配所述步骤A设置的内存池序列号,并同时修改索引编号;C.将已分配的内存池编号存储至内存块头部保留字段;D.当已分配内存池释放时,获取保留字段中的内存池编号并发送至对应的内存池。
图2所示为根据本发明实施方式的内存变化图。其交互如下所示:
启动游戏服务器,并在初始化时分配20(编号为0,1,2…19)个内存池,每个内存池保留200MB内存,该游戏服务器会启动多个线程服务用户请求,假设有L1,L2,L3,L4等4个线程。同时使用一个全局变量index(索引序号)记录下一次内存分配请求应该选择的内存池序号,将其初始化为0;
当线程L1分配16字节的内存,此时index的值为0,使用0号内存池分配内存块,并把应分配的内存大小改为20个字节(使用4个字节来保存内存池编号),此时刚好L2线程也需要分配内存,由于index在L1选中内存池后会自增,已变为1,因此,L2线程会使用1号内存池来进行内存分配。其他更多的内存分配会依次在0-19内存池中依次循环选中内存池;
在分配的内存块首部4个字节的保留字段中存储内存池编号;
游戏服务器使用分配的内存存储用户请求的数据包或待发送给用户的响应包,请求或响应处理完毕后释放内存块,释放时先取出内存块中内存池编号,然后将内存释放到相应编号(0,1,2…19)的内存池中。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。

Claims (3)

1.一种降低系统内存分配释放冲突的方法,其特征在于,该方法包括:
A.服务器启动时,创建由多个等同大小内存池组成的内存池组,初始化索引编号并设置下次被请求的内存池序号;
B.根据线程请求,分配所述步骤A设置的内存池序列号,并同时修改索引编号;
C.将已分配的内存池编号存储至内存块头部保留字段;
D.当已分配内存池释放时,获取保留字段中的内存池编号并发送至对应的内存池;
所述的步骤B还包括:
当服务器线程请求分配内存时,使用Index对应编号的内存池进行内存分配,并在被分配内存块中增加一个保留字段,以及,修改Index为(Index+1)(mod N);
当其他服务器线程再次请求分配内存时,自动循环分配后续编号的内存池。
2.根据权利要求1所述的降低系统内存分配释放冲突的方法,其特征在于,所述的步骤A还包括:
启动服务器进程,创建多个内存池,其内存池编号依次为[0,1,2...(N-1)],内存池编号为[0,1,2...(N-1)]中所有内存池组成一个内存池组,并为每个内存池组分配等同大小的内存空间;
创建与内存池对应的索引编号Index,使用Index记录下一次内存分配请求应该选择的内存池序号,并将Index初始化为0。
3.根据权利要求1所述的降低系统内存分配释放冲突的方法,其特征在于,所述的步骤D还包括:
服务器使用分配的内存存储用户请求的数据包和/或待发送给用户的响应包,当完成请求和/或响应处理后释放内存块,取出内存块中对应的内存池编号,并将取出的内存池编号对应的内存释放至[0,1,2...(N-1)]内存池组中。
CN201710428101.2A 2017-06-08 2017-06-08 一种降低系统内存分配释放冲突的方法 Active CN107391253B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710428101.2A CN107391253B (zh) 2017-06-08 2017-06-08 一种降低系统内存分配释放冲突的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710428101.2A CN107391253B (zh) 2017-06-08 2017-06-08 一种降低系统内存分配释放冲突的方法

Publications (2)

Publication Number Publication Date
CN107391253A CN107391253A (zh) 2017-11-24
CN107391253B true CN107391253B (zh) 2020-12-08

Family

ID=60333232

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710428101.2A Active CN107391253B (zh) 2017-06-08 2017-06-08 一种降低系统内存分配释放冲突的方法

Country Status (1)

Country Link
CN (1) CN107391253B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110069336A (zh) * 2018-01-22 2019-07-30 合肥杰发科技有限公司 内存资源分配方法、分配装置、芯片和存储装置
CN112995239B (zh) * 2021-05-24 2021-08-03 武汉中科通达高新技术股份有限公司 一种数据处理方法和装置
CN113032156B (zh) * 2021-05-25 2021-10-15 北京金山云网络技术有限公司 内存分配方法和装置、电子设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1556475A (zh) * 2004-01-02 2004-12-22 中兴通讯股份有限公司 嵌入式实时操作系统中内存释放的方法
CN100359489C (zh) * 2004-07-13 2008-01-02 中兴通讯股份有限公司 一种嵌入式实时操作系统中内存分配的方法
CN101140531A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 快速申请内存的方法
CN102063385A (zh) * 2010-12-23 2011-05-18 深圳市金宏威实业发展有限公司 一种内存管理方法和系统
CN103399825A (zh) * 2013-08-05 2013-11-20 武汉邮电科学研究院 一种无锁化内存申请释放方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19740694A1 (de) * 1997-09-16 1999-03-18 Siemens Ag Schaltungsanordnung zur Behandlung von Zugriffskonflikten
US7516291B2 (en) * 2005-11-21 2009-04-07 Red Hat, Inc. Cooperative mechanism for efficient application memory allocation
CN104881324A (zh) * 2014-09-28 2015-09-02 北京匡恩网络科技有限责任公司 一种多线程下的内存管理方法
CN104915151B (zh) * 2015-06-02 2018-12-07 杭州电子科技大学 多虚拟机系统中一种主动共享的内存超量分配方法
CN106569745B (zh) * 2016-10-25 2019-07-19 暨南大学 一种内存过载下面向重复数据删除的内存优化系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1556475A (zh) * 2004-01-02 2004-12-22 中兴通讯股份有限公司 嵌入式实时操作系统中内存释放的方法
CN100359489C (zh) * 2004-07-13 2008-01-02 中兴通讯股份有限公司 一种嵌入式实时操作系统中内存分配的方法
CN101140531A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 快速申请内存的方法
CN102063385A (zh) * 2010-12-23 2011-05-18 深圳市金宏威实业发展有限公司 一种内存管理方法和系统
CN103399825A (zh) * 2013-08-05 2013-11-20 武汉邮电科学研究院 一种无锁化内存申请释放方法

Also Published As

Publication number Publication date
CN107391253A (zh) 2017-11-24

Similar Documents

Publication Publication Date Title
US10891158B2 (en) Task scheduling method and apparatus
CN109582455B (zh) 多线程任务处理方法、装置及存储介质
US9858241B2 (en) System and method for supporting optimized buffer utilization for packet processing in a networking device
EP3073374B1 (en) Thread creation method, service request processing method and related device
US20110119674A1 (en) Scheduling method, scheduling apparatus and multiprocessor system
CN107391253B (zh) 一种降低系统内存分配释放冲突的方法
WO2011123991A1 (zh) 并行计算的内存访问方法
CN110532067A (zh) 事件处理方法、装置、设备及存储介质
KR20180089273A (ko) 비순차적 리소스 할당을 구현하는 방법 및 장치
CN110727517A (zh) 一种基于分区设计的内存分配方法和装置
CN112269656B (zh) 一种基于多核处理器的应用配置方法、装置和系统
US8490102B2 (en) Resource allocation management using IOC token requestor logic
CN105303307B (zh) 一种分配工作任务的方法及装置
CN107357640B (zh) 多线程数据库的请求处理方法及装置、电子设备
US8589942B2 (en) Non-real time thread scheduling
US20150212859A1 (en) Graphics processing unit controller, host system, and methods
CN111209099B (zh) 基于ganesha服务的多线程池调度方法及调度终端
US8245229B2 (en) Temporal batching of I/O jobs
CN113806049A (zh) 任务排队方法、装置、计算机设备和存储介质
EP3066568B1 (en) System and method for supporting efficient packet processing model and optimized buffer utilization for packet processing in a network environment
CN110908790B (zh) 存储器存储装置及其操作方法
CN109062702B (zh) 一种计算资源分配方法、相关装置及可读存储介质
CN112445619A (zh) 在多线程系统中动态共享有序资源的管理系统和方法
US11914899B2 (en) System for managing access to a memory resource by multiple users
US8566829B1 (en) Cooperative multi-level scheduler for virtual engines

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
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 519000 Room 102, 202, 302 and 402, No. 325, Qiandao Ring Road, Tangjiawan Town, high tech Zone, Zhuhai City, Guangdong Province, Room 102 and 202, No. 327 and Room 302, No. 329

Patentee after: Zhuhai Jinshan Digital Network Technology Co.,Ltd.

Patentee after: Zhuhai Xishanju Digital Technology Co.,Ltd.

Address before: 519000 Jinshan software building, 8 Lanshan lane, Jida Jingshan Hill Road, Zhuhai, Guangdong

Patentee before: ZHUHAI KINGSOFT ONLINE GAME TECHNOLOGY Co.,Ltd.

Patentee before: ZHUHAI SEASUN MOBILE GAME TECHNOLOGY Co.,Ltd.