亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        仿真建模工具內存分配優(yōu)化

        2024-08-03 00:00:00喬仕嶺劉晨王學松孫林丁光亮
        科技創(chuàng)新與應用 2024年22期

        摘 要:在一體化仿真建模工具的性能優(yōu)化時,內存分配優(yōu)化方面提出內存池式分配方式,該分配方式特采用全局內存池基礎實現(xiàn)并加上并行線程內存管理的方法來較好地匹配仿真工具的系統(tǒng)多臨時對象和多動態(tài)分配內存的應用特點,性能測試表明,該內存池具有良好的空間特性和效率,比傳統(tǒng)的操作系統(tǒng)直接分配內存節(jié)省約50.7%的分配時間。

        關鍵詞:內存池;仿真建模工具;分配優(yōu)化;管理模塊;模塊設計

        中圖分類號:TP391 文獻標志碼:A 文章編號:2095-2945(2024)22-0046-04

        Abstract: When optimizing the performance of the integrated simulation modeling tool, the memory pool allocation method is put forward in the aspect of memory allocation optimization. This allocation method is implemented on the basis of global memory pool and the method of parallel thread memory management is used to better match the application characteristics of multi-temporary objects and multi-dynamic memory allocation of the simulation tool. The performance test shows that the memory pool has good space characteristics and efficiency. It saves about 50.7% of the allocation time than the traditional operating system to allocate memory directly.

        Keywords: memory pool; simulation modeling tool; allocation optimization; management module; module design

        當前的仿真建模工具是桌面式低代碼拖拽式多專業(yè)一體化的,系統(tǒng)的可操作性、流暢性、實時性都是系統(tǒng)應用要考慮的因素。在這樣架構的仿真建模工具中,存在著大量對象的頻繁創(chuàng)建和銷毀,這里的運行效率顯然已經(jīng)成為瓶頸。為了保證系統(tǒng)實時性的同時提升工具的綜合性能,內存分配管理尤為關鍵。完全依賴系統(tǒng)內存管理方式難以應對頻繁操作對象所帶來的內存碎片化問題和效率問題,將影響系統(tǒng)的性能和穩(wěn)定性。因此設計一個高效的內存管理模塊尤為必要。內存池式分配模塊能夠優(yōu)化內存管理過程,通過池式的管理能夠有效管理臨時對象的生命周期,減少操作系統(tǒng)層面帶來的內存管理影響。這種方法不僅能減少內存碎片化,提高內存利用率,還能降低操作系統(tǒng)開銷,顯著提升仿真建模工具的執(zhí)行效率和實時性。

        本論文旨在深入探討在多專業(yè)一體化桌面式低代碼仿真建模環(huán)境下,設計內存池模塊的設計與實現(xiàn)。通過對內存池式管理的設計理念、實現(xiàn)機制以及內存分配性能優(yōu)化進行研究,旨在為實時或超實時仿真環(huán)境系統(tǒng)性能提升提供可行的解決方案。同時,此研究也將探索內存池式管理在減少內存碎片化、提升系統(tǒng)穩(wěn)定性及執(zhí)行效率方面的價值。

        1 內存布局

        進程內存布局分為Code Segment、Data Segment、BSS(Block started by symbol)、Heap和Stack等區(qū),Code Segment是存放進程的機器碼,Data Segment是存放已初始化的全局或靜態(tài)變量和常量數(shù)據(jù),BSS是存放未初始化的全局和靜態(tài)變量,Heap是在程序中可動態(tài)操作的內存區(qū)域,Stack 是由編譯器自動管理,用于函數(shù)的形參,局部變量和函數(shù)的返回變量等,如圖1所示;在程序運行時需要頻繁地分配和釋放內存,從而引起內存的內部外部碎片化,內部碎片是由于進程訪問內存為提高效率引入對齊機制以及系統(tǒng)分配內存大于實際內存而未被有效利用,外部碎片主要是由于對象的生命周期不確定,頻繁的分配和釋放操作,以及系統(tǒng)管理內存的算法不完善等原因,逐漸會把內存變成大大小小的空洞和裂隙而不可用。

        仿真建模工具當構建的系統(tǒng)對象比較少的時候,軟件的性能沒有明顯的變化,當構建的仿真模型操作著幾十萬個系統(tǒng)對象時,系統(tǒng)的操作性能和計算性能有著很顯示的下降,這是因為仿真軟件在構建一個仿真系統(tǒng)或計算運行一個仿真系統(tǒng)時,各自存在著不同的生命周期,有些對象還需要頻繁的構建和銷毀,從而造成仿真軟件需要不斷的與操作系統(tǒng)交互操作內存需求,因而內存分配效率低下,同時也使得內存極度碎片化,而仿真系統(tǒng)在執(zhí)行業(yè)務時既有操作流暢性要求又有計算實時性需求,在規(guī)模建模仿真時,內存的碎片化影響系統(tǒng)可操作性和實時性,成為仿真軟件大規(guī)模仿真的瓶頸,因此在系統(tǒng)構建一個合理的內存池,接管系統(tǒng)內存分配和對象管理,改善仿真軟件的運行效率是非常必要的。

        2 內存池設計

        當前的開源的內存池庫在一定程度上可以解決內存的分配效率,但開源的內存池為了使其具有通用性,在一些方面是做了犧牲,像tcmalloc 設計過于復雜,會引起額外的依賴性和復雜性,使其與仿真工具良好的集成和協(xié)作變得困難,仿真工具將變得臃腫而無法發(fā)揮內存池的優(yōu)勢提升性能,jemalloc在內存的管理模式上并不是完全符合仿真工具的需求,比如一些特定的對象的釋放方式可以通過標記模式重復利用來提高系統(tǒng)性能而非真正的釋放對象。因此應結合自研仿真工具的特性,設計一套適合自身需求的內存池是必要的。

        2.1 內存池架構設計

        內存池采用分頁管理模式,按照64 KB每頁的大小分配內存頁空間,內存池將在每頁上連續(xù)分配相應的池空間,規(guī)避一定的跨頁性調度。整體內存池通過哈希桶進行管理,按照系統(tǒng)內存評估所需要的哈希桶數(shù)量,鍵有概率被映射到相同的哈希值,形成哈希沖突。哈希桶可以允許在一個桶中存儲多組數(shù)據(jù)。通過映射函數(shù)定位到哈希桶,可以快速定位存儲數(shù)據(jù)位置,從而利用哈希通實現(xiàn)高效的數(shù)據(jù)訪問操作。

        哈希桶的索引設計根據(jù)64位內存地址字段來確認,將地址分為哈希桶索引段、內存頁索引段、內存池索引號三部分,通過移位及與運算來確認映射函數(shù),實現(xiàn)哈希桶的訪問,如圖2所示。

        哈希桶的數(shù)據(jù)結構關系是通過GlobalHashBucket數(shù)組建立全局哈希數(shù)組,數(shù)組內有指向內存池PoolInfo索引數(shù)組指針,PoolInfo內存池數(shù)組有指向實際的池地址指針,而實際的內存地址則用MemBlock進行管理,用于實際的地址分配,如圖3所示。

        為了便于直接高效管理分配內存池,將內存池按16 B的長度對齊分類,內存池中的塊大小為Size=[24~215],然后通過一個分配AllocSize映射表,通過查表的O(1)的操作,通夠快速找到將所需分配的內存映射到PoolTypeArray數(shù)組中的,AllocSize中存放的是所申請內存大小所對應的PoolTypeArray的索引,索引的計算如下:

        SizeIndex = ((Size +15) >>4);

        PoolTypeArrayIndex= AllocSize [SizeIndex];

        PoolTypeArray中存放的是當前不同Size內存池的分配信息,CurActiveArray是當前所能分配的內存,內存申請時直接從當前的CurActiveArray中分配內存;FullPoolArray是已經(jīng)用完的池,在回收的時候優(yōu)化從內存空間中回收,如圖4所示。

        2.2 內存線程池設計

        由于仿真系統(tǒng)中存在并行計算模塊,在內存池的設計上需要響應并行架構,因此在全局內存池的基礎上進行多線程并行管理,每個線程都有自己所管理的內存池單元以此減少內存池的競爭。線程池也是按照點內存池的塊類型進行管理,塊的大小與PoolTypeArray的相同,通過這種方式每個線程都管理著全局類型的內存池,ThreadBlockArray是線程獨立的,通過設計Tls來實現(xiàn)變量分離,ThreadBlockArray中指向MemBlockArray地址,其中Activelist 是可以分配的內存塊BlockList,BlockList又指向實際可以分配的內存塊,以及線程可分配的內存塊數(shù),MemBlockArray中的FullList則指向本線程已經(jīng)占用的內存塊,回收內存時,本線程內優(yōu)化回收并重復在本線程內利用,如圖5所示。

        3 內存池的實現(xiàn)

        3.1 管理資源初始化

        根據(jù)操作系統(tǒng)的MEMORYSTATUSEX和SYSTEM_INFO 2個結構體數(shù)據(jù),確定進程可以使用的內存空間及分配的內存頁面大小,評估所需要的GlobalHashBucket數(shù)組大小,并初始GlobalHashBucket中的哈希映射索引函數(shù)。通過Tls方法來初步化ThreadBlockArray的獨立存儲空間,確定線程獨立內存池空間,如圖6所示。

        3.2 內存池初步化與內存申請實現(xiàn)

        內存池不主動去開辟池空間,當有內存申請時通過申請驅動內存池空間的初始化。發(fā)起內存申請需求時進入內存線程池,按照16 B對齊確認PoolType,查詢當前線程內存池下是否有可以分配的內存,如有可以分配的內存,則直接從本線程所管理的內存空間中分配內存給申請者,如沒有可以分配的內存則向總的PoolTypeArray中查找當前可以使用的內存池,如有則從池中分配一定量的內存MemBlock到本線程的BlockList所指向的BlockNode下面,用于下次分配使用,同時返回一個MemBlock給申請者,如當前的CurActiveArray中沒有可以用的內存池,則先分配一個頁面的MemBlock 并通過哈希映射函數(shù)將這個Memblock指向Poolinfo,把Poolinfo放入GlobalHashBucket中,然后再回到內存池的內存分配流程,綁定內存到線程的ThreadBlockArray下,分配內存塊給申請者。經(jīng)過以上的流程就實現(xiàn)了內存池初始化、裝配、線程內存池內存獨占和內存分配給申請者的全部過程,如圖7所示。

        3.3 釋放內存

        當需要回收內存時進入內存線程池,通過當前內存塊的地址獲取當前MemBlock的信息判斷回收類型,如是池回收則需MemBlock放入到CurActiveArray所指向的BlockList頭部,如是徹底回收判斷MemBlock所在的內存池中是否全部內存是無效的,如無效則從ThreadBlockArray中卸載這個PoolInfo指向內存池,然后從PoolTypeArray中卸載PoolInfo,從GlobalHashBucket中卸載 PoolInfo,然后調用系統(tǒng)指令回收內存到操作系統(tǒng)。如這個內存池中的內存有效,則進入池回收流程,只將此塊內存回收到當前內存線程池中就結束流程,如圖8所示。

        除此回收流程外,當系統(tǒng)退出的時候,內存池配合系統(tǒng)對象回收機制,檢查是否有內存泄露對象,提升程序可靠性同時內存池在系統(tǒng)退出前將掃描內存池的全部內存狀態(tài),調用操作系統(tǒng)指令回收全部內存。

        4 成果與性能提升

        在配置環(huán)境為:【操作系統(tǒng)為64位Win10操作系統(tǒng),CPU為Intel Core i7-8700 K,內存為16 G*2 DDR】的環(huán)境上測試,進行50次內存分配后統(tǒng)計見表1,內存池的分配耗時為系統(tǒng)直接分配的50.7%,比系統(tǒng)直接分配約節(jié)省了一半時間,開發(fā)內存池式分配系統(tǒng)來代替直接的系統(tǒng)內存分配操作是有意義的。

        5 結束語

        系統(tǒng)采用內存池時分配技術,優(yōu)化了仿真工作的操作性能和計算性能,提升了仿真工具的內存健壯性,后續(xù)可以再結合內存池增加仿真工具的內池使用統(tǒng)計分析,結合分析數(shù)據(jù)來開發(fā)對象池用于系統(tǒng)進一步提升仿真系統(tǒng)性能,同時也由于系統(tǒng)底層的此類完善架構,也使仿真工具系統(tǒng)具備了良性的迭代能力。

        參考文獻:

        [1] 夏立斌,劉曉宇,姜曉巍,等.基于分布式數(shù)據(jù)集的并行計算框架內存優(yōu)化方法[J].計算機工程,2023,49(4):43-51.

        [2] 梁月月.CBase數(shù)據(jù)庫內存管理技術研究與實現(xiàn)[D].西安:西安電子科技大學,2021.

        [3] 藺佳敏.基于C~(++)的高并發(fā)網(wǎng)絡編程的研究[J].電子技術,2020,49(8):36-37.

        [4] 楊帆,高國靜,張怡鋒.并行計算框架的內存優(yōu)化算法研究[J].信息技術,2020,44(8):132-135,140.

        [5] 陳婷婷.面向分布式異構內存池的資源抽象和數(shù)據(jù)放置策略設計與實現(xiàn)[D].武漢:華中科技大學,2020.

        [6] 吳雪松,李志.機載數(shù)傳設備嵌入式應用軟件的內存池設計[J].單片機與嵌入式系統(tǒng)應用,2020,20(3):12-15.

        [7] 段宗曜.應用內存池Socket池構建高性能的IOCP服務器[J].中國新通信,2019,21(12):172-173.

        [8] 薛楠,李斌,王曉華,等.一種基于機載嵌入式系統(tǒng)內存動態(tài)管理方式[J].電腦知識與技術,2019,15(15):281-282.

        [9] 張鑫.面向異構內存池的RDMA傳輸優(yōu)化機制[D].武漢:華中科技大學,2019.

        [10] 許健,于鴻洋.一種Linux多線程應用下內存池的設計與實現(xiàn)[J].電子技術應用,2012,38(11):146-149.

        [11] 郭丙軒,張京莉,張志超.基于內存池的空間數(shù)據(jù)調度算法[J].計算機工程,2008(6):63-64.

        第一作者簡介:喬仕嶺(1982-),男,助理工程師。研究方向為計算機科學與技術。

        国产精品久久婷婷六月丁香| 人妻精品无码一区二区三区| 国产一区二区激情对白在线| 日日噜噜噜夜夜爽爽狠狠视频| 蜜桃人妻午夜精品一区二区三区| 亚洲av老熟女一区二区三区| 欧美老妇交乱视频在线观看| 大桥未久亚洲无av码在线| 国产精品亚洲综合一区在线观看 | 欧美激情国产一区在线不卡| 日本人妻系列一区二区| 国产自拍视频在线观看免费| 国产98色在线 | 国产| 色欲av自慰一区二区三区| 亚洲AV成人无码久久精品在| 在线看片免费人成视久网不卡| 亚洲一区二区刺激的视频| 在线播放真实国产乱子伦| 日韩精品极品免费视频观看| 国产太嫩了在线观看| 摸进她的内裤里疯狂揉她动视频| 日本精品一区二区三本中文| 中文字幕一区二区区免| 亚洲日本精品国产一区二区三区| 亚洲熟妇久久精品| 宝贝把腿张开我要添你下边动态图 | 精品视频一区二区在线观看| 亚洲国产色婷婷久久精品| 妺妺窝人体色www聚色窝仙踪| 欧美性猛交xxxx乱大交丰满| 欧美xxxxx精品| 国产激情在线观看免费视频| 亚洲欧洲国产成人综合在线| 免费人成无码大片在线观看| 日韩精品欧美激情国产一区| 日本岛国大片不卡人妻| 亚洲一区二区三区在线最新| 无码av中文一区二区三区| 深夜福利小视频在线观看| 国产精品久久这里只有精品| 色婷婷精品大在线视频|