CN111124506A - 基于应用层的运算卡驱动实现方法 - Google Patents
基于应用层的运算卡驱动实现方法 Download PDFInfo
- Publication number
- CN111124506A CN111124506A CN201911100057.8A CN201911100057A CN111124506A CN 111124506 A CN111124506 A CN 111124506A CN 201911100057 A CN201911100057 A CN 201911100057A CN 111124506 A CN111124506 A CN 111124506A
- Authority
- CN
- China
- Prior art keywords
- application layer
- operation card
- implementation method
- application
- space
- 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.)
- Pending
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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Abstract
本发明公开了一种基于应用层的运算卡驱动实现方法,包括如下步骤:步骤一、在内核空间完成初始化操作;步骤二、在应用层空间完成全部的业务流程。与现有技术相比,本发明的积极效果是:本发明将硬件可DMA的内存和运算卡的控制寄存器映射到用户空间,提供接口允许应用程序直接将数据放入DMA区域,并允许控制运算卡硬件。在运算完成之后异步调用应用程序事先提供的完成函数,避免了大量数据的拷贝操作。并使用异步完成的方式,允许在一个线程里面实现多个复杂运算,避免过多的CPU任务切换导致的CPU消耗。本发明方法充分利用了CPU的运算能力,提高了复杂运算的整体性能。
Description
技术领域
本发明涉及一种基于应用层的运算卡驱动实现方法。
背景技术
随着传输层设备、应用层设备的研发,越来越多的设备需要在应用层来高速调用硬件设备以实现复杂的运算服务。传统的应用调用内核服务的工作模式逐渐无法满足性能需求。
现有的应用层使用运算卡的典型流程如图1所示,包括如下步骤:
(1)应用程序准备好原始数据。发起系统调用,调用驱动程序提供的接口,将原始数据的地址传递给驱动。
(2)驱动程序将应用程序的原始数据拷贝到运算卡可以访问的DMA区域,操作运算卡硬件,发起运算操作。
(3)运算卡硬件从DMA区域获取原始数据,完成复杂运算。并将运算结果回写到DMA区域。并通过CPU中断通知驱动程序。
(4)驱动程序得到运算完成通知。将对应的DMA区域的数据拷贝到对应的应用程序的空间,并唤醒等待的应用程序。
(5)应用程序被驱动程序唤醒,从中断调用返回。一次复杂运算过程完成。
典型的使用流程中,应用程序在完成一次复杂运算操作时,CPU需要将用户的数据拷贝到DMA区域,并需要在运算完成之后将DMA区域的数据回写到用户空间。并且在多任务处理的时候,应用程序频繁调用系统调用,操作系统需要频繁进行任务切换。这些操作大量地消耗CPU的计算,无法充分利用硬件运算卡的运算能力。
发明内容
为了克服现有技术的上述缺点,本发明提供了一种基于应用层的运算卡驱动实现方法,在应用层实现对DMA内存的管理,运算卡硬件的驱动,能避免应用层与内核驱动的数据拷贝和大量的CPU任务切换,充分利用硬件的特性,提高了复杂运算的整体处理性能。
本发明解决其技术问题所采用的技术方案是:一种基于应用层的运算卡驱动实现方法,包括如下步骤:
步骤一、在内核空间完成初始化操作;
步骤二、在应用层空间完成全部的业务流程。
与现有技术相比,本发明的积极效果是:
本发明将硬件可DMA的内存和运算卡的控制寄存器映射到用户空间,提供接口允许应用程序直接将数据放入DMA区域,并允许控制运算卡硬件。在运算完成之后异步调用应用程序事先提供的完成函数,避免了大量数据的拷贝操作。并使用异步完成的方式,允许在一个线程里面实现多个复杂运算,避免过多的CPU任务切换导致的CPU消耗。本发明方法充分利用了CPU的运算能力,提高了复杂运算的整体性能。
附图说明
本发明将通过例子并参照附图的方式说明,其中:
图1为典型运算卡使用流程;
图2为本发明的运算卡使用流程。
具体实施方式
本发明采用了在内核空间完成必要的初始化操作。在用户空间完成运算的业务逻辑。如图2所示,其功能流程如下:
(1)申请大块可用于DMA传输的内存区域。并提供应用层接口直接访问。
a)在操作系统启动之时保留一整块内存(具体保留的内存数量根据业务的处理能力计算)
b)在Linux操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为4KB,因而将会产生较多TLB Miss和缺页中断,从而大大影响应用程序的性能。当操作系统以2MB甚至更大作为分页的单位时,将会大大减少TLB Miss和缺页中断的数量。
本发明使用了Hugetlb技术,使用2M作为分页单位,显著提高程序的性能。
(2)将运算卡的控制寄存器映射到用户空间。允许运算卡应用层驱动来进行访问控制。
a)在内核层使用UIO驱动。对外提供控制寄存器的映射。
b)在应用层使用mmap接口映射控制寄存器到应用空间。
(3)应用程序通过运算卡应用层驱动提供的接口分配可用于DMA传输的内存。并将原始数据写入。
a)根据运算卡DMA内存块尺寸的特点。本发明实现了一种固定尺寸的内存块分配的方法。避免了通用内存分配方法导致内外内存碎片的形成。
因为通用的的内存分配方法无法避免内存的碎片形成。基于运算卡内存使用的特点。本发明采用固定尺寸大小的内存块分配。并结合多核cpu将内存分配与cpu任务对应绑定。运算卡任务采用轮询方式处理,避免cpu之间的同步操作。提高了内存分配的效率。
(4)应用程序调用运算卡应用层驱动提供的接口(并提供运算完成的回调函数)。启动运算。
a)充分结合多核cpu的优势。本发明创建与cpu数量相同的任务,并利用操作系统任务绑定功能(操作系统提供的标准接口)将任务和cpu一一对应绑定。为充分利用多核cpu的优势。运算卡设计了多组独立的控制寄存器。多个任务可以独立互不干扰的操作。有效避免了多个cpu任务之间的同步操作。
(5)运算卡完成运算之后通知应用程序(调用应用程序提供的“回调函数”)
a)本发明改变传统通过硬件中断通知运算完成的方法。运算卡完成运算操作之后回写运算任务的完成标记。驱动程序提供了运算任务是否运算完成的接口(下称“轮询接口”)。用户程序在业务主循环中调用驱动程序的“轮询接口”来主动查询任务的完成情况。在有计算任务完成时,“轮询接口”会调用此前应用程序设置的“回调函数”,完成整个计算任务。这些操作全部在一个任务中完成。避免了硬件中断,任务切换导致的cpu开销和cache失效的消耗。
(6)应用程序收到运算完成通知(回调函数被调用)。一次运算完成。
Claims (8)
1.一种基于应用层的运算卡驱动实现方法,其特征在于:包括如下步骤:
步骤一、在内核空间完成初始化操作;
步骤二、在应用层空间完成全部的业务流程。
2.根据权利要求1所述的基于应用层的运算卡驱动实现方法,其特征在于:步骤一所述初始化操作包括:申请可用于DMA的大块内存映射到应用层空间,以及将运算卡的控制寄存器映射到应用层空间。
3.根据权利要求2所述的基于应用层的运算卡驱动实现方法,其特征在于:采用Hugetlb技术,使操作系统以2MB作为分页的单位,以减少TLB Miss和缺页中断的数量。
4.根据权利要求2所述的基于应用层的运算卡驱动实现方法,其特征在于:所述将运算卡的控制寄存器映射到应用层空间的实现方法为:
a)在内核层使用UIO驱动,对外提供控制寄存器的映射。
b)在应用层使用mmap接口映射控制寄存器到应用空间。
5.根据权利要求1所述的基于应用层的运算卡驱动实现方法,其特征在于:步骤二所述在应用层空间完成的全部业务流程包括:
(1)应用程序通过运算卡应用层驱动提供的接口分配可用于DMA传输的内存,并将原始数据写入;
(2)应用程序调用运算卡应用层驱动提供的接口,并提供运算完成的回调函数,启动运算;
(3)运算卡完成运算之后通知应用程序;
(4)应用程序收到运算完成通知,一次运算完成。
6.根据权利要求5所述的基于应用层的运算卡驱动实现方法,其特征在于:所述内存的分配方法为:采用固定尺寸大小的内存块分配方法。
7.根据权利要求5所述的基于应用层的运算卡驱动实现方法,其特征在于:在进行运算时,创建与cpu数量相同的任务,并利用操作系统任务绑定功能将任务和cpu一一对应绑定;并通过独立的控制寄存器使得多个任务能独立互不干扰地操作。
8.根据权利要求5所述的基于应用层的运算卡驱动实现方法,其特征在于:所述运算卡完成运算之后通知应用程序的方法为:在运算卡完成运算之后回写运算任务的完成标记;用户程序在业务主循环中调用驱动程序提供的轮询接口来主动查询任务的完成情况,在有计算任务完成时,轮询接口会调用回调函数,完成整个计算任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911100057.8A CN111124506A (zh) | 2019-11-12 | 2019-11-12 | 基于应用层的运算卡驱动实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911100057.8A CN111124506A (zh) | 2019-11-12 | 2019-11-12 | 基于应用层的运算卡驱动实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111124506A true CN111124506A (zh) | 2020-05-08 |
Family
ID=70495573
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911100057.8A Pending CN111124506A (zh) | 2019-11-12 | 2019-11-12 | 基于应用层的运算卡驱动实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124506A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699069A (zh) * | 2020-12-28 | 2021-04-23 | 中孚信息股份有限公司 | 一种基于PCIe接口的高速数据传输方法及系统 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1866202A (zh) * | 2005-05-18 | 2006-11-22 | 大唐移动通信设备有限公司 | 嵌入式设备的驱动方法 |
CN101135980A (zh) * | 2006-08-29 | 2008-03-05 | 飞塔信息科技(北京)有限公司 | 一种基于Linux操作系统实现零拷贝的装置和方法 |
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101702688A (zh) * | 2009-11-24 | 2010-05-05 | 武汉绿色网络信息服务有限责任公司 | 一种数据包收发方法 |
CN102045199A (zh) * | 2010-12-17 | 2011-05-04 | 天津曙光计算机产业有限公司 | 一种多路服务器多缓冲区并行发包的性能优化方法 |
CN102088406A (zh) * | 2010-12-17 | 2011-06-08 | 天津曙光计算机产业有限公司 | 一种采用轮询机制的高速报文发送方法 |
CN103870326A (zh) * | 2012-12-11 | 2014-06-18 | 厦门雅迅网络股份有限公司 | 一种将中断处理程序底半部搬移到应用层的方法及应用 |
CN104050101A (zh) * | 2014-05-29 | 2014-09-17 | 汉柏科技有限公司 | 一种实现arm cpu用户态收发报文的方法 |
CN104516839A (zh) * | 2015-01-07 | 2015-04-15 | 王建农 | 一种嵌入式应用系统 |
CN104778138A (zh) * | 2015-04-20 | 2015-07-15 | 中国科学院光电技术研究所 | 一种内核多线程直接存储驱动实现方法 |
CN106126141A (zh) * | 2016-06-17 | 2016-11-16 | 山东大学 | 一种基于Android 终端根据不同接口自动调整分辨率的系统及方法 |
CN106778208A (zh) * | 2016-12-01 | 2017-05-31 | 深圳Tcl新技术有限公司 | 应用程序的访问处理方法及装置 |
-
2019
- 2019-11-12 CN CN201911100057.8A patent/CN111124506A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1866202A (zh) * | 2005-05-18 | 2006-11-22 | 大唐移动通信设备有限公司 | 嵌入式设备的驱动方法 |
CN101135980A (zh) * | 2006-08-29 | 2008-03-05 | 飞塔信息科技(北京)有限公司 | 一种基于Linux操作系统实现零拷贝的装置和方法 |
CN101178694A (zh) * | 2006-11-07 | 2008-05-14 | 莱克斯信息技术(北京)有限公司 | Intel e1000零拷贝的方法 |
CN101702688A (zh) * | 2009-11-24 | 2010-05-05 | 武汉绿色网络信息服务有限责任公司 | 一种数据包收发方法 |
CN102045199A (zh) * | 2010-12-17 | 2011-05-04 | 天津曙光计算机产业有限公司 | 一种多路服务器多缓冲区并行发包的性能优化方法 |
CN102088406A (zh) * | 2010-12-17 | 2011-06-08 | 天津曙光计算机产业有限公司 | 一种采用轮询机制的高速报文发送方法 |
CN103870326A (zh) * | 2012-12-11 | 2014-06-18 | 厦门雅迅网络股份有限公司 | 一种将中断处理程序底半部搬移到应用层的方法及应用 |
CN104050101A (zh) * | 2014-05-29 | 2014-09-17 | 汉柏科技有限公司 | 一种实现arm cpu用户态收发报文的方法 |
CN104516839A (zh) * | 2015-01-07 | 2015-04-15 | 王建农 | 一种嵌入式应用系统 |
CN104778138A (zh) * | 2015-04-20 | 2015-07-15 | 中国科学院光电技术研究所 | 一种内核多线程直接存储驱动实现方法 |
CN106126141A (zh) * | 2016-06-17 | 2016-11-16 | 山东大学 | 一种基于Android 终端根据不同接口自动调整分辨率的系统及方法 |
CN106778208A (zh) * | 2016-12-01 | 2017-05-31 | 深圳Tcl新技术有限公司 | 应用程序的访问处理方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699069A (zh) * | 2020-12-28 | 2021-04-23 | 中孚信息股份有限公司 | 一种基于PCIe接口的高速数据传输方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11449445B2 (en) | Transaction-based hybrid memory | |
US8176220B2 (en) | Processor-bus-connected flash storage nodes with caching to support concurrent DMA accesses from multiple processors | |
KR102371916B1 (ko) | 가상 머신을 지원하는 스토리지 장치, 그것을 포함하는 스토리지 시스템 및 그것의 동작 방법 | |
US9213609B2 (en) | Persistent memory device for backup process checkpoint states | |
US8478926B1 (en) | Co-processing acceleration method, apparatus, and system | |
US20230196502A1 (en) | Dynamic kernel memory space allocation | |
EP3493066A1 (en) | Apparatus and method to provide cache move with non-volatile mass memory system | |
WO2015109338A1 (en) | Unified memory systems and methods | |
US10073644B2 (en) | Electronic apparatus including memory modules that can operate in either memory mode or storage mode | |
CN113760560A (zh) | 一种进程间通信方法以及进程间通信装置 | |
CN109062826B (zh) | 数据传输方法及系统 | |
US7996592B2 (en) | Cross bar multipath resource controller system and method | |
CN114662136A (zh) | 一种基于pcie通道的多算法ip核的高速加解密系统及方法 | |
EP3770759A1 (en) | Wake-up and scheduling of functions with context hints | |
CN117707998A (zh) | 用于分配缓存资源的方法、系统和存储介质 | |
US20120036301A1 (en) | Processor support for filling memory regions | |
CN102291298A (zh) | 一种高效的面向长消息的计算机网络通信方法 | |
CN111124506A (zh) | 基于应用层的运算卡驱动实现方法 | |
US6938118B1 (en) | Controlling access to a primary memory | |
KR20180111737A (ko) | 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 | |
WO2022170452A1 (zh) | 一种访问远端资源的系统及方法 | |
CN102360369A (zh) | 在用户空间文件系统上实现聚合写文件脏页的方法和装置 | |
TWI741357B (zh) | 用於記憶體操作之運算系統及其操作方法 | |
WO2024051292A1 (zh) | 数据处理系统、内存镜像方法、装置和计算设备 | |
Bougioukou et al. | A Hybrid Device Driver for Next-Generation Solid-State Drives |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200508 |