999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

國(guó)產(chǎn)化平臺(tái)上應(yīng)用程序進(jìn)程異常退出故障分析*

2021-03-20 12:50:06周會(huì)娜涂貴文梁鴻斌
通信技術(shù) 2021年3期
關(guān)鍵詞:一致性故障

周會(huì)娜,何 鑫,涂貴文,羅 實(shí),梁鴻斌

(成都三零瑞通移動(dòng)通信有限公司,四川 成都 610041)

0 引言

近幾年,隨著國(guó)內(nèi)信息安全事件頻繁發(fā)生,加之相關(guān)國(guó)家對(duì)關(guān)鍵技術(shù)的封鎖,國(guó)家倡導(dǎo)并推動(dòng)核心技術(shù)實(shí)現(xiàn)自主可控。在這樣的背景下,國(guó)產(chǎn)CPU的發(fā)展和應(yīng)用得到了國(guó)家的高度重視[1-2]。目前,國(guó)產(chǎn)CPU 正處于快速追趕的關(guān)鍵階段,初步構(gòu)建起了完整的產(chǎn)品線和上下游全產(chǎn)業(yè)鏈生態(tài)體系。在國(guó)家大力推進(jìn)國(guó)產(chǎn)化替代工程的環(huán)境下,諸多項(xiàng)目開始從非國(guó)產(chǎn)化平臺(tái)移植到國(guó)產(chǎn)化平臺(tái),期間不可避免出現(xiàn)了一些問題。本文結(jié)合某具體項(xiàng)目,針對(duì)一個(gè)國(guó)產(chǎn)CPU 弱一致性存儲(chǔ)模型引起的進(jìn)程異常退出問題進(jìn)行了深入分析,并給出了解決措施。

1 故障概述

某國(guó)產(chǎn)服務(wù)器設(shè)備在穩(wěn)定運(yùn)行1 年后出現(xiàn)應(yīng)用軟件進(jìn)程異常退出的故障,導(dǎo)致系統(tǒng)功能無法正常使用。

該設(shè)備為全國(guó)產(chǎn)化設(shè)備,基礎(chǔ)設(shè)施平臺(tái)中CPU、操作系統(tǒng)以及數(shù)據(jù)庫(kù)等均選取國(guó)內(nèi)廠家的型號(hào)產(chǎn)品。自主研發(fā)的應(yīng)用軟件在原非國(guó)產(chǎn)化平臺(tái)運(yùn)行穩(wěn)定可靠,在從非國(guó)產(chǎn)化平臺(tái)移植到國(guó)產(chǎn)平臺(tái)時(shí),上述設(shè)備出現(xiàn)故障。該設(shè)備在使用時(shí)需要做到“多任務(wù),高并發(fā),高可靠”,需要同在同一時(shí)間處理多任務(wù)、并發(fā)消息,具有高吞吐量和低延時(shí),且7×24 h 無故障運(yùn)行。

2 故障分析

故障發(fā)生后,遠(yuǎn)程登錄設(shè)備,查看到數(shù)據(jù)庫(kù)和操作系統(tǒng)運(yùn)行正常,且在進(jìn)程退出的同時(shí)生成了系統(tǒng)內(nèi)核文件(coredump)。通過gdb 工具將進(jìn)程退出時(shí)運(yùn)行狀態(tài)翻譯為調(diào)用棧,可以看出進(jìn)程退出時(shí)處理線程使用關(guān)鍵字delete 來釋放內(nèi)存,最終調(diào)用free 時(shí)發(fā)生異常導(dǎo)致進(jìn)程退出(abort)。

通過Linux 系統(tǒng)編程手冊(cè)[3]中free()函數(shù)的描述可以看出,釋放一塊未被分配的內(nèi)存會(huì)導(dǎo)致系統(tǒng)工作異常。通過上文對(duì)故障現(xiàn)場(chǎng)數(shù)據(jù)的分析可以判定,故障現(xiàn)場(chǎng)的進(jìn)程退出是由于釋放一塊未被分配的內(nèi)存造成的,即定位問題的關(guān)鍵是找到“釋放一塊未被分配內(nèi)存”的原因。結(jié)合代碼實(shí)現(xiàn),整理故障分析樹如圖1 所示。

