數(shù)據(jù)緩存在第一內存中,然后CPU再從內存中讀取已經(jīng)緩存的該寫1請求,并將該讀1請求下發(fā)給FPGA0
[0065]在該主板架構中,F(xiàn)PGA在收到CPU下發(fā)的讀1請求和寫1請求后,可以對接收到的讀1請求和寫1請求進行解析,來獲取對應的讀地址和寫地址,然后根據(jù)解析出的同一個地址的次數(shù)對與該讀地址和寫地址對應的數(shù)據(jù)進行訪問次數(shù)統(tǒng)計;其中,數(shù)據(jù)的訪問次數(shù)可以包括讀取的次數(shù)以及寫入的次數(shù)。
[0066]例如,當FPGA通過解析接收到的讀1請求或者寫1首次獲取到一個地址后,表明與該地址對應的數(shù)據(jù)發(fā)生了一次讀取或者寫入,F(xiàn)PGA可以為該地址對應的數(shù)據(jù)記錄一次訪問;當FPGA通過解析接收到的讀1請求或者寫1再次獲取到該地址后,表明與該地址對應的數(shù)據(jù)又發(fā)生了一次讀取或者寫入訪問,于是FPGA可以對已經(jīng)統(tǒng)計的訪問次數(shù)進行更新,將該地址對應的數(shù)據(jù)的訪問次數(shù)加一,以此類推。
[0067]通過這種方式,F(xiàn)PGA可以在數(shù)據(jù)的讀寫過程中對所有發(fā)生讀寫的數(shù)據(jù)進行訪問次數(shù)統(tǒng)計。同時,對于統(tǒng)計完成的訪問次數(shù),F(xiàn)PGA還可以通過將統(tǒng)計出的訪問次數(shù)與預設的閾值進行比較來確定哪些發(fā)生讀寫的數(shù)據(jù)為熱點數(shù)據(jù)。
[0068]在實現(xiàn)時,F(xiàn)PGA在進行訪問次數(shù)的統(tǒng)計過程中,可以將統(tǒng)計出的訪問次數(shù)實時的與預設的閾值進行比較,當任一數(shù)據(jù)的訪問次數(shù)達到預設的閾值時,則可以確定該數(shù)據(jù)為熱點數(shù)據(jù),將該數(shù)據(jù)保存到熱點數(shù)據(jù)庫中,并在熱點數(shù)據(jù)庫中建立該數(shù)據(jù)與該數(shù)據(jù)的地址索引之間的對應關系。其中,所述預設的閾值在本申請中不進行特別限定,可以根據(jù)實際的業(yè)務需求進行設定
[0069]例如,當FPGA解析接收到的讀1請求再次獲取到一個地址后,此時FPGA可以將該地址對應的數(shù)據(jù)的訪問次數(shù)加一,并同時將該數(shù)據(jù)當前的訪問次數(shù)與預設的閾值進行比較,如果此時該數(shù)據(jù)的訪問次數(shù)達到閾值,當FPGA在接收到磁盤陣列返回的讀取到的該數(shù)據(jù)時,可以將該數(shù)據(jù)作為熱點數(shù)據(jù)保存到熱點數(shù)據(jù)庫中,同時將該數(shù)據(jù)的LBA地址作為地址索引在熱點數(shù)據(jù)庫中建立與該數(shù)據(jù)的對應關系。同樣的道理,當FPGA解析接收到的寫1請求再次獲取到一個地址后,此時FPGA可以將該地址對應的數(shù)據(jù)的訪問次數(shù)加一,并同時將該數(shù)據(jù)當前的訪問次數(shù)與預設的閾值進行比較,如果此時該數(shù)據(jù)的訪問次數(shù)達到閾值,F(xiàn)PGA可以將本次要寫入的數(shù)據(jù)直接作為熱點數(shù)據(jù)保存到熱點數(shù)據(jù)庫中,同時將該數(shù)據(jù)的LBA地址作為地址索引在熱點數(shù)據(jù)庫中建立與該數(shù)據(jù)的對應關系。
[0070]當然,在實際應用中,熱點數(shù)據(jù)庫中保存的熱點數(shù)據(jù),也可以由管理員人工進行指定,在本實施例中不進行特別限定;例如,管理員可以從磁盤陣列中將與每一類熱點業(yè)務相關的數(shù)據(jù)人工拷貝至熱點數(shù)據(jù)庫。
[0071]對于保存在熱點數(shù)據(jù)庫中的熱點數(shù)據(jù),當FPGA再次接收到針對熱點數(shù)據(jù)庫中數(shù)據(jù)的讀1請求或者寫1請求時,可以直接從熱點數(shù)據(jù)庫中完成相應的讀寫操作,而不必將讀1請求或者寫1請求下發(fā)至磁盤陣列來進行相應的讀寫操作。
[0072]例如,在實現(xiàn)時,當FPGA接收到一個由CPU下發(fā)的讀1請求時,首先FPGA可以對該讀1請求進行解析來獲取對應的讀地址,然后FPGA可以將解析出的讀地址與熱點數(shù)據(jù)庫中的地址索引依次進行匹配,來判斷該讀地址是否命中熱點數(shù)據(jù)中的地址索引;如果該讀地址命中熱點數(shù)據(jù)中的地址索引時,此時與該讀地址對應的數(shù)據(jù)為熱點數(shù)據(jù),F(xiàn)PGA可以直接在本地執(zhí)行與該讀1請求對應的讀操作,從熱點數(shù)據(jù)庫中讀取與該讀地址對應數(shù)據(jù),然后將讀取到的數(shù)據(jù)返回給CPU,再由CPU通過業(yè)務1 口發(fā)送給該讀1請求的發(fā)起方主機。當然,如果該讀地址未命中熱點數(shù)據(jù)庫中的地址索引,那么FPGA將該讀1請求下發(fā)至磁盤陣列,由磁盤陣列上的磁盤來進行尋道,從磁盤陣列的磁盤上來讀取數(shù)據(jù)。
[0073]當FPGA接收到一個由CPU下發(fā)的寫1請求時,首先FPGA可以對該寫1請求進行解析來獲取對應的寫地址,然后FPGA可以將解析出的寫地址與熱點數(shù)據(jù)庫中的地址索引依次進行匹配,來判斷該寫地址是否命中熱點數(shù)據(jù)中的地址索引;如果該寫地址命中熱點數(shù)據(jù)中的地址索引時,此時與該寫地址對應的數(shù)據(jù)為熱點數(shù)據(jù),那么本次寫操作為覆蓋寫入操作,F(xiàn)PGA可以直接在本地執(zhí)行與該寫1請求對應的寫操作,將緩存在CPU的第一內存中的本次要寫入的數(shù)據(jù)保存到熱點數(shù)據(jù)庫中,對熱點數(shù)據(jù)中與該寫地址對應的原有數(shù)據(jù)進行覆蓋更新。當然,如果該寫地址未命中熱點數(shù)據(jù)庫中的地址索引,那么FPGA將該寫1請求下發(fā)至磁盤陣列,由磁盤陣列上的磁盤來進行尋道,將要寫入的數(shù)據(jù)寫入到磁盤陣列的磁盤中。
[0074]可見,通過這種方式,F(xiàn)PGA在處理接收到由CPU下發(fā)的讀1請求和寫1請求時,如果解析出的地址命中熱點數(shù)據(jù)庫中的地址索引,那么FPGA則不必將讀1請求或者寫1請求下發(fā)至磁盤陣列來進行相應的讀寫操作,可以直接在本地來執(zhí)行對應的讀寫操作,從而可以減少針對磁盤陣列中磁盤的讀寫次數(shù),降低磁盤陣列中由于磁盤臂移動而產(chǎn)生的尋道時間,提高熱點數(shù)據(jù)的訪問速度。
[0075]另外,對于熱點數(shù)據(jù)庫中的數(shù)據(jù),F(xiàn)PGA還可以根據(jù)預設的算法對熱點數(shù)據(jù)庫中的數(shù)據(jù)以及地址索引進行實時的更新,將熱點數(shù)據(jù)庫中不活躍的數(shù)據(jù)回寫到磁盤陣列。其中,F(xiàn)PGA在對熱點數(shù)據(jù)庫中的數(shù)據(jù)進行實時的更新時,所采用的算法在本實施中不進行特別限定。
[0076]在本實施例示出的一種算法中,F(xiàn)PGA可以設置一個預設的時長,當熱點數(shù)據(jù)庫中的熱點數(shù)據(jù)長時間未被訪問,并且持續(xù)未被訪問的持續(xù)時長達到設置的所述預設的時長,那么此時FPGA則可以將熱點數(shù)據(jù)庫中保存的該數(shù)據(jù)回寫到磁盤陣列,并刪除熱點數(shù)據(jù)庫中保存的該熱點數(shù)據(jù)對應的地址索引。例如,對于熱點數(shù)據(jù)庫中保存的地址索引,F(xiàn)PGA可以分別記錄該地址索引上次被匹配到的時間點,當熱點數(shù)據(jù)庫中保存的任一地址索引距離上次被匹配到的時間點的時長達到所述預設的時長時,表明該熱點數(shù)據(jù)這個時間段內不夠活躍,F(xiàn)PGA可以將該數(shù)據(jù)回寫到磁盤陣列,并刪除熱點數(shù)據(jù)庫中的該數(shù)據(jù)的地址索引??梢?,通過這種方式,可以保證熱點數(shù)據(jù)庫中的數(shù)據(jù)在一定的時間段內均為活躍的熱點數(shù)據(jù)。
[0077]通過以上描述可知,本申請?zhí)岢鲆环N新的存儲服務器的主板架構,該主板架構中包括CPU、基于FPGA的數(shù)據(jù)讀寫模塊、內存;所述基于FPGA的數(shù)據(jù)讀寫模塊與所述CPU以及所述存儲服務器的磁盤陣列分別相連接;所述內存與所述基于FPGA的數(shù)據(jù)讀寫模塊相連接。CPU在進行數(shù)據(jù)讀寫時,基于FPGA的數(shù)據(jù)讀寫模塊接收CPU下發(fā)的讀寫1請求,對所述讀寫1請求進行解析獲取對應的讀寫地址,并判斷獲取到所述讀寫地址是否命中所述內存中預設的熱點數(shù)據(jù)庫中的地址索引;當獲取到的所述讀寫地址命中所述預設的熱點數(shù)據(jù)庫中的地址索引時,所述基于FPGA的數(shù)據(jù)讀寫模塊基于所述熱點數(shù)據(jù)庫中的熱點數(shù)據(jù)在本地執(zhí)行與所述讀寫1請求對應的讀寫操作。
[0078]由于在該主板架構中,當CPU發(fā)起的讀寫1請求對應的讀寫數(shù)據(jù)命中熱點數(shù)據(jù)庫中的熱點數(shù)據(jù)時,將由基于FPGA的數(shù)據(jù)讀寫模塊根據(jù)基于所述熱點數(shù)據(jù)庫中的數(shù)據(jù)在其本地完成與所述讀寫1請求對應的讀寫操作,而不需要將該讀寫1請求下發(fā)到磁盤陣列來執(zhí)行對應的讀寫操作,因此可以有效的減少磁盤陣列中單塊磁盤的讀寫操作次數(shù),節(jié)省磁盤的尋道時長,從而可以實現(xiàn)磁盤訪問的加速,極大的提高了熱點數(shù)據(jù)的訪問速度,提升了存儲服務器的整體讀寫性能。
[0079]與上述裝置實施例相對應,本申請還提供了方法的實施例。
[0080]請參見圖3,本申請?zhí)岢鲆环N數(shù)據(jù)的讀寫方法,應用于存儲服務器,所述存儲服務器的主板具有如圖2所示出的架構,包括CPU、基于FPGA的數(shù)據(jù)讀寫模塊、內存;其中,所述基于FPGA的數(shù)據(jù)讀寫模塊與所述CPU以及所述存儲服務器的磁盤陣列分別相連接;所述內存與所述基于FPGA的數(shù)據(jù)讀寫模塊相連接。
[0081]當所述基于FPGA的數(shù)據(jù)讀寫模塊加載了設定的讀寫邏輯,所述方法執(zhí)行以下步驟:
[0082]步驟301,基于FPGA的數(shù)據(jù)讀寫模塊接收所述CPU下發(fā)的讀寫1請求,并對所述讀寫1請求進行解析獲取對應的讀寫地址;
[0083]步驟302,基于FPGA的數(shù)據(jù)讀寫模塊判斷獲取到所述讀寫地址是否命中