![RDMA編程用戶(hù)手冊(cè)-官方中文版-v0.5_第1頁(yè)](http://file4.renrendoc.com/view11/M02/2D/05/wKhkGWWC8raAYNvKAABF4GI5jhg492.jpg)
![RDMA編程用戶(hù)手冊(cè)-官方中文版-v0.5_第2頁(yè)](http://file4.renrendoc.com/view11/M02/2D/05/wKhkGWWC8raAYNvKAABF4GI5jhg4922.jpg)
![RDMA編程用戶(hù)手冊(cè)-官方中文版-v0.5_第3頁(yè)](http://file4.renrendoc.com/view11/M02/2D/05/wKhkGWWC8raAYNvKAABF4GI5jhg4923.jpg)
![RDMA編程用戶(hù)手冊(cè)-官方中文版-v0.5_第4頁(yè)](http://file4.renrendoc.com/view11/M02/2D/05/wKhkGWWC8raAYNvKAABF4GI5jhg4924.jpg)
![RDMA編程用戶(hù)手冊(cè)-官方中文版-v0.5_第5頁(yè)](http://file4.renrendoc.com/view11/M02/2D/05/wKhkGWWC8raAYNvKAABF4GI5jhg4925.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
RDMA中文版1.7修訂記錄Rev.DateChanges5月2015增加章節(jié)BVerbsAPIforExtendedAtomicsSupport”MemoryRegistration(UMR)”增加章節(jié)DCross-ChannelCommunicationsSupport”4月2015增加章節(jié)A“ExperimentalAPIs”1月20143,"TransportModeCapabilities"2月2013(IntroductiontotheProgrammingUserGuide)1:“ProgrammingExamplesUsingRDMAVerbs”9月2012verbs.h中增加新verbs和structures從rdma_cma.hverbs和structures從rdma_verbs.hverbs和structures增加RDMA_CM_EVENTS增加IBV_EVENTS增加IBV_WCStatusCodesVerbs:APM,MulticastSRQ,添加了編程示例RDMAoverIB與RoCE之間差異的討論1月2010更新編程示例附錄A添加了RDMAoE支持8月2009API,RDMA_CM,VPI和多播代碼示例3月2009重新組織編程例子1詞匯術(shù)語(yǔ)描述AccessLayer(VPITM,InfiniBand?,以太網(wǎng),F(xiàn)CoE)的低級(jí)操作系統(tǒng)基礎(chǔ)結(jié)構(gòu)(管道).它包括所有支持上層網(wǎng)絡(luò)協(xié)議的基本傳輸服務(wù)、中間件和管理程序AH(AddressHandle)在UDQPCA(ChannelAdapter)一個(gè)InfiniBand功能CI(ChannelInterface)合,呈現(xiàn)給Verbs編程用戶(hù)的通信管道CM(CommunicationManager)負(fù)責(zé)建立、維持、釋放RCUCQP實(shí)體;服務(wù)ID解析協(xié)議確保了使用UD持指定設(shè)備的QP;每個(gè)終端節(jié)點(diǎn)的IB端口都有一個(gè)CM.Compare&Swap通知遠(yuǎn)程QP64bit這個(gè)值替換成QPCQ(CompletionQueue)一個(gè)包含CQE的隊(duì)列(先進(jìn)選出FIFO)CQE(CompletionQueueEntry)CQWR(狀態(tài),大小等)DMA(DirectMemoryAccess)允許硬件在不經(jīng)CPU移出內(nèi)存Fetch&add通知遠(yuǎn)程QP64bit和QPGUID(GloballyUniqueIDentifier)在一個(gè)子網(wǎng)中,唯一標(biāo)志一個(gè)設(shè)備或組件的64bit數(shù)字GID(GlobalIDentifier)一個(gè)128位的標(biāo)志,用來(lái)標(biāo)志網(wǎng)絡(luò)適配器上的一個(gè)端口,路由器上的一個(gè)端口或者一個(gè)組播;GID128位IPv6(根據(jù)RFC2373),在IBA/約束以更加有效的發(fā)現(xiàn),溝通和路由。GRH(GlobalRoutingHeader)包頭基于IPv6NetworkAdapter允許網(wǎng)絡(luò)中計(jì)算機(jī)之間傳遞數(shù)據(jù)的硬件。HostnetworkadapterIBInfiniBandJoinoperation一個(gè)IBSA發(fā)送請(qǐng)求來(lái)接收多播數(shù)據(jù)包。lkey在MRWR用來(lái)識(shí)別注冊(cè)的內(nèi)存和相關(guān)權(quán)限。LID(LocalIDentifier)16個(gè)LIDLLE(LowLatencyEthernet)在CEE(ConvergedEnhancedEthernet以太網(wǎng))基礎(chǔ)之上的RDMA服務(wù)。CEE允許IB在以太網(wǎng)上傳輸。NA(NetworkAdapter)一個(gè)網(wǎng)絡(luò)鏈接的終端設(shè)備,它執(zhí)行傳輸層功能。MGID(MulticastGroupID)MGID唯一標(biāo)志一個(gè)IB多播組,它由SM管理。SM將每個(gè)MGID都關(guān)聯(lián)一個(gè)MLID,并對(duì)網(wǎng)絡(luò)中的IB交換接收到數(shù)據(jù)包。MR(MemoryRegion)網(wǎng)絡(luò)適配器能利用它們,這些緩沖區(qū)需要先被注冊(cè)。在注冊(cè)期間,一個(gè)L_KeyR_Key用來(lái)關(guān)聯(lián)相應(yīng)的注冊(cè)緩沖區(qū)。MTU(MaximumTransferUnit)(不包括包頭)限度。MW(MemoryWindow)一個(gè)被分配的資源,在與已注冊(cè)的內(nèi)存中一塊特定的區(qū)域綁定后,能被遠(yuǎn)程直接使用。每個(gè)MW都有一個(gè)關(guān)聯(lián)的窗口句柄、一些使用權(quán)限信息和當(dāng)前的R_KeyOutstandingWorkRequest工作隊(duì)列中沒(méi)有被輪詢(xún)到已完成的WRpkey(Partitionkey)pkey標(biāo)志了端口所屬的分區(qū)。pkey大概類(lèi)似于以太網(wǎng)中的VLANID。pkey用來(lái)指向端口的pkey一項(xiàng)。SM(subnetmanager)將每個(gè)端口至少關(guān)聯(lián)一個(gè)pkeyPD(ProtectionDomain)只有內(nèi)部成員才能進(jìn)行交互的域。AHQP互,MRWQQP(QueuePair)為了在網(wǎng)絡(luò)中節(jié)點(diǎn)之間傳遞數(shù)據(jù),將獨(dú)立的WQ打包(發(fā)送隊(duì)列和接收隊(duì)列)。有三種類(lèi)型的QP:UD不可靠數(shù)據(jù)報(bào),UC不可靠連接,RC可靠連接。RC(ReliableConnection)基于面向連接的QPQPQP(具體體現(xiàn)在數(shù)據(jù)的正確性和順序性)RDMA(RemoteDirectMemoryAccess)在不需遠(yuǎn)程計(jì)算機(jī)CPU操作。RDMA_CM(RemoteDirectMemory用來(lái)建立可靠性連接和不可靠性數(shù)據(jù)報(bào)傳輸?shù)腁PI。它為建立連接提供了RDMAAPIAccessCommunicationManager)套接字,同時(shí)又適用于基于QP須通過(guò)專(zhuān)門(mén)的RDMA息機(jī)制。Requestor(通過(guò)發(fā)送一個(gè)請(qǐng)求)Responder在一個(gè)連接中,回復(fù)發(fā)起者發(fā)送的請(qǐng)求命令的的一請(qǐng)求,和要求回復(fù)者接收一條信息。rkey在MR注冊(cè)之后接收到的一個(gè)數(shù)字,對(duì)到來(lái)的RDMA操作進(jìn)行許可認(rèn)證。RNR(ReceiverNotReady)在一個(gè)基于RCQP是RRRQ(ReceiveQueue)一個(gè)用來(lái)存儲(chǔ)用戶(hù)發(fā)送的RR的工作隊(duì)列。RR(ReceiveRequest)是一個(gè)會(huì)被發(fā)送到RQWR,它描述了應(yīng)該把到來(lái)的需要寫(xiě)的數(shù)據(jù)寫(xiě)在哪里。需要注意的是,一個(gè)RDMARR。RTR(ReadyToReceive)一種QP的狀態(tài),它表示某個(gè)RR可以被發(fā)送和處理。RTS(ReadyToSend)一種QP的狀態(tài),它表示某個(gè)SR可以被發(fā)送和處理。SA(SubnetAdministrator)用來(lái)查詢(xún)和操作子網(wǎng)管理數(shù)據(jù)的接口。SGE(Scatter/GatherElements)一個(gè)結(jié)構(gòu),指向本地已注冊(cè)過(guò)的內(nèi)存塊的一部分或小和lkey(和它相關(guān)的權(quán)限信息一起)。S/GArray在WRS/G數(shù)據(jù)當(dāng)成一個(gè)單獨(dú)的數(shù)據(jù)流進(jìn)行發(fā)送,或者將一個(gè)單獨(dú)的數(shù)據(jù)流切分成許多不同的緩沖區(qū)。SM(SubnetManager)配置和管理子網(wǎng)的實(shí)體。它的功能包括:發(fā)現(xiàn)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),分配LID,決定路由策略和設(shè)置路由表,一個(gè)主的SMSM(雙機(jī)熱備模式),初始化子網(wǎng)中交換機(jī)的路由表從而在子網(wǎng)中建立網(wǎng)絡(luò)通路。SQ(SendQueue)用來(lái)存儲(chǔ)用戶(hù)發(fā)送的SR的隊(duì)列。SR(SendRequest)是一個(gè)會(huì)被發(fā)送到SQWR,描述了需要傳輸?shù)臄?shù)據(jù)有多大、數(shù)據(jù)的目標(biāo)位置以及傳輸?shù)姆绞剑ň唧w的操作碼會(huì)確定傳輸方式)。SRQ(ShareReceiveQueue)一個(gè)保存著接收到的信息的WQE息可以來(lái)自于任何相關(guān)的RC/UC/UD的QP.多個(gè)QPSRQTCA(TargetChannelAdapter)一個(gè)不需要支持verbI/OUC(UnreliableConnection)基于面向連接的QPQPQP可能丟失。UD(UnreliableDatagram)一種QPUDQP能和子網(wǎng)中其它的UDQP消息在傳遞的過(guò)程中可能會(huì)丟失并且到達(dá)順序可能會(huì)混亂。UDQP。UD據(jù)包的大小受限于MTUVerbs網(wǎng)絡(luò)適配器的功能的一種抽象描述。使用Verbs,任何應(yīng)用都能創(chuàng)建和管理用于RDMA。VPI(VirtualProtocolInterface)允許用戶(hù)能夠改變端口的2層協(xié)議。WQ(WorkQueue)SQRQWQE(WorkQueueElement)讀音為"wookie",是WQ(工作隊(duì)列)中的一個(gè)元素。WR(WorkRequest)用戶(hù)提交至WQ(工作隊(duì)列)的一個(gè)請(qǐng)求。RDMAInfiniBandInfiniBand(IB)是一種服務(wù)器和存儲(chǔ)器的互聯(lián)技術(shù),它具有高速、低延遲、低CPUInfiniBand。InfiniBand之間、服務(wù)器和存儲(chǔ)設(shè)備之間的數(shù)據(jù)傳輸不需要主機(jī)的CPU的參與。InfiniBandI/O(16M個(gè))進(jìn)行數(shù)據(jù)傳輸,每個(gè)I/ONIC或HCA(安全,隔離等)。InfiniBand10Gb/s(SDR)至InfiniBand性使它在很多領(lǐng)域成為最佳的性能和性?xún)r(jià)比的服務(wù)器內(nèi)聯(lián)方案,這些領(lǐng)域包括:高性能計(jì)算、云計(jì)算、Web2.0用。InfiniBandIBTA虛擬協(xié)議互聯(lián)(VPI)MellanoxVPIIBEthernet延遲和高可靠性,保障了適配器和交換機(jī)這些設(shè)備之間的數(shù)據(jù)傳輸。一個(gè)VPI適配器或交換機(jī)可以通過(guò)使用IBEthernet方式。例如,一個(gè)雙端口的VPI一個(gè)適配器(HCA)配置兩個(gè)IB端口;一個(gè)網(wǎng)卡(NIC)配置兩個(gè)Ethernet端口;一個(gè)適配器同時(shí)配置一個(gè)IBEthernet類(lèi)似地,一個(gè)VPIIBEthernet口或者有IBEthernet端口同時(shí)工作。MellanoxVPIIBRDMAEthernetRoCERDMARoCE(Ethernet)的RDMAIBTA制定的。RoCERDMATCP(例如,iWARP)。RoCE是現(xiàn)在最有效的以太網(wǎng)低延遲方案。它消耗很少的CPU負(fù)載,它在數(shù)據(jù)中心橋接以太網(wǎng)中利用優(yōu)先流控制(PFC)來(lái)達(dá)到網(wǎng)絡(luò)的無(wú)損連通。自從FabricsSoftwareRoCE不同RDMA技術(shù)的比較目前,有三種支持RDMAIBRoCEiWARP。這三種技術(shù)使用本文中定義的同一API,但它們有著不同的物理層和鏈路層。在以太網(wǎng)解決方案中,RoCEiWARPRoCE在Windows(IB)。RDMAIPRDMA機(jī)上的虛擬內(nèi)存。消息服務(wù)可以用來(lái)進(jìn)行網(wǎng)絡(luò)中進(jìn)程的通信(IPC)、與遠(yuǎn)程服務(wù)器進(jìn)行通信和在一些上層協(xié)議(ULPs)的協(xié)助下與存儲(chǔ)設(shè)備進(jìn)行數(shù)據(jù)傳遞。上層協(xié)議(ULPs)有很多,例如:iSCSIRDMA(iSER)、SCSIRDMA議(SRP)、SMB、Samba、Lustre、ZFSRDMA利用棧旁路和零拷貝技術(shù)提供了低延遲的特性,同時(shí),減少了CPU占用,減少了內(nèi)存帶寬瓶頸,提供了很高的帶寬利用率。RDMA處得益于RDMA的技術(shù)。RDMAIORDMA備對(duì)遠(yuǎn)程的虛擬內(nèi)存進(jìn)行直接的讀寫(xiě)。在傳統(tǒng)的套接字網(wǎng)絡(luò)中,應(yīng)用程序要向操作系統(tǒng)申請(qǐng)使用網(wǎng)絡(luò)資源時(shí),要通過(guò)特定的API,RDMA直接的消息傳遞。一個(gè)消息可以是RDMA/接收操作。IB和RoCEIB在鏈路層提供的特性有:基于信任的流控制機(jī)制用來(lái)進(jìn)行擁塞控制。它也支持使用虛擬局域網(wǎng)(VLs),IB輸層提供可靠性和交付性保障。IB網(wǎng)絡(luò)層擁有的特性使它能夠很簡(jiǎn)單地在應(yīng)用程序的虛擬內(nèi)存之間傳遞消息,盡管應(yīng)用參與通信的應(yīng)用程序運(yùn)行在不同的物理服務(wù)器上。因此,將IB層和軟件傳輸接口組合起來(lái),可以看成是一種RDMA輸接口的整個(gè)協(xié)議棧,包含了IB最重要的一點(diǎn)是,每個(gè)應(yīng)用程序都能直接訪問(wèn)集群中的設(shè)備的虛擬內(nèi)存。境相比,傳統(tǒng)網(wǎng)絡(luò)中共享的網(wǎng)絡(luò)資源歸操作所有,不能由用戶(hù)態(tài)程序直接使獲取網(wǎng)線上的數(shù)據(jù),并將數(shù)據(jù)放到虛擬緩沖區(qū)中。TCP/IP/Ethernet是一種面向字節(jié)流的傳輸方式,信息以字節(jié)的形式在套接字應(yīng)用程序之間傳遞。TCP/IP(傳輸過(guò)程中數(shù)據(jù)可能丟失或者失序),但是它利用傳輸控制協(xié)議(TCP)來(lái)實(shí)現(xiàn)可靠性機(jī)制。TCP/IP系統(tǒng)把這些字節(jié)數(shù)據(jù)放入內(nèi)存中屬于操作系統(tǒng)的一個(gè)匿名緩沖區(qū),當(dāng)數(shù)據(jù)傳輸程在每個(gè)包到達(dá)時(shí)都會(huì)重復(fù)執(zhí)行,直到整個(gè)字節(jié)流被接收到。TCP因擁塞導(dǎo)致的丟包進(jìn)行重發(fā)。在IB請(qǐng)求了RDMAIB些IB網(wǎng)絡(luò),被直接發(fā)送到接收程序的虛擬內(nèi)存中,并在其中被組合為一個(gè)完整的消息。當(dāng)整個(gè)消息都到達(dá)時(shí),接收程序會(huì)接收到提示。這樣,發(fā)送程序和接收程序在直到整個(gè)消息被發(fā)送到達(dá)接收程序的緩沖區(qū)之前都不會(huì)被打擾中斷。主要構(gòu)件這些僅在部署IBRoCE的優(yōu)勢(shì)的背景下呈現(xiàn)。我們不討論電纜和連接器。HostChannelAdapterHCA為一個(gè)IB終端節(jié)點(diǎn)(例如一個(gè)服務(wù)器)連接到IB(NIC)NIC做更多的事情。HCA在操作系統(tǒng)的控制下提供了地址翻譯機(jī)制,允許應(yīng)用程序直接使用HCAHCA能夠在用戶(hù)態(tài)程序下對(duì)內(nèi)存進(jìn)行使用。應(yīng)用程序直接使HCA能將這些虛擬地址翻譯為物理地址,這樣就實(shí)現(xiàn)了消息的有效傳輸。RangeExtendersIB將傳輸通路加入到WAN中,來(lái)實(shí)現(xiàn)的網(wǎng)絡(luò)范圍的擴(kuò)展。同時(shí),增加了足夠的buffercredit(BBC)WAN上能夠滿(mǎn)帶寬運(yùn)行。SubnetManagerIB子網(wǎng)管理器給每個(gè)連接到子網(wǎng)中的端口分配一個(gè)局部的ID(LID),并且基于這些LID,構(gòu)建了一個(gè)路由表。IB子網(wǎng)管理器是一個(gè)軟件定義網(wǎng)絡(luò)能夠消除網(wǎng)絡(luò)連接的復(fù)雜性,使創(chuàng)建超大規(guī)模的計(jì)算和存儲(chǔ)體系成為可能。SwitchesIB交換機(jī)與標(biāo)準(zhǔn)的網(wǎng)絡(luò)中的交換中在概念上是相似的,但它的設(shè)計(jì)是為了迎合IB的性能需求。IB交換機(jī)在IB的鏈路層實(shí)施了流控制,一是為了防止數(shù)據(jù)包的丟失,二是為了支持擁塞控制和自適應(yīng)路由,同時(shí)也為了保證良好的服務(wù)質(zhì)量。很多IB交換機(jī)都包含一個(gè)子網(wǎng)管理器。至少需要一個(gè)子網(wǎng)管理器來(lái)配置一個(gè)IB網(wǎng)絡(luò)。對(duì)現(xiàn)有應(yīng)用的支持和ULPs基于IP的應(yīng)用可以在IB網(wǎng)絡(luò)中運(yùn)行,需要用到IPoverIB(IPoIB)或者EthernetoverIB(EoIB)RDSULPs。存儲(chǔ)型的應(yīng)用可以利用iSER,SRP,RDS,NFS,ZFS,SMB等等。MPI和網(wǎng)絡(luò)管理也是支持的ULPs,但不在本文討論范圍之內(nèi)。參考條目IBTAIntrotoIBforEndUsersMellanoxInfiniBandFAQ_FQ_100.pdfMellanoxWP_2007_IB_Software_and_Protocols.pdfMellanox的驅(qū)動(dòng)和固件可以在Mellanox的技術(shù)網(wǎng)站上下載:\hRDMAVPI架構(gòu)允許在用戶(hù)態(tài)下直接對(duì)硬件進(jìn)行訪問(wèn)。Mellanox提供了一個(gè)動(dòng)態(tài)verbs的APIverbs和與之相關(guān)的輸入、輸出、描述和被暴露在操作系統(tǒng)編程接口的功能。標(biāo)注:verbs僅適用于用戶(hù)態(tài),如果想查看內(nèi)核態(tài)的verbs,可以查看頭文件。RDMA的網(wǎng)絡(luò)程序。這種定制和VPI系統(tǒng)有著豐富知識(shí)和經(jīng)驗(yàn)的程序員才能勝任。RDMA操作,首選需要建立與遠(yuǎn)程主機(jī)的連接和適當(dāng)?shù)恼J(rèn)證。實(shí)現(xiàn)這些的機(jī)制是隊(duì)列對(duì)(QP)。與標(biāo)準(zhǔn)的IP協(xié)議棧類(lèi)似,一個(gè)QP大概等同于一個(gè)套接字(socket)。QP需要在連接兩端進(jìn)行初始化。連接管理器(CM)QP建立之前進(jìn)行QP信息的交換。一旦一個(gè)QP建立起來(lái),verbsAPIRDMA讀/寫(xiě)和原子操作。與套接字的讀/寫(xiě)類(lèi)似的連續(xù)收/發(fā)操作也能執(zhí)行。可以使用的傳輸操作發(fā)送/帶即時(shí)數(shù)的發(fā)送發(fā)送操作允許你把數(shù)據(jù)發(fā)送到遠(yuǎn)程QP的接收隊(duì)列里。接收端必須已經(jīng)事位置。送到接收端是作為接收的通知,不包含在數(shù)據(jù)緩沖之中。接收附帶一個(gè)即時(shí)數(shù)。接收端應(yīng)用程序負(fù)責(zé)接收緩沖區(qū)的維護(hù)和發(fā)布。RDMA從遠(yuǎn)程主機(jī)讀取部分內(nèi)存。調(diào)用者指定遠(yuǎn)程虛擬地址,像本地內(nèi)存地址一它的內(nèi)存。一旦權(quán)限設(shè)置完成,RDMA讀操作就可以在對(duì)遠(yuǎn)程主機(jī)沒(méi)有任何RDMARDMA寫(xiě),遠(yuǎn)程主機(jī)都不會(huì)意識(shí)到操作正在執(zhí)行(除了權(quán)限和相關(guān)資源的準(zhǔn)備操作)。RDMA/帶即時(shí)數(shù)的RDMARDMA寫(xiě)操作在執(zhí)行時(shí)不通RDMA寫(xiě)操作會(huì)將即時(shí)數(shù)通知給遠(yuǎn)程主機(jī)。原子獲取與加/原子比較和交換RDMA操作的原子操作擴(kuò)展。的數(shù)返回給調(diào)用者。原子比較和交換操作,原子性地將特定虛擬地址中的數(shù)與另一個(gè)特定的數(shù)傳輸模式在建立一個(gè)QP的時(shí)候,有幾種不同的傳輸模式可供選擇。每種模式中可用的操作如下表所示。RD操作在此API中不支持??煽窟B接(RC)一個(gè)QP只和一個(gè)另外的QP相連。消息通過(guò)一個(gè)QP的發(fā)送隊(duì)列可靠地傳輸?shù)搅硪粋€(gè)QP的接收隊(duì)列。數(shù)據(jù)包按序交付。RC連接很類(lèi)似于TCP連接。不可靠連接(UC)一個(gè)QP只和一個(gè)另外的QP相連。連接是不可靠的,所以數(shù)據(jù)包有可能會(huì)丟失。傳輸層出錯(cuò)的消息不會(huì)進(jìn)行重傳,錯(cuò)誤處理必須由高層的協(xié)議來(lái)進(jìn)行。不可靠數(shù)據(jù)報(bào)(UD)一個(gè)QPUDQP進(jìn)行數(shù)據(jù)傳輸和單包數(shù)據(jù)的接收。(一對(duì)多)。UDUDP連接。關(guān)鍵概念發(fā)送請(qǐng)求(SR)RDMA、到哪SR。接收請(qǐng)求(RR)RRRDMA操作接收到的數(shù)據(jù)的緩沖區(qū)。如沒(méi)有定義RDMA寫(xiě)操作,那么接收者將會(huì)發(fā)出接收未就緒的錯(cuò)誤(RNR)。結(jié)構(gòu)ibv_recv_wrRR。(CQ)(CQ)完成隊(duì)列包含了發(fā)送到工作隊(duì)列(WQ)中已完成的工作請(qǐng)求(WR)WR執(zhí)行完畢(包括成功完成的WR和不成功完成的WR)。(狀態(tài)、操作碼、大小、來(lái)源)的機(jī)制。CQ有n個(gè)完成隊(duì)列實(shí)體(CQE)。CQECQ創(chuàng)建的時(shí)候被指定。CQECQ中被刪除。CQCQE的先進(jìn)選出(FIFO)隊(duì)列。多個(gè)不同QP中的工作請(qǐng)求(WQ)CQCQ。內(nèi)存注冊(cè)(MR)內(nèi)存注冊(cè)機(jī)制允許應(yīng)用程序申請(qǐng)一些連續(xù)的虛擬內(nèi)存空間或者連續(xù)的物理使用虛擬地址。(為了防止頁(yè)被替換出去,同時(shí)保持物理和虛擬內(nèi)存的映射)在注冊(cè)期間,操作系統(tǒng)檢查被注冊(cè)塊的許可。注冊(cè)進(jìn)程將虛擬地址與物理地址的映射表寫(xiě)入網(wǎng)絡(luò)適配器。讀、遠(yuǎn)程寫(xiě)、原子操作、綁定。每個(gè)內(nèi)存注冊(cè)(MR)有一個(gè)遠(yuǎn)程的和一個(gè)本地的標(biāo)志(r_key,l_key)。本HCA用來(lái)訪問(wèn)本地內(nèi)存,例如在接收數(shù)據(jù)操作的期間。遠(yuǎn)程HCARDMA操作期間允許遠(yuǎn)程進(jìn)程訪問(wèn)本地的系統(tǒng)內(nèi)存。(甚至設(shè)置不同的操作權(quán)限),并且每次注冊(cè)都會(huì)生成不同的標(biāo)志。結(jié)構(gòu)ibv_mr用來(lái)描述內(nèi)存注冊(cè)。內(nèi)存窗口(MW)窗口(MW)作用于以下應(yīng)用場(chǎng)景:緩沖區(qū)取消注冊(cè)/再注冊(cè)或者重注冊(cè),有些更低的性能損耗代價(jià)。沖區(qū)中的不同范圍內(nèi)授予那些權(quán)限。內(nèi)存窗口和內(nèi)存注冊(cè)之間的關(guān)聯(lián)操作稱(chēng)為綁定。不同的MW可以作用于同一個(gè)MR(即使有著不同的訪問(wèn)權(quán)限)。地址向量(AddressVector)地址向量用來(lái)描述本地節(jié)點(diǎn)到遠(yuǎn)程節(jié)點(diǎn)的路由。在QPUC/RC中,都有一個(gè)地址向量存在于QP的上下文中。UD的QP中,每個(gè)提交的發(fā)送請(qǐng)求(SR)中都應(yīng)該定義地址向量。ibv_ah用來(lái)描述地址向量。全局路由頭部(GRH)GRHRoCE時(shí),GRH用于子網(wǎng)內(nèi)部的路GRH是為了保證應(yīng)用程序即支持IB又支RoCE。UD的QP40字節(jié)會(huì)包含有一個(gè)GRH。這個(gè)區(qū)域是專(zhuān)門(mén)用來(lái)存儲(chǔ)全局路由信息的,為了回應(yīng)接收到的數(shù)據(jù)包,會(huì)產(chǎn)生出一個(gè)合適的地址向量。如果GRH用在UD中,接收請(qǐng)求(RR)40字節(jié)用來(lái)存儲(chǔ)GRH。ibv_grh用來(lái)描述GRH。保護(hù)域(PD)可以是AH,QP,MRSRQ。(QP)與內(nèi)存注冊(cè)和內(nèi)存窗口想關(guān)聯(lián),這是一種授權(quán)和管理網(wǎng)絡(luò)適配器對(duì)主機(jī)系統(tǒng)內(nèi)存的訪問(wèn)。(UD)QP關(guān)聯(lián)到地址處理(AH),這UD目的端的訪問(wèn)控制。ibv_pd用來(lái)描述保護(hù)域。異步事件網(wǎng)絡(luò)適配器可能會(huì)發(fā)送異步事件來(lái)通知子網(wǎng)管理器(SW)系統(tǒng)中發(fā)生的事件。有兩種異步事件:附屬事件:這些事件在私有對(duì)象(CQ,QP,SRQ)中發(fā)生的事件。這些事件會(huì)被發(fā)送到特定的進(jìn)程。非附屬事件:這些事件在全局對(duì)象(網(wǎng)絡(luò)適配器,端口錯(cuò)誤)中發(fā)生的事件。這些事件會(huì)被發(fā)送到所有進(jìn)程。分散聚合(ScatterGather)用分散聚合元素來(lái)分散和聚合數(shù)據(jù)。這些元素包括:頭。大?。簲?shù)據(jù)的大小會(huì)寫(xiě)到這個(gè)地址或者從這個(gè)地址讀取。MR的本地標(biāo)志。ibv_sge用來(lái)描述分散聚合元素。輪詢(xún)(Polling)CQ中的完成信息是為了獲取已提交的WR(發(fā)送或者接收)的詳細(xì)信息。如果我們?cè)赪R中發(fā)現(xiàn)一個(gè)異常狀態(tài)的完成,接下來(lái)的完成都會(huì)異常(同時(shí)WQ會(huì)被移至錯(cuò)誤狀態(tài))。每個(gè)沒(méi)有完成(被輪詢(xún)到)的WR都屬于待處理狀態(tài)。只有在WR完成之后,發(fā)送/接收緩沖區(qū)才可能被使用/再使用/釋放。應(yīng)該經(jīng)常檢測(cè)完成狀態(tài)。CQ中移除。ibv_poll_cq操作來(lái)實(shí)現(xiàn)。典型應(yīng)用本文檔提供了兩個(gè)程序代碼的示例:RDMA_CM_example,VPIverbsAPI,演示了如何RDMARDMA寫(xiě)等操作。第二份代碼,多播示例,使用了RDMA_CMverbsAPI,演示了多播的不可靠數(shù)據(jù)報(bào)(UD).一個(gè)典型應(yīng)用程序的結(jié)構(gòu)如下所示。在程序示例中功能的每步實(shí)現(xiàn)用粗體字顯示。獲取設(shè)備列表;首先,你必須檢索得到本機(jī)的可用IB設(shè)備列表。列表中的每個(gè)設(shè)備都包含一個(gè)名字和GUIDmthca0,mlx4_1。resources_create.打開(kāi)要請(qǐng)求的設(shè)備;遍歷設(shè)備列表,通過(guò)設(shè)備的GUID或者名字選擇它并且打開(kāi)它。resources_create.查詢(xún)?cè)O(shè)備的工作能力;設(shè)備的工作能力能使用戶(hù)了解已打開(kāi)設(shè)備支持的特性(APM,SRQ)和能力。resources_create.分配保護(hù)域以包含您的資源;(PD)允許用戶(hù)限制哪些組件只能相互交互。這些組件可以是SRQ。的編程示例中實(shí)現(xiàn)。注冊(cè)一個(gè)內(nèi)存區(qū)域;VPI僅適用于已注冊(cè)的內(nèi)存。進(jìn)程的虛擬空間中任何有效的內(nèi)存緩沖區(qū)都(lkey/rkey),稍后將使用這些密鑰來(lái)引用此內(nèi)存緩沖區(qū)。的編程示例中實(shí)現(xiàn)。(CQ);(WR)WRCQ上的完成隊(duì)列條目(CQE)。CQE將指定WR是否成功完成。的編程示例中實(shí)現(xiàn)。(QP);創(chuàng)建QP還將創(chuàng)建關(guān)聯(lián)的發(fā)送隊(duì)列和接收隊(duì)列。的編程示例中實(shí)現(xiàn)。提出QP;創(chuàng)建的QP仍然無(wú)法使用,直到它轉(zhuǎn)換為幾個(gè)狀態(tài),最終進(jìn)入ReadyToSend(RTS)QP用于發(fā)送/接收數(shù)據(jù)所需的信息。7.1.6connect_qp,7.1.7modify_qp_to_init,7.1.8modify_qp_to_rtr7.1.11modify_qp_to_rts實(shí)現(xiàn)。發(fā)布工作請(qǐng)求并poll完成;使用創(chuàng)建的QP進(jìn)行通信操作。poll_completion在編程示例中實(shí)現(xiàn)。清理;刪除QPCQ取消注冊(cè)MRPD關(guān)閉設(shè)備的編程實(shí)例中實(shí)現(xiàn)。VPIVerbsAPIVerbsAPI的詳細(xì)信息。初始化3.1.1ibv_fork_init模板:intibv_fork_init(void)輸入?yún)?shù):沒(méi)有輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno設(shè)置為指示失敗的原因。描述:ibv_fork_init初始化libibverbs的數(shù)據(jù)結(jié)構(gòu)以安全地處理fork()函數(shù)并避免數(shù)據(jù)損壞,無(wú)論是顯式調(diào)用還是隱式調(diào)用fork(),system()調(diào)用中。如果所有父進(jìn)程線程始終被阻塞,直到所有子進(jìn)程通過(guò)exec()操作結(jié)束或更改地址空間,則無(wú)需調(diào)用ibv_fork_init。此函數(shù)適用于支持madvise()(2.6.17及更高版本)的MADV_DONTFORK標(biāo)志的Linux內(nèi)核。RDMAV_FORK_SAFE或IBV_FORK_SAFE設(shè)置為任何值與調(diào)用ibv_fork_init()具有相同的效果。RDMAV_HUGEPAGES_SAFE設(shè)置為任何值都會(huì)告訴庫(kù)檢查libhugetlbfs等庫(kù)使用大頁(yè)面,則需要這樣做。會(huì)降低性能,因?yàn)槊看蝺?nèi)存注冊(cè)需要額外的系統(tǒng)調(diào)不會(huì)很大。會(huì)增加所有內(nèi)存注冊(cè)的開(kāi)銷(xiāo)。設(shè)備操作開(kāi)和關(guān)閉特定設(shè)備。ibv_get_device_list模板:structibv_device**ibv_get_device_list(int*num_devices)輸入?yún)?shù):沒(méi)有輸出參數(shù):num_devices(可選):如果為非null,則數(shù)組中返回的設(shè)備數(shù)返回值:NULL 終止的VPI設(shè)備數(shù)組或失敗時(shí)為NULL。描述:ibv_get_device_listVPIstructibv_device的指針。structibv_device在釋放列表之前,ibv_device結(jié)構(gòu)列表應(yīng)保持有效。在調(diào)用ibv_free_device_listibv_free_device_list模板:voidibv_free_device_list(structibv_device**list)輸入?yún)?shù):list:列出ibv_get_device_list輸出參數(shù):沒(méi)有返回值:沒(méi)有描述:ibv_free_device_listibv_get_device_list提供的ibv_device所有ibv_deviceibv_get_device_name模板:constchar*ibv_get_device_name(structibv_device*device)輸入?yún)?shù):device:所需設(shè)備的設(shè)備結(jié)構(gòu)ibv_device輸出參數(shù):沒(méi)有返回值:指向設(shè)備名稱(chēng)charNULL。描述:ibv_get_device_nameibv_deviceibv_get_device_guid模板:uint64_tibv_get_device_guid(structibv_device*device)輸入?yún)?shù):device: 所需設(shè)備的設(shè)備結(jié)構(gòu)ibv_device輸出參數(shù):沒(méi)有返回值:64位GUID描述:ibv_get_device_guid64(GUID)。ibv_open_device模板:structibv_context*ibv_open_device(structibv_device*device)輸入?yún)?shù):device:所需設(shè)備的設(shè)備結(jié)構(gòu)ibv_device輸出參數(shù):沒(méi)有返回值:verbsNULL。描述:ibv_open_deviceverbs他動(dòng)詞操作。ibv_close_device模板:intibv_close_device(structibv_context*context)輸入?yún)?shù):context:來(lái)自ibv_open_deviceibv_context輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將錯(cuò)誤設(shè)置為指示失敗的原因。描述:ibv_close_deviceibv_open_deviceverbs作不會(huì)釋放與上下文關(guān)聯(lián)的任何其他對(duì)象。為避免內(nèi)存泄漏,必須在調(diào)用此命令之前獨(dú)立釋放所有其他對(duì)象。ibv_node_type_str模板:constchar*ibv_node_type_str(enumibv_node_typenode_type)輸入?yún)?shù):node_type是ibv_node_typeHCA,Switch,Router,RNIC或Unknown輸出參數(shù):沒(méi)有返回值:一個(gè)常量字符串,用于描述枚舉值node_type描述:ibv_node_type_str返回描述節(jié)點(diǎn)類(lèi)型枚舉值node_type可以是InfiniBandHCA,交換機(jī),路由器,支持RDMANICenumibv_node_type{IBV_NODE_UNKNOWN =-1,IBV_NODE_CA IBV_NODE_SWITCH,IBV_NODE_ROUTER,IBV_NODE_RNIC};ibv_port_state_str模板:constchar*ibv_port_state_str(enumibv_port_stateport_state)輸入?yún)?shù):port_state:端口狀態(tài)的枚舉值輸出參數(shù):沒(méi)有返回值:一個(gè)常量字符串,用于描述枚舉值port_state描述:ibv_port_state_str返回描述端口狀態(tài)枚舉值port_state的字符串。enumibv_port_state{IBV_PORT_NOP=0,IBV_PORT_DOWN=1,IBV_PORT_INIT=2,IBV_PORT_ARMED=3,IBV_PORT_ACTIVE=4,IBV_PORT_ACTIVE_DEFER=5};Verbs端口的更多特定信息,創(chuàng)建完成隊(duì)列(CQ),完成通道(CC)和保護(hù)域(PD),這些信息可用于進(jìn)一步操作。ibv_query_device模板:intibv_query_device(structibv_context*context,structibv_device_attr*device_attr)輸入?yún)?shù):context:來(lái)自ibv_open_deviceibv_context輸出參數(shù):device_attr結(jié)構(gòu)體ibv_device_attr返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_query_device檢索與設(shè)備關(guān)聯(lián)的各種屬性。用戶(hù)應(yīng)該使用struct將其傳遞給命令,并在成功返回后填寫(xiě)。用戶(hù)負(fù)責(zé)釋放此結(jié)構(gòu)。structibv_device_attrfwvernode_guidsys_image_guidmaxmrsizepagesizecapvendoriddhwvermax_qpmax_qp_wrdevicecapflagsmax_sgemaxsgerdmax_cqmax_cqemaxmr
versionNodeglobaluniqueidentifier(GUID)SystemimageGUIDLargestcontiguousblockthatcanberegisteredSupportedpagesizesVendorID,perIEEEVendorsuppliedpartIDHardwareversionMaximumnumberofQueuePairs(QP)Maximumoutstandingworkrequests(WR)onany queueIBVDEVICERESIZEMAXWRIBVDEV工CEBADPKEYCNTRIBVDEVICEBADQKEYCNTRIBVDEVICERAWMULTIIBVDEVICEAUTOPATHMIGIBVDEVICECHANGEPHYPORTIBVDEVICEUDAVPORTENFORCEIBVDEVICECURRQPSTATEMODIBVDEVICESHUTDOWNPORTIBVDEVICE!NITTYPEIBVDEVICEPORTACTIVEEVENTIBVDEVICESYSIMAGEGUIDIBVDEVICERCRNRNAKGENIBVDEVICESRQRESIZEIBVDEVICENNOTIFYCQIBVDEVICEXRCMaximumscatter/gatherentries(SGE)perWRfor non-RDQPsMaximumSGEsperfor RDQPsMaximumsupportedcompletionqueues(CQ)Maximumcompletionqueueentries(CQE)per Maximumsupportedmemoryregions(MR)ibv_query_port模板:intibv_query_port(structibv_context*context,uint8_tport_num,structibv_port_attr*port_attr)輸入?yún)?shù):context來(lái)自ibv_open_deviceibv_contextport_num物理端口號(hào)(1)輸出參數(shù):port_attr結(jié)構(gòu)體ibv_port_attr返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_query_portstruct將其傳遞給命令,并在成功返回后填寫(xiě)。用戶(hù)負(fù)責(zé)釋放此結(jié)構(gòu)。structibv_port_attribv_query_gid模板:intibv_query_gid(structibv_context*context,uint8_tport_num,intindex,unionibv_gid*gid)輸入?yún)?shù):context來(lái)自ibv_open_devicestructibv_contextport_num物理端口號(hào)(1)index要返回的GID(0)輸出參數(shù):gid包含gidunionibv_gid返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_query_gid檢索端口全局標(biāo)識(shí)符(GID)表中的條目。子網(wǎng)管理器(SM)為每個(gè)端口分配至少一個(gè)GID。GID(GUID)和SM綴組成的有效IPv6GID[0]是唯一的并且包含端口的GUID。用戶(hù)應(yīng)該分配一個(gè)unionibv_gid,將其傳遞給命令,并在成功返回后填寫(xiě)。用戶(hù)有責(zé)任釋放此union。unionibv_gid}ibv_query_pkey模板:intibv_query_pkey(structibv_context*context,uint8_tport_num,intindex,uint16_t*pkey)輸入?yún)?shù):context來(lái)自ibv_open_devicestructibv_contextport_num物理端口號(hào)(1)index返回pkey(0)輸出參數(shù):PKEY想要的pkey返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_query_pkey檢索端口的分區(qū)鍵(pkey)表中的條目。子網(wǎng)管理器(SM)為每個(gè)端口分配至少一個(gè)pkey。pkeypkey以太網(wǎng)網(wǎng)絡(luò)中的VLANID。用戶(hù)傳入指向uint16pkey放此uint16。ibv_alloc_pd模板:structibv_pd*ibv_alloc_pd(structibv_context*context)輸入?yún)?shù):Context來(lái)自ibv_open_deviceibv_context輸出參數(shù):沒(méi)有返回值:指向創(chuàng)建保護(hù)域的指針或失敗時(shí)為NULL。描述:(PD)。PD(QP)可以訪問(wèn)哪至少一個(gè)PDVPIverbs。ibv_dealloc_pd模板:intibv_dealloc_pd(structibv_pd*pd)輸入?yún)?shù):pd來(lái)自ibv_alloc_pdpdstructibv_pd輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:(PD)。如果有任何其他對(duì)象,此命令將失敗目前與指定的PDibv_create_cq模板:structibv_cq*ibv_create_cq(structibv_context*context,intcqe,void*cq_context,structibv_comp_channel*channel,intcomp_vector)輸入?yún)?shù):context來(lái)自ibv_open_deviceibv_contextcqe:CQcq_context(可選)用完成事件返回的用戶(hù)定義值channel(可選)完成通道comp_vector(可選)完成向量輸出參數(shù):沒(méi)有返回值:指向創(chuàng)建CQ的指針,失敗時(shí)為NULL。描述:ibv_create_cq(CQ)。完成隊(duì)列用于保存完成隊(duì)列條目(CQE)。每個(gè)隊(duì)列對(duì)(QP)具有關(guān)聯(lián)的發(fā)送和接收CQ??梢怨蚕韱蝹€(gè)CQ發(fā)送和接收以及跨多個(gè)QP參數(shù)cqe參數(shù)cq_contextCQ道(CC)時(shí),該值將作為ibv_get_cq_event參數(shù)channelCC。CQ范例進(jìn)行CQ,CCCQ。但是,如果您希望使用pendparadigm,則需要CC。CC是允許用戶(hù)通知新CQE在CQ參數(shù)comp_vector0于context->num_comp_vectors。ibv_resize_cq模板:intibv_resize_cq(structibv_cq*cq,intcqe)輸入?yún)?shù):cqCQcqeCQ輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_resize_cq(CQ)的大小。參數(shù)cqe的值。CQ(或可以不)包含在調(diào)整大小時(shí)的補(bǔ)充,因此可以在使用CQ間調(diào)整其大小。ibv_destroy_cq模板:intibv_destroy_cq(structibv_cq*cq)輸入?yún)?shù):cqCQ輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:(CQ)。如果有任何隊(duì)列對(duì)(QP)仍然具有與之關(guān)聯(lián)的指定CQ,則此命令將失敗。ibv_create_comp_channel模板:structibv_comp_channel*ibv_create_comp_channel(structibv_contextcontext)輸入?yún)?shù):context:來(lái)自ibv_open_deviceibv_context輸出參數(shù):沒(méi)有返回值:指向創(chuàng)建CC的指針,失敗時(shí)為NULL。描述:ibv_create_comp_channel創(chuàng)建完成通道。完成信道(Completionchannel)(CQE)已被放置在完成隊(duì)列(CQ)上時(shí)接收通知的機(jī)制。ibv_destroy_comp_channel模板:intibv_destroy_comp_channel(structibv_comp_channel*channel)輸入?yún)?shù):channel:來(lái)自ibv_create_comp_channelibv_comp_channel輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:完成隊(duì)列(CQ)仍然與該完成信道相關(guān)聯(lián)。保護(hù)域操作建立保護(hù)域(PD)后,您可以在該域中創(chuàng)建對(duì)象。本節(jié)介紹PD(MR),創(chuàng)建隊(duì)列對(duì)(QP)或共享接收隊(duì)列(SRQ)和地址句柄(AH)。ibv_reg_mr模板:structibv_mr*ibv_reg_mr(structibv_pd*pd,void*addr,size_tlength,enumibv_access_flagsaccess)輸入?yún)?shù):pd:保護(hù)域,來(lái)自ibv_alloc_pdaddribv_pdaddr:內(nèi)存區(qū)域的長(zhǎng)度,以字節(jié)為單位acess:訪問(wèn)訪問(wèn)標(biāo)志輸出參數(shù):沒(méi)有返回值:指向創(chuàng)建的內(nèi)存區(qū)域(MR)或失敗時(shí)為NULL的指針。描述:(MR),將其與保護(hù)域(PD)相關(guān)聯(lián),并為其分配本地和遠(yuǎn)程密鑰(lkey,rkey)。所有使用內(nèi)存的VPI令注冊(cè)內(nèi)存。相同的物理內(nèi)存可以映射到不同的MR,甚至允許根據(jù)用戶(hù)要求將不同的權(quán)限或PD訪問(wèn)標(biāo)志可以是按位或以下枚舉之一:IBV_ACCESS_LOCAL_WRITE允許本地主機(jī)寫(xiě)訪問(wèn)權(quán)限IBV_ACCESS_REMOTE_WRITEIBV_ACCESS_REMOTE_READ允許遠(yuǎn)程主機(jī)進(jìn)行讀訪問(wèn)IBV_ACCESS_REMOTE_ATOMICIBV_ACCESS_MW_BIND允許此MR本地讀取訪問(wèn)是隱含和自動(dòng)的。任何違反給定內(nèi)存操作的訪問(wèn)權(quán)限的VPI(QP)屬性還必須具有正確的權(quán)限,否則操作將失敗。如果設(shè)置了IBV_ACCESS_REMOTE_WRITEIBV_ACCESS_REMOTE_ATOMIC,則還必須設(shè)置IBV_ACCESS_LOCAL_WRITE。structibv_mrstructibv_mr{structibv_context *context;structibv_pd *pd;ibv_dereg_mr模板:intibv_dereg_mr(structibv_mr*mr)輸入?yún)?shù):mr:來(lái)自ibv_reg_mrstructibv_mr輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_dereg_mr(MR)。如果有任何內(nèi)存窗口,操作將失敗(MW)仍然與MRibv_create_qp模板:structibv_qp*ibv_create_qp(structibv_pd*pd,structibv_qp_init_attr*qp_init_attr)輸入?yún)?shù):pd:來(lái)自ibv_alloc_pdibv_pdqp_init_attr:隊(duì)列對(duì)的初始屬性輸出參數(shù):qp_init_attr:填寫(xiě)隊(duì)列的實(shí)際值返回值:指向已創(chuàng)建的隊(duì)列對(duì)(QP)或失敗時(shí)為NULL的指針。描述:ibv_create_qpQP。創(chuàng)建QPRESETstructqp_init_attribv_destroy_qp模板:intibv_destroy_qp(structibv_qp*qp)輸入?yún)?shù):QP 來(lái)自ibv_create_qpstructibv_qp輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_destroy_qp(QP)。ibv_create_srq模板:structibv_srq*ibv_create_srq(structibv_pd*pd,structibv_srq_init_attr*srq_init_attr)輸入?yún)?shù):pd與共享接收(SRQ)關(guān)聯(lián)的保護(hù)域srq_init_attr創(chuàng)建SRQ輸出參數(shù):ibv_srqattr設(shè)置結(jié)構(gòu)的實(shí)際值返回值:指向創(chuàng)建的SRQ的指針或失敗時(shí)的NULL描述:ibv_create_srq創(chuàng)建共享接收隊(duì)列(SRQ)。讀取srq_attr->max_wrsrq_attr->max_sgeSRQ如果ibv_create_srqmax_wrmax_sgestructibv_srq結(jié)構(gòu)體ibv_srq_init_attrstructibv_srq_init_attr{void. *srq_context;structibv_srq_attrattr;};srq_context structibv_contextfromibv_open_deviceattr Anibv_srq_attrstructdefinedasfollows:結(jié)構(gòu)體ibv_srq_attr定義如下;ibv_modify_srq模板:intibv_modify_srq(structibv_srq*srq,structibv_srq_attr*srq_attr,intsrq_attr_mask)輸入?yún)?shù):srq:要修改的SRQsrq_attr:指定要修改的SRQ(輸入)/返回所選SRQ(輸出)srq_attr_maskSRQ輸出參數(shù):srq_attrstructibv_srq_attr返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_modify_srq使用srq_attr中基于掩碼srq_attr_maskSRQ的屬性。srq_attribv_create_srqibv_srq_attr構(gòu)。參數(shù)srq_attr_maskSRQ0按位OR:IBV_SRQ_MAX_WRSRQIBV_SRQ_LIMITSRQ持調(diào)整SRQ否設(shè)置了IBV_DEVICE_SRQ_RESIZESRQWRSRQ修改SRQSRQIBV_EVENT_SRQ_LIMIT_REACHED'低水印'異步事件。ibv_destroy_srq模板:intibv_destroy_srq(structibv_srq*srq)輸入?yún)?shù):srq要破壞的SRQ模板:模板:輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_destroy_srqSRQ。如果任何隊(duì)列仍與其相關(guān)聯(lián),調(diào)用將失敗。ibv_open_xrc_domain模板:structibv_xrc_domain*ibv_open_xrc_domain(structibv_context*context,intfd,intoflag)輸入?yún)?shù):context:來(lái)自ibv_open_devicestructibv_contextfd:要與XRCoflag:所需的文件創(chuàng)建屬性輸出參數(shù):與打開(kāi)的XRC域關(guān)聯(lián)的文件描述符返回值:對(duì)已打開(kāi)的XRC域的引用或NULL描述:ibv_open_xrc_domain為RDMA(XRC)域。所需的文件創(chuàng)建屬性oflag0O_CREATO_EXCLOR。如果屬于上下文命名的設(shè)備的域已與inodeO_CREATO_CREATO_XCL,則如果與inodeopen將創(chuàng)建一個(gè)新的XRCfdinode請(qǐng)注意,檢查域的存在和域的創(chuàng)建(如果不存在)相對(duì)于使用fdinode如果fd-1,則沒(méi)有inodeoflagO_CREAT。由于每個(gè)ibv_open_xrc_domainxrc_domain此每個(gè)此類(lèi)調(diào)用必須具有相應(yīng)的ibv_close_xrc_domainxrc_domainibv_create_xrc_srqstructibv_srq*ibv_create_xrc_srq(structibv_pd*pd,structibv_xrc_domain*xrc_domain,structibv_cq*xrc_cq,structibv_srq_init_attr*srq_init_attr)輸入?yún)?shù):與共享接收隊(duì)列關(guān)聯(lián)的保護(hù)域xrc_domain:XRC域xrc_cq:將保持XRCCQsrq_init_attr:創(chuàng)建SRQ(如上所述)輸出參數(shù):ibv_srq_attr:設(shè)置結(jié)構(gòu)的實(shí)際值返回值:指向創(chuàng)建的SRQ的指針或失敗時(shí)的NULL描述:ibv_create_xrc_srq創(chuàng)建與保護(hù)關(guān)聯(lián)的XRC(SRQ)domainpd,XRCdomain_xrcxrc_cqCQstructibv_xrc_domain{structibv_context*context;structibv_contextfromibv_open_deviceuint64_t handle;}ibv_close_xrc_domain模板:intibv_close_xrc_domain(structibv_xrc_domain*d)輸入?yún)?shù):d用戶(hù)要關(guān)閉的指向XRC輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_close_xrc_domainXRC,d。如果這恰好是最后一個(gè)引用,那么XRC域?qū)⒈讳N(xiāo)毀。此函數(shù)會(huì)減少引用計(jì)數(shù),如果任何QPSRQXRC聯(lián),則可能會(huì)失敗。ibv_create_xrc_rcv_qpintibv_create_xrc_rcv_qp(structibv_qp_init_attr*init_attr,uint32_t*xrc_rcv_qpn)輸入?yún)?shù):init_attr:要填充QPxrc_rcv_qpn:與要?jiǎng)?chuàng)建的接收QPQP輸出參數(shù):init_attr:填充XRCxrc_rcv_qpn:QPQPQP返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_create_xrc_rcv_qp創(chuàng)建一個(gè)XRC(QP),僅用作接收方QP,并通過(guò)xrc_rcv_qpnQP(發(fā)送方)節(jié)點(diǎn)。遠(yuǎn)程節(jié)點(diǎn)將在ibv_post_sendxrc_rcv_qpn,它在與XRCQPxrc中向此主機(jī)上的XRCSRQ編號(hào)為xrc_rcv_qpnQPQP后一個(gè)進(jìn)程名為ibv_unreg_xrc_rcv_qp,此時(shí)QPQP會(huì)自動(dòng)為其注冊(cè),并且還應(yīng)在某個(gè)時(shí)刻調(diào)用ibv_unreg_x-rc_rcv_qp冊(cè)。希望通過(guò)此QPXRCSRQQPibv_reg_xrc_rcv_qp,以確保QP請(qǐng)注意,因?yàn)镼Pxrc_rcv_qpnQP,所以init_attr列將被忽略。ibv_modify_xrc_rcv_qp模板:intibv_modify_xrc_rcv_qp(structibv_xrc_domain*xrc_domain,uint32_txrc_qp_num,structibv_qp_attr*attr,intattr_mask)輸入?yún)?shù):xrc_domain:與此QPXRCxrc_qp_num:用于標(biāo)識(shí)此QPattr:用于修改XRCQPattr_mask:用于修改QP輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_modify_xrc_rcv_qp根據(jù)掩碼attr_mask修改XRC接收QP為xrc_qp_num,該值與structattr動(dòng)QP:Reset->Init->RTR必須至少設(shè)置以下掩碼(用戶(hù)可以根據(jù)需要添加可選屬性)NextStateNextStateRequiredattributesinitIBV_QP_STATE,IBV_QP_PKEY_INDEX,IBV_QP_PORT,IBV_QP_ACCESS_FLAGSRTRIBV_QP_STATE,IBV_QP_AV,IBV_QP_PATH_MTU,IBV_QP_DEST_QPN,IBV_QP_RQ_PSN,IBV_QP_MAX-_DEST_RD_ATOMIC,IBV_QP_MIN_RNR_TIMER性,包括QPibv_reg_xrc_rcv_qp模板:intibv_reg_xrc_rcv_qp(structibv_xrc_domain*xrc_domain,uint32_txrc_qp_num)輸入?yún)?shù):xrc_domain與接收QP關(guān)聯(lián)的XRCxrc_qp_num與要?jiǎng)?chuàng)建的用戶(hù)進(jìn)程要注冊(cè)的QP輸出參數(shù):沒(méi)有返回值:成功時(shí)為0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,將設(shè)置errno以指示失敗的原因。描述:ibv_reg_xrc_rcv_qp使用XRC接收QPXRCxrc_domainxrc_qp_num。如果數(shù)字xrc_qp_numXRCQP(例如,如果沒(méi)有分配QP者是非XRCQP),或者XRCQPXRC會(huì)失敗除xrc_domainibv_unreg_xrc_rcv_qp模板:intibv_unreg_xrc_rcv_qp(structibv_xrc_domain*xrc_domain,uint32_txrc_qp_num)輸入?yún)?shù):xrc_domainXRCXRCQPxrc_qp_num需要注銷(xiāo)的用戶(hù)進(jìn)程的QP輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_unreg_xrc_rcv_qpXRCXRCxrc_domain關(guān)聯(lián)的QP編號(hào)xrc_qp_-num。當(dāng)使用此XRC注冊(cè)的用戶(hù)進(jìn)程數(shù)接收QP降至零時(shí),QPibv_create_ah模板:structibv_ah*ibv_create_ah(structibv_pd*pd,structibv_ah_attrattr)輸入?yún)?shù):pd來(lái)自ibv_alloc_pdpdstructibv_pdattr輸出參數(shù):沒(méi)有返回值:指向創(chuàng)建的地址句柄(AH)或失敗時(shí)為NULL的指針。描述:ibv_create_ah創(chuàng)建了一個(gè)AH。AH連接傳輸模式(RC,UC)中,AH(QP)相關(guān)聯(lián)。在數(shù)據(jù)報(bào)傳輸模式相關(guān)聯(lián)。structibv_ah_attrstructibv_global_routeibv_destroy_ah模板:intibv_destroy_ah(structibv_ah*ah)輸入?yún)?shù):ah來(lái)自ibv_create_ahstructibv_ah輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_destroy_ah釋放地址句柄(AH)。一旦AH多在UDQPQueuePair使能(ibv_modify_qp)(QP)必須通過(guò)遞增的狀態(tài)序列進(jìn)行轉(zhuǎn)換。QPRESET:新創(chuàng)建的隊(duì)列為空。INIT:基本信息集。準(zhǔn)備發(fā)布以接收隊(duì)列。RTRQP,QPRTS:準(zhǔn)備發(fā)送。設(shè)置超時(shí)和重試參數(shù),QP這些轉(zhuǎn)換是通過(guò)使用ibv_modify_qpibv_modify_qp模板:intibv_modify_qp(structibv_qp*qp,structibv_qp_attr*attr,enumibv_qp_attr_maskattr_mask)輸入?yún)?shù):qp來(lái)自ibv_create_qpstructibv_qpattr為QPattr_maskattr輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_modify_qpQPQP有點(diǎn)用詞不當(dāng),因?yàn)槟鸁o(wú)法使用此命令隨意修改qp修改一組非常嚴(yán)格的屬性,并且轉(zhuǎn)換必須按正確的順序進(jìn)行。以下小節(jié)將更詳細(xì)地描述每個(gè)轉(zhuǎn)換。structibv_qp_attr以下值選擇上述屬性之一,并應(yīng)在attr_maskORIBV_QP_STATEIBV_QP_CUR_STATEIBV_QP_EN_SQD_ASYNC_NOTIFYIBV_QP_ACCESS_FLAGSIBV_QP_PKEY_INDEXIBV_QP_PORTIBV_QP_QKEYIBV_QP_AVIBV_QP_PATH_MTUIBV_QP_TIMEOUTIBV_QP_RETRY_CNTIBV_QP_RNR_RETRYIBV_QP_RQ_PSNIBV_QP_MAX_QP_RD_ATOMICIBV_QP_ALT_PATHIBV_QP_MIN_RNR_TIMERIBV_QP_SQ_PSNIBV_QP_MAX_DEST_RD_ATOMICIBV_QP_PATH_MIG_STATEIBV_QP_CAPIBV_QP_DEST_QPNRESETtoINIT當(dāng)新創(chuàng)建隊(duì)列對(duì)(QP)時(shí),它處于RESET將QPINIT要求屬性:***QP***qp_state/IBV_QP_STATEIBV_QPS_INIT/IBV_QP_PKEY_INDEX通常為0port_num/IBV_QP_PORT物理端口號(hào)(1n)qp_access_flags/IBV_QP_ACCESS_FLAGS 訪問(wèn)標(biāo)識(shí)(參見(jiàn)ibv_reg_mr)***QP***qkey/IBV_QP_QKEYqkey(參見(jiàn)ibv_post_send)可選屬性:沒(méi)有過(guò)渡的影響:一旦QPINIT狀態(tài),用戶(hù)就可以開(kāi)始通過(guò)ibv_post_recv命令將接收緩沖區(qū)發(fā)布到接收隊(duì)列。在QPRTR狀態(tài)之前,應(yīng)該發(fā)布至少一個(gè)接收緩沖區(qū)。INITtoRTR一旦隊(duì)列對(duì)(QP)發(fā)布了接收緩沖區(qū),就可以將QP轉(zhuǎn)換為準(zhǔn)備接收(RTR)狀態(tài)。要求屬性:***QP***qp_state/IBV_QP_STATEIBV_QPS_RTRpath_mtu/IBV_QP_PATH_MTUIB_MTU_256IB_MTU_512(推薦值)IB_MTU_1024IB_MTU_2048IB_MTU_4096***QP***ah_attr/IBV_QP_AV需要?jiǎng)?chuàng)建地址句柄(AH)并在適當(dāng)時(shí)填寫(xiě)。最低限度,需ah_attr.dlid。dest_qp_num/IBV_QP_DEST_QPN遠(yuǎn)程QP的數(shù)量。rq_psn/IBV_QP_RQ_PSN開(kāi)始接收數(shù)據(jù)包序列號(hào)(應(yīng)與遠(yuǎn)程QP的sq_psn匹配)/IBV_MAX_DEST_RD_ATOMICRDMA請(qǐng)求的資源RNRNAK計(jì)時(shí)器(推薦值:12)可選屬性:***QP***qp_access_flags/IBV_QP_ACCESS_FLAGSaccess標(biāo)志(參見(jiàn)ibv_reg_mr)pkey_index/IBV_QP_PKEY_INDEXpkey0***QP***alt_ah_attr/IBV_QP_ALT_PATH AH填寫(xiě)了備用路徑信息的***QP***qkey/IBV_QP_QKEYqkey(參見(jiàn)ibv_post_send)轉(zhuǎn)化的影響:一旦QPRTR狀態(tài),QP就開(kāi)始接收處理。RTRtoRTS(QP)達(dá)到準(zhǔn)備接收(RTR)狀態(tài),它就可以轉(zhuǎn)換到準(zhǔn)備發(fā)送(RTS)狀態(tài)。要求屬性:***QP***qp_state/IBV_QP_STATEIBV_QPS_RTS***QP***timeout/IBV_QP_TIMEOUT localacktimeout(推薦值:14)retry_cnt/IBV_QP_RETRY_CNTretrycount(推薦值:7)rnr_retry/IBV_QP_RNR_RETRYRNR重試次數(shù)(建議值:7)sq_psn/IBV_SQ_PSN發(fā)送隊(duì)列起始包序列號(hào)(應(yīng)該與遠(yuǎn)程QP的rq_psn匹配)max_rd_atomic/IBV_QP_MAX_QP_RD_ATOMIC允許未完成的RDMA讀取和原子操作??蛇x屬性:***QP***qp_access_flags/IBV_QP_ACCESS_FLAGS訪問(wèn)標(biāo)志(參見(jiàn)ibv_reg_mr)***QP***alt_ah_attr/IBV_QP_ALT_PATH填寫(xiě)了備用路徑信息的min_rnr_timer/IBV_QP_MIN_RNR_TIMER最小RNRNAK定時(shí)器***QP***qkey/IBV_QP_QKEYqkey(參見(jiàn)ibv_post_send)轉(zhuǎn)化的影響:一旦QPRTS狀態(tài),QP就開(kāi)始發(fā)送處理并完全可操作。用戶(hù)現(xiàn)在可以使用ibv_post_send命令發(fā)送發(fā)送請(qǐng)求。激活QueuePair操作可以緊盯QP進(jìn)行發(fā)送和接收操作。本節(jié)介紹可用于執(zhí)行這些操作的操作。ibv_query_qp模板:intibv_query_qp(structibv_qp*qp,structibv_qp_attr*attr,enumibv_qp_attr_maskattr_mask,structibv_qp_init_attr*init_attr)輸入?yún)?shù):qp來(lái)自ibv_create_qpqpstructibv_qpattr_mask(ibv_modify_qp)輸出參數(shù):attrstructibv_qp_attrinit_attrstructibv_qp_init_attr返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_query_qp檢索先前通過(guò)ibv_create_qp和ibv_modify_qp(QP)的各種屬性。用戶(hù)應(yīng)該分配structibv_qp_attrstruct負(fù)責(zé)釋放這些結(jié)構(gòu)。structibv_qp_init_attr在ibv_create_qpstructibv_qp_attribv_modify_qpibv_query_srq模板:intibv_query_srq(structibv_srq*srq,structibv_srq_attr*srq_attr)輸入?yún)?shù):srq 指定的SRQsrq_attr指定SRQ輸出參數(shù):srq_attr要查詢(xún)的SRQstructibv_srq_attr返回值:成功時(shí)為0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno設(shè)置為指示描述:ibv_query_srqSRQsrq_attr屬性,該指針是ibv_create_srqibv_srq_attrsrq_attrsrq_limit0,則達(dá)到的SRQ(“低水位線”)事件不會(huì)或不再設(shè)防。在重新布防事件之前,不會(huì)生成任何異步事件。ibv_query_xrc_rcv_qp模板:intibv_query_xrc_rcv_qp(structibv_xrc_domain*xrc_domain,uint32_txrc_qp_num,structibv_qp_attr*attr,intattr_mask,輸入?yún)?shù):xrc_domain與此QPXRCxrc_qp_num用于標(biāo)識(shí)此QPattr要在其中返回屬性的ibv_qp_attrattr_maskinit_attr QP輸出參數(shù):attr包含QPinit_attr返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_query_xrc_rcv_qp檢索attr_mask中為XRC接收QP為xrc_qp_numxrc_domainattrinit_attrattr_maskRDMA性。如果使用ibv_modify_xrc_rcv_qp性列表取決于QPibv_query_xrc_rcv_qp成不同的返回值:qp_state,path_mig_state,sq_draining,ah_attr(如果啟用了自動(dòng)路徑遷移(APM))。ibv_post_recv模板:intibv_post_recv(structibv_qp*qp,structibv_recv_wr*wr,structibv_recv_wr**bad_wr)輸入?yún)?shù):qp來(lái)自ibv_create_qp的structibv_qpwr(WR)輸出參數(shù):bad_wr 指針首先拒絕WR返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_post_recvWR(QP)接收隊(duì)列。應(yīng)將至少一個(gè)接收緩沖區(qū)發(fā)布到接收隊(duì)列,以將QPRTR。當(dāng)遠(yuǎn)程對(duì)等體執(zhí)行發(fā)送,立即發(fā)送和立即操作的RDMARDMAWRbad_wr規(guī)WRstructibv_recv_wrstructibv_sgeibv_post_send模板:intibv_post_send(structibv_qp*qp,structibv_send_wr*wr,structibv_send_wr**bad_wr)輸入?yún)?shù):qp來(lái)自ibv_create_qpibv_qpwr(WR)輸出參數(shù):bad_wr指針首先拒絕WR返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_post_sendWR(QP)的發(fā)送隊(duì)列。此操作用于啟動(dòng)所有通信,包括RDMAWRbad_wrWR(CQ)獲取完成隊(duì)列條目(CQE)之前,為避免意外行為,用戶(hù)不應(yīng)更改或銷(xiāo)毀與WR關(guān)聯(lián)的AH。只有在WRCQWCEWR的緩沖區(qū)。但是,如果設(shè)置了IBV_SEND_INLINE標(biāo)志,則可以在調(diào)用返回后立即重用緩沖區(qū)。structibv_send_wrstructibv_sge在ibv_post_recv中定義。ibv_post_srq_recv模板:intibv_post_srq_recv(structibv_srq*srq,structibv_recv_wr*recv_wr,structibv_recv_wr**bad_recv_wr)輸入?yún)?shù):srq來(lái)自ibv_create_qpibv_qpwr包含接受緩沖區(qū)的第一個(gè)工作請(qǐng)求(wr)輸出參數(shù):bad_recv_wr首先拒絕wr返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_post_srq_recvSRQ。它會(huì)在第一次失敗時(shí)停止處理此列表中的WR(可以在發(fā)布請(qǐng)求時(shí)立即檢測(cè)到),并通過(guò)bad_recv_wr參數(shù)返回此失敗的WR。只有在WR(CQ)檢索到工作完成后,才能安全地重用WRWRUDQP,則傳入消息的全局路由頭(GRH)40字節(jié)中。如果傳入消息中不存在GRH,則前40個(gè)字節(jié)將是未定義的。這意味著在UDQP40散列表中的緩沖區(qū)。ibv_req_notify_cq模板:intibv_req_notify_cq(structibv_cq*cq,intsolicited_only)輸入?yún)?shù):cq:來(lái)自ibv_create_cqibv_cqsolicited_only:僅在WR輸出參數(shù):沒(méi)有返回值:0,錯(cuò)誤時(shí)為-1。如果調(diào)用失敗,則將errno因。描述:ibv_req_notify_cq(CQ)提供通知機(jī)制。當(dāng)完成隊(duì)列條目(CQE)被放置在CQCQ(CC)。如果該CQCQE,則不會(huì)為該事件生成事件。如果設(shè)置了solicited_onlyWRCQE用戶(hù)應(yīng)使用ibv_get_cq_event通知機(jī)制僅適用于一個(gè)通知。發(fā)送通知后,必須通過(guò)對(duì)ibv_req_notify_cq新調(diào)用重新啟動(dòng)該機(jī)制。ibv_get_cq_event模板:intibv_get_cq_event(structibv_comp_channel*channel,structibv_cq**cq,void**cq_context)輸入?yún)?shù):channel:來(lái)自ibv_create_comp_channelibv_comp
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 滬教版數(shù)學(xué)九年級(jí)下冊(cè)27.3《正多邊形與圓》聽(tīng)評(píng)課記錄4
- 八年級(jí)數(shù)學(xué)上冊(cè) 12.2 三角形全等的判定 第2課時(shí) 用“SAS”判定三角形全等聽(tīng)評(píng)課記錄 新人教版
- 小學(xué)數(shù)學(xué)蘇教版六年級(jí)下冊(cè)《分?jǐn)?shù)和百分?jǐn)?shù)的實(shí)際應(yīng)用(總復(fù)習(xí))》公開(kāi)課聽(tīng)評(píng)課記錄
- 新北師大版數(shù)學(xué)一年級(jí)下冊(cè)《買(mǎi)鉛筆》聽(tīng)評(píng)課記錄
- 2025年煤制合成氨合作協(xié)議書(shū)
- 五年級(jí)上冊(cè)數(shù)學(xué)口算題
- 四年級(jí)教師教學(xué)計(jì)劃
- 一年級(jí)蘇教版數(shù)學(xué)下冊(cè)《認(rèn)識(shí)圖形》聽(tīng)評(píng)課記錄
- 社區(qū)團(tuán)購(gòu)戰(zhàn)略合作協(xié)議書(shū)范本
- 人貨電梯租賃合同范本
- 因產(chǎn)品質(zhì)量買(mǎi)賣(mài)合同糾紛起訴狀
- 安監(jiān)人員考核細(xì)則(2篇)
- GB/T 6892-2023一般工業(yè)用鋁及鋁合金擠壓型材
- 實(shí)驗(yàn)室危險(xiǎn)廢物處理廢液分類(lèi)與收集
- 生物技術(shù)制藥課件
- 生活老師培訓(xùn)資料課件
- 2020年新概念英語(yǔ)第一冊(cè)lesson97-102單元檢測(cè)
- 追求理解的教學(xué)設(shè)計(jì)課件資料文檔
- 腹主動(dòng)脈瘤(護(hù)理業(yè)務(wù)學(xué)習(xí))
- 注射用醋酸亮丙瑞林微球
- 部編版語(yǔ)文五年級(jí)下冊(cè) 全冊(cè)教材分析
評(píng)論
0/150
提交評(píng)論