圖1 故障分析樹

故障出現(xiàn)時(shí)釋放的內(nèi)存是用于存放業(yè)務(wù)數(shù)據(jù)的,相關(guān)業(yè)務(wù)數(shù)據(jù)的流轉(zhuǎn)軌跡如圖2 所示。當(dāng)發(fā)送線程接收完來源數(shù)據(jù)后,申請(qǐng)一塊內(nèi)存來構(gòu)造業(yè)務(wù)數(shù)據(jù),然后通過消息隊(duì)列發(fā)送到處理線程;處理線程根據(jù)數(shù)據(jù)結(jié)構(gòu)解析業(yè)務(wù)數(shù)據(jù)并進(jìn)行分類處理,處理完成后釋放業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的內(nèi)存;當(dāng)消息隊(duì)列滿時(shí),發(fā)送線程需要釋放業(yè)務(wù)數(shù)據(jù)的內(nèi)存。

對(duì)于業(yè)務(wù)數(shù)據(jù)的流轉(zhuǎn)過程和代碼實(shí)現(xiàn),以下幾個(gè)環(huán)節(jié)構(gòu)成問題分析的完整路徑:業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)內(nèi)存的申請(qǐng)、釋放過程;業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的內(nèi)存指針的使用過程、業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)的指針從內(nèi)存申請(qǐng)成功到被釋放之間是否被改動(dòng)過,由此得出如圖1 所示的故障分析樹。針對(duì)該故障分析樹具體排查如下。

2.1 內(nèi)存指針使用錯(cuò)誤(M1)

通過指針顯示使用內(nèi)存時(shí),如果未能正確處理,往往會(huì)導(dǎo)致指針指向一塊未被分配的內(nèi)存,而釋放這個(gè)指針會(huì)導(dǎo)致當(dāng)前問題的出現(xiàn)。未能正確處理有很多表現(xiàn)形式,常用的且與本項(xiàng)目相關(guān)的幾點(diǎn)包括內(nèi)存申請(qǐng)失敗的處理和直接使用指針時(shí)運(yùn)算錯(cuò)誤,導(dǎo)致使用未被分配的內(nèi)存,詳見X1、X2。

2.1.1 申請(qǐng)內(nèi)存失敗(X1)

從業(yè)務(wù)數(shù)據(jù)流轉(zhuǎn)軌跡圖(圖2)可以看到,在構(gòu)造業(yè)務(wù)數(shù)據(jù)前有申請(qǐng)內(nèi)存的操作。如果申請(qǐng)內(nèi)存失敗,同時(shí)未做好失敗處理,可能導(dǎo)致非法使用內(nèi)存,從而釋放未被分配的內(nèi)存。此時(shí),可以通過代碼走讀的方式遍歷所有申請(qǐng)內(nèi)存的位置,查看申請(qǐng)內(nèi)存失敗時(shí)是否有非法使用內(nèi)存的情況。該項(xiàng)目未發(fā)現(xiàn)申請(qǐng)內(nèi)存失敗時(shí)有非法使用內(nèi)存的情況。

2.1.2 指針偏移計(jì)算錯(cuò)誤(X2)

在規(guī)劃編制過程中,無論是否開展規(guī)劃水資源論證,水資源都是規(guī)劃無法回避的問題。為避免脫離論證對(duì)象,規(guī)劃水資源論證的介入至少要在規(guī)劃方案 (包括推薦方案和替代方案)形成之后才能進(jìn)行。在規(guī)劃方案形成階段介入,由于不確定性因素較多,往往只能定性評(píng)價(jià),很難作出定量估算。在規(guī)劃方案形成和優(yōu)化階段介入,適合于綜合規(guī)劃和專項(xiàng)規(guī)劃中的指導(dǎo)性規(guī)劃;在規(guī)劃編制草案形成之后介入,適合于專項(xiàng)規(guī)劃,此時(shí)水資源論證的對(duì)象已經(jīng)明確,可以對(duì)水資源配置、水資源利用作出定量分析和比選,通過規(guī)劃水資源論證發(fā)現(xiàn)規(guī)劃中存在的問題,提出進(jìn)一步調(diào)整和完善規(guī)劃的意見和建議。

從業(yè)務(wù)數(shù)據(jù)流轉(zhuǎn)軌跡圖(圖2)可以看出,有多個(gè)地方訪問內(nèi)存。如果通過指針運(yùn)算來直接訪問內(nèi)存,在運(yùn)算出錯(cuò)時(shí)會(huì)導(dǎo)致非法使用內(nèi)存。此時(shí),可以通過靜態(tài)代碼檢查工具(如Klockwork8)對(duì)程序代碼進(jìn)行掃描或?qū)Υa進(jìn)行人工走查,著重檢查指針偏移量的情況、計(jì)算的準(zhǔn)確性、字節(jié)對(duì)齊以及數(shù)據(jù)結(jié)構(gòu)定義的一致性等,查看是否存在問題。該項(xiàng)目未發(fā)現(xiàn)上述問題。所以可以排除X2。

2.2 內(nèi)存重復(fù)釋放(X3)

內(nèi)存申請(qǐng)、釋放過程中出現(xiàn)重復(fù)釋放,導(dǎo)致再次被釋放的內(nèi)存是未被分配的內(nèi)存。根據(jù)業(yè)務(wù)數(shù)據(jù)流轉(zhuǎn)軌跡圖(圖2)可見,可能重復(fù)釋放內(nèi)存的情況是發(fā)送線程將業(yè)務(wù)數(shù)據(jù)送入隊(duì)列時(shí)消息隊(duì)列已滿,拒絕將業(yè)務(wù)數(shù)據(jù)存入隊(duì)列,發(fā)送線程將該業(yè)務(wù)數(shù)據(jù)釋放,此時(shí)消息隊(duì)列仍將該業(yè)務(wù)數(shù)據(jù)復(fù)制了一份到處理線程,從而引起處理線程重復(fù)釋放內(nèi)存。針對(duì)上述懷疑,可以編寫一組測(cè)試程序來確認(rèn)消息隊(duì)列滿時(shí)是否將已經(jīng)拒絕的業(yè)務(wù)數(shù)據(jù)復(fù)制一份到處理線程。結(jié)果顯示:在消息隊(duì)列滿的情況下,不會(huì)有復(fù)制的數(shù)據(jù)送給處理線程,故排除處理線程重復(fù)釋放業(yè)務(wù)數(shù)據(jù)內(nèi)存的情況。

2.3 內(nèi)存指針被修改(M2)

業(yè)務(wù)數(shù)據(jù)對(duì)應(yīng)內(nèi)存的指針在系統(tǒng)運(yùn)行過程中被修改,根據(jù)業(yè)務(wù)數(shù)據(jù)流轉(zhuǎn)軌跡圖(圖2)需要分3個(gè)階段排查,分別為進(jìn)入消息隊(duì)列前(X4)、在消息隊(duì)列中(X5)和出消息隊(duì)列后(X6)。

2.3.1 消息隊(duì)列前被修改(X4)

如果業(yè)務(wù)數(shù)據(jù)的內(nèi)存指針在進(jìn)入消息隊(duì)列前被修改,那么修改后的指針很可能指向一塊未被分配的內(nèi)存。為了確認(rèn)是否存在該問題,在原程序中添加調(diào)試代碼來跟蹤業(yè)務(wù)數(shù)據(jù)內(nèi)存指針的變化情況。調(diào)試代碼分別添加在申請(qǐng)內(nèi)存成功處和消息對(duì)列入口處。在測(cè)試環(huán)境中進(jìn)行問題復(fù)現(xiàn),當(dāng)問題出現(xiàn)時(shí)對(duì)比兩處的指針。結(jié)果顯示,指針未被修改,如圖3 所示,排除X4。

2.3.2 消息隊(duì)列中被修改(X5)

設(shè)備軟件采用自己構(gòu)建的消息隊(duì)列模塊實(shí)現(xiàn)線程間通信。該模塊具有高吞吐量和低延時(shí)的特點(diǎn),廣泛應(yīng)用于通信系統(tǒng)的信令控制、媒體轉(zhuǎn)發(fā)以及業(yè)務(wù)調(diào)度等軟件中。圖4 描述了該消息隊(duì)列中關(guān)于內(nèi)存及指針的處理過程,即業(yè)務(wù)數(shù)據(jù)的指針被發(fā)送線程傳入消息隊(duì)列,消息隊(duì)列會(huì)把這個(gè)指針存儲(chǔ)到指針數(shù)組。當(dāng)處理線程需要獲取業(yè)務(wù)數(shù)據(jù)時(shí),消息隊(duì)列會(huì)把該業(yè)務(wù)數(shù)據(jù)指針返回給處理線程。

在消息隊(duì)列入口、寫指針數(shù)組以及消息隊(duì)列出口3 處增加調(diào)試代碼,記錄業(yè)務(wù)數(shù)據(jù)指針.問題出現(xiàn)時(shí)對(duì)比3 處記錄,以判斷指針是否被修改。

圖3 申請(qǐng)內(nèi)存與放入隊(duì)列前對(duì)比

實(shí)驗(yàn)發(fā)現(xiàn):消息隊(duì)列入口處與寫指針數(shù)組處的指針相同;消息隊(duì)列出口處的指針與消息隊(duì)列入口處不同。根據(jù)實(shí)驗(yàn)結(jié)果,問題定位需要聚焦在消息隊(duì)列出口處讀到的業(yè)務(wù)數(shù)據(jù)指針與寫指針數(shù)組時(shí)不同的原因。為了分析指針在隊(duì)列的傳輸中被改變的原因,在原代碼中增加調(diào)試代碼,當(dāng)問題出現(xiàn)時(shí)觀測(cè)到的情況如圖5 所示。

圖4 消息隊(duì)列內(nèi)存及指針處理過程

圖5 消息隊(duì)列調(diào)試處理過程

②為了確認(rèn)Data1 數(shù)據(jù)是否寫入指針I(yè)ndex62處,寫線程在數(shù)據(jù)寫入完成后,讀取指針I(yè)ndex62處的數(shù)據(jù)(標(biāo)記為Data2),發(fā)現(xiàn)Data2=Data1,確認(rèn)Data1 數(shù)據(jù)已經(jīng)寫入指針I(yè)ndex62 處。此時(shí)的時(shí)間點(diǎn)標(biāo)記為T2。

③讀線程再次從消息隊(duì)列中讀取指針I(yè)ndex62處數(shù)據(jù)(標(biāo)記為Data4),發(fā)現(xiàn)Data4=Data1。此時(shí)的時(shí)間點(diǎn)標(biāo)記為T3。

綜上所述,讀到的錯(cuò)誤指針是隊(duì)列中的“舊”值。再次讀取該地址可以讀到正確指針,證明指針讀取錯(cuò)誤是由內(nèi)存刷新延遲造成的。

經(jīng)過與CPU 廠家技術(shù)人員共同分析,本項(xiàng)目中的內(nèi)存刷新延遲可能與國(guó)產(chǎn)CPU 架構(gòu)弱一致性存儲(chǔ)模型[4]有關(guān),同時(shí)給出了驗(yàn)證方案,即增加內(nèi)存屏障[5],對(duì)比使用前后內(nèi)存刷新延遲的情況。內(nèi)存屏障用于保證操作有序,屏障之前的操作一定會(huì)先于內(nèi)存屏障之后的操作。

根據(jù)原程序的架構(gòu)擬制了驗(yàn)證程序,功能包括:3 個(gè)寫線程向隊(duì)列中寫入指針,寫入時(shí)打印指針地址;1 個(gè)線程從隊(duì)列中讀取指針,讀取到指針后打印指針地址。在該程序代碼中加入了內(nèi)存屏障,通過對(duì)比打開和關(guān)閉內(nèi)存屏障的結(jié)果,進(jìn)行問題原因驗(yàn)證。

①開啟內(nèi)存屏障,未出現(xiàn)內(nèi)存刷新延遲,程序運(yùn)行正常;

②關(guān)閉內(nèi)存屏障,出現(xiàn)內(nèi)存刷新延遲。

據(jù)此證明內(nèi)存刷新延遲是由弱一致性存儲(chǔ)模型造成的。

2.3.3 消息隊(duì)列后被修改(X6)

如果業(yè)務(wù)數(shù)據(jù)的內(nèi)存指針在出消息隊(duì)列后被修改,修改后的指針很可能指向一塊未被分配的內(nèi)存。為了確認(rèn)指針是否被修改,可以在原程序中添加調(diào)試代碼來跟蹤業(yè)務(wù)數(shù)據(jù)內(nèi)存指針的變化情況。在消息對(duì)列出口處和釋放內(nèi)存前記錄內(nèi)存指針,對(duì)比觀測(cè)結(jié)果,兩處指針相同,指針在出隊(duì)列后未被修改,排除X6。

2.4 故障定位結(jié)果

通過以上故障樹分析和實(shí)驗(yàn)結(jié)果得知,故障的根本原因是該國(guó)產(chǎn)CPU 采用的是弱一致性存儲(chǔ)模型,在與其適配過程中應(yīng)用軟件未做內(nèi)存屏障,引起應(yīng)用軟件讀到錯(cuò)誤指針,致使一塊未被分配的內(nèi)存被釋放而應(yīng)用軟件進(jìn)程退出故障。

3 機(jī)理分析

消息隊(duì)列模塊廣泛應(yīng)用于通信系統(tǒng)的信令控制、媒體轉(zhuǎn)發(fā)以及業(yè)務(wù)調(diào)度等軟件中,在x86、ARM 和PowerPC 等架構(gòu)處理器上穩(wěn)定運(yùn)行多年,最大特點(diǎn)是高吞吐量和低延時(shí)。為了實(shí)現(xiàn)上述特點(diǎn),在數(shù)據(jù)結(jié)構(gòu)、指針數(shù)組管理和并發(fā)處理上做了很多優(yōu)化,如消息隊(duì)列的讀寫同步通過指針數(shù)組的計(jì)數(shù)變量來實(shí)現(xiàn),可以極大地減少系統(tǒng)開銷。但是,這個(gè)優(yōu)化在多核系統(tǒng)中對(duì)緩存的一致性有很大挑戰(zhàn)[6]。

本項(xiàng)目使用的國(guó)產(chǎn)CPU 芯片有4 個(gè)核,每個(gè)核包含獨(dú)有的指令緩存(I-Cache)、一級(jí)緩存(D-Cache)和二級(jí)緩存(V-Cache),4 個(gè)核之間通過交叉互聯(lián)網(wǎng)絡(luò)與三級(jí)緩存(S-Cache)相連,進(jìn)而再通過另一個(gè)交叉互聯(lián)網(wǎng)絡(luò)與內(nèi)存相連。該國(guó)產(chǎn)CPU 采用GS464E 處理器核,實(shí)現(xiàn)的是弱一致性存儲(chǔ)模型。

該國(guó)產(chǎn)CPU 對(duì)弱一致性存儲(chǔ)模型的描述為“弱一致性存儲(chǔ)模型,即多條不相關(guān)的加載指令或存儲(chǔ)指令的返回結(jié)果的到達(dá)的先后次序跟處理器內(nèi)部數(shù)據(jù)通路的暢通性有關(guān)系,不一定按照發(fā)出的次序依次返回,這不影響訪存操作的正確性。如果程序具有顯式的因果關(guān)系,弱序一致性一定會(huì)尊重這種序關(guān)系,否則亂序有可能會(huì)打破原有的程序邏輯,就需要使用屏障來抑制亂序,以維持程序所期望的邏輯”。由此可知,弱一致性的影響與處理器內(nèi)部數(shù)據(jù)通路的暢通性有關(guān)。在CPU 內(nèi)部數(shù)據(jù)通路繁忙時(shí),會(huì)概率性地出現(xiàn)無顯式因果關(guān)系的代碼被亂序執(zhí)行。

根據(jù)業(yè)務(wù)數(shù)據(jù)流轉(zhuǎn)軌跡圖(圖2),結(jié)合原程序中的相關(guān)代碼,在故障發(fā)生時(shí),弱一致性存儲(chǔ)模型在多核系統(tǒng)中的讀寫行為如圖6 左側(cè)所示。

應(yīng)用程序軟件寫線程利用Fifo[NextIn]=A 將業(yè)務(wù)數(shù)據(jù)指針(A)存入消息隊(duì)列,然后利用NextIn=(NextIn+1)通知讀線程取出業(yè)務(wù)數(shù)據(jù)指針。在CPU內(nèi)部數(shù)據(jù)通路繁忙時(shí),弱一致性會(huì)概率性導(dǎo)致如下情況:讀線程先讀到已經(jīng)NextIn=(NextIn+1)的數(shù)據(jù),再通過Fifo[NextOut]讀取業(yè)務(wù)數(shù)據(jù)指針(A)的數(shù)據(jù),此時(shí)數(shù)據(jù)A 還未完成存儲(chǔ),當(dāng)前Fifo[NextOut]中的值還是上一輪存儲(chǔ)的“舊數(shù)據(jù)”。這個(gè)舊數(shù)據(jù)指向的是一塊未被分配的內(nèi)存,如果被處理線程釋放會(huì)引起“釋放一塊未被分配的內(nèi)存”錯(cuò)誤。

內(nèi)存屏障用于保證操作有序,屏障之前的操作一定會(huì)先于內(nèi)存屏障之后的操作。大多數(shù)現(xiàn)代計(jì)算機(jī)為了提高性能而采取亂序執(zhí)行,使得內(nèi)存屏障成為必須。工程實(shí)現(xiàn)上,它經(jīng)常應(yīng)用于對(duì)存儲(chǔ)時(shí)序有嚴(yán)格要求的場(chǎng)景。圖6 右側(cè)結(jié)合原程序中的相關(guān)代碼描述了加入內(nèi)存屏障后弱一致性存儲(chǔ)模型在多核系統(tǒng)中的讀寫行為。

圖6 弱一致性存儲(chǔ)模型在多核系統(tǒng)中的讀寫行為和加入內(nèi)存屏障后的讀寫行為

內(nèi)存屏障會(huì)保證寫線程將業(yè)務(wù)數(shù)據(jù)指針存入消息隊(duì)列指令(Fifo[NextIn]=A)先于通知讀線程指令(NextIn=(NextIn+1))執(zhí)行,從而保證讀線程能獲取到正確的業(yè)務(wù)數(shù)據(jù)指針進(jìn)行處理。

4 解決措施

在原應(yīng)用程序中增加內(nèi)存屏障,針對(duì)整改后的應(yīng)用軟件版本,采用故障復(fù)現(xiàn)時(shí)同樣的測(cè)試環(huán)境、測(cè)試數(shù)據(jù)和測(cè)試方法進(jìn)行驗(yàn)證。驗(yàn)證包括“驗(yàn)證測(cè)試”和“極限測(cè)試”兩部分。其中,“驗(yàn)證測(cè)試”的目的是驗(yàn)證在設(shè)計(jì)指標(biāo)下程序是否穩(wěn)定運(yùn)行;“極限測(cè)試”的目的是驗(yàn)證在超過軟件處理能力的條件下程序是否穩(wěn)定運(yùn)行。

通過實(shí)測(cè)驗(yàn)證,修改措施有效,設(shè)備滿足設(shè)計(jì)指標(biāo)要求,在超過軟件處理能力時(shí)設(shè)備可以正常運(yùn)行,丟棄了處理不過來的數(shù)據(jù)。

5 結(jié)語

本文對(duì)某項(xiàng)目在國(guó)產(chǎn)化替代移植過程中遇到的典型故障“進(jìn)程異常退出”,采用故障樹分析法進(jìn)行問題分析,最終定位故障的根本原因是國(guó)產(chǎn)CPU采用的是弱一致性存儲(chǔ)模型,在與其適配過程中應(yīng)用軟件未做內(nèi)存屏障,引起應(yīng)用軟件讀到錯(cuò)誤指針,致使一塊未被分配的內(nèi)存被釋放,導(dǎo)致應(yīng)用軟件進(jìn)程退出。文章給出了添加內(nèi)存屏障的解決方法,經(jīng)實(shí)測(cè)驗(yàn)證,解決措施有效,可以為解決同類問題提供參考。

猜你喜歡
一致性故障
關(guān)注減污降碳協(xié)同的一致性和整體性
公民與法治(2022年5期)2022-07-29 00:47:28
注重教、學(xué)、評(píng)一致性 提高一輪復(fù)習(xí)效率
對(duì)歷史課堂教、學(xué)、評(píng)一體化(一致性)的幾點(diǎn)探討
IOl-master 700和Pentacam測(cè)量Kappa角一致性分析
故障一點(diǎn)通
ONVIF的全新主張:一致性及最訪問控制的Profile A
奔馳R320車ABS、ESP故障燈異常點(diǎn)亮
基于事件觸發(fā)的多智能體輸入飽和一致性控制
故障一點(diǎn)通
故障一點(diǎn)通
主站蜘蛛池模板: 亚洲婷婷丁香| 在线免费不卡视频| 精品福利视频导航| 成人午夜亚洲影视在线观看| 午夜三级在线| 国产免费羞羞视频| 漂亮人妻被中出中文字幕久久 | 欧美怡红院视频一区二区三区| 久久久精品无码一区二区三区| 国产专区综合另类日韩一区 | 久久久四虎成人永久免费网站| 亚洲欧美不卡| 天堂成人在线视频| 亚洲va视频| 性色在线视频精品| 色婷婷成人| 97精品久久久大香线焦| 久久鸭综合久久国产| 国产精品毛片一区| 手机在线国产精品| 第一页亚洲| 草草线在成年免费视频2| 亚洲日本在线免费观看| 呦视频在线一区二区三区| 伊人中文网| 婷婷久久综合九色综合88| 亚洲精品无码人妻无码| 久久熟女AV| 激情综合婷婷丁香五月尤物| 亚洲人成高清| 亚洲成人在线免费| 97视频免费看| 免费毛片在线| 欧美一级爱操视频| 亚洲区一区| 亚洲天堂网在线视频| 久久伊人操| 三上悠亚一区二区| 日韩AV无码一区| 992Tv视频国产精品| 夜精品a一区二区三区| 婷婷中文在线| 久青草网站| 中文字幕av一区二区三区欲色| 国产精品中文免费福利| 国产精品午夜福利麻豆| 无码丝袜人妻| 亚洲欧美日韩另类在线一| 日本亚洲欧美在线| 婷婷开心中文字幕| 5388国产亚洲欧美在线观看| 欧美特级AAAAAA视频免费观看| 天天视频在线91频| 欧美色综合网站| 又猛又黄又爽无遮挡的视频网站| 一区二区三区高清视频国产女人| 99无码中文字幕视频| 男女性色大片免费网站| 蝌蚪国产精品视频第一页| 国产精品区视频中文字幕| 亚洲区第一页| 成人福利免费在线观看| 人人艹人人爽| 婷婷色中文网| 国产乱子精品一区二区在线观看| 亚洲最大福利网站| 亚洲人成影院午夜网站| 国产午夜福利在线小视频| 国产成人高清精品免费| 久久6免费视频| 国产精品成人久久| 在线无码九区| 久久精品视频亚洲| 欧美a在线看| 精品福利视频网| 无码日韩人妻精品久久蜜桃| 99re精彩视频| 国产精品毛片在线直播完整版| 97超碰精品成人国产| 大香伊人久久| 国产永久免费视频m3u8| 超清人妻系列无码专区|