本發(fā)明屬于計(jì)算機(jī),具體為一種基于numa架構(gòu)的連接表管理的方法及裝置。
背景技術(shù):
1、非一致性內(nèi)存訪問架構(gòu)由于其高內(nèi)存帶寬和良好的可擴(kuò)展性成為了現(xiàn)代多核服務(wù)器的主流架構(gòu),基于numa架構(gòu)的服務(wù)器廣泛部署于現(xiàn)有的大數(shù)據(jù)中心,在numa架構(gòu)下,cpu和內(nèi)存等被劃分成多個(gè)numa節(jié)點(diǎn),每個(gè)cpu都可以訪問全部的內(nèi)存,但是cpu訪問本numa節(jié)點(diǎn)的內(nèi)存時(shí)延遲最小,訪問遠(yuǎn)程numa節(jié)點(diǎn)的內(nèi)存的延遲隨著距離的增大而增大,目前的主流的連接表管理方法基本都是采用緩存、連接池或連接鏈表的方式,來進(jìn)行連接表管理,目前主流的連接表管理方法沒有考慮到numa架構(gòu)下,cpu訪問不同節(jié)點(diǎn)內(nèi)存的速率不同,沒有根據(jù)cpu訪問速率設(shè)計(jì)對應(yīng)的連接表管理方法,對此,我們提出了一種基于numa架構(gòu)的連接表管理的方法及裝置。
技術(shù)實(shí)現(xiàn)思路
1、針對現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種基于numa架構(gòu)的連接表管理的方法及裝置,以解決以上技術(shù)問題。
2、為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:一種基于numa架構(gòu)的連接表管理的方法,管理步驟為:
3、s1、網(wǎng)絡(luò)設(shè)備啟動(dòng)后先根據(jù)配置把內(nèi)存劃分為n個(gè)numa節(jié)點(diǎn),并與處理器進(jìn)行關(guān)聯(lián);
4、s2、根據(jù)網(wǎng)絡(luò)設(shè)備的連接表規(guī)格session_quota和單個(gè)連接表大小session_size計(jì)算出每個(gè)numa節(jié)點(diǎn)需要預(yù)申請的連接表內(nèi)存大小,在每個(gè)numa節(jié)點(diǎn)上申請連接表內(nèi)存;
5、s3、設(shè)備啟動(dòng)初始化完成后,網(wǎng)絡(luò)設(shè)備的連接表資源和連接表資源的起始地址也初始化完成;
6、s4、在有流量進(jìn)入設(shè)備后通過根據(jù)流量的五元組信息進(jìn)行哈希,然后取哈希值與對應(yīng)numa節(jié)點(diǎn)的鏈接規(guī)格數(shù)取于的數(shù)作為獲取連接表項(xiàng)的內(nèi)存,建立連接表項(xiàng),獲取鏈接表項(xiàng)的內(nèi)存在各自的numa節(jié)點(diǎn)預(yù)申請的連接表;
7、s5、在流量獲取到連接表項(xiàng)的內(nèi)存地址后立馬判斷對應(yīng)的連接表的狀態(tài)flag,若狀態(tài)flag有效就重新執(zhí)行s4步驟,選擇一個(gè)新的連接表項(xiàng),若狀態(tài)flag為無效則連接表項(xiàng)的age加1,同時(shí)狀態(tài)flag置為有效,并記錄對應(yīng)的node信息;
8、s6、連接表項(xiàng)獲取后根據(jù)連接表項(xiàng)信息建立連接句柄,使用連接句柄存儲(chǔ)的age字段去確定連接的有效性,連接有效則通過連接句柄中存儲(chǔ)的node_id和session_id字段轉(zhuǎn)換獲得連接表項(xiàng)的指針,獲取連接信息。
9、優(yōu)選的,s1步驟中劃分步驟根據(jù)硬件配置,確定出創(chuàng)建numa節(jié)點(diǎn)的數(shù)量,通過系統(tǒng)啟動(dòng)時(shí)的內(nèi)核參數(shù)與bios設(shè)置來完成,去為每個(gè)節(jié)點(diǎn)分配內(nèi)存量。
10、優(yōu)選的,s2步驟中連接表內(nèi)存大小為:numa_session_size=session_size*session_quota/n,計(jì)算每個(gè)numa節(jié)點(diǎn)需要預(yù)申請的連接表內(nèi)存大小方法通過分析確定連接表的數(shù)據(jù)結(jié)構(gòu),將每個(gè)連接項(xiàng)的大小乘以同時(shí)需要跟蹤的連接數(shù)量,得到總連接表內(nèi)存需求,考慮numa架構(gòu),確定將連接表分布在numa節(jié)點(diǎn)上,對進(jìn)行內(nèi)存的分配;其中申請內(nèi)存起始地址為numa_session_address,并記錄每塊內(nèi)存的起始地址memory_area[i]=numa_session_address[i],其中i表示為第i個(gè)numa的節(jié)點(diǎn)。
11、優(yōu)選的,s3步驟中連接表結(jié)構(gòu)中包括連接年齡age、連接狀態(tài)標(biāo)記flag與連接所屬的numa節(jié)點(diǎn)信息node。
12、優(yōu)選的,s4步驟中五元組信息進(jìn)行哈希步驟預(yù)先定義五元組,五元組包括源ip地址、目的ip地址、源端口號(hào)、目的端口號(hào)與傳輸層協(xié)議,選擇md5哈希函數(shù),將五元信息組合成二進(jìn)制表示,進(jìn)行哈希,將其連接成長整數(shù),組合完成;md5哈希函數(shù)用以生成128位哈希值,為32個(gè)十六進(jìn)制數(shù)字。
13、優(yōu)選的,s6步驟中連接句柄是獲取連接的另一種方式,句柄對應(yīng)著連接表項(xiàng),連接句柄包括連接表項(xiàng)的年齡age與連接的session_id,其中session_id的部分信息記錄numa的node信息部分記錄session在對應(yīng)numa中的預(yù)申請連接表的偏移量。
14、優(yōu)選的,s6步驟中確定連接的有效性步驟先根據(jù)連接句柄中記錄session_id信息去知道對應(yīng)連接所在的numa節(jié)點(diǎn)信息與偏移量,根據(jù)初始化時(shí)記錄的memory_area[i]地址信息找到對應(yīng)的連接指針,去獲取連接表項(xiàng)中記錄的age年齡信息,若連接表項(xiàng)中記錄age年齡信息與連接句柄記錄的age年齡信息相等且連接狀態(tài)有效,則表示連接有效,得到連接表項(xiàng)的指針。
15、優(yōu)選的,s5步驟中判斷連接表狀態(tài)flag方法通過預(yù)先定義變量flag,在程序不同部分中,根據(jù)連接表的實(shí)際狀態(tài)去設(shè)定flag值,使用if語句判斷flag的值,執(zhí)行相應(yīng)操作。
16、優(yōu)選的,s6步驟中預(yù)先分配出一個(gè)環(huán)境句柄,使用已經(jīng)分配的環(huán)境句柄去創(chuàng)建一個(gè)連接句柄,使用該句柄分配一個(gè)或多個(gè)語句句柄,去執(zhí)行sql語句,在執(zhí)行sql語句后,檢查返回的狀態(tài)碼去確定操作是否成功。
17、優(yōu)選的,網(wǎng)絡(luò)設(shè)備啟動(dòng)中,每個(gè)numa節(jié)點(diǎn)會(huì)預(yù)申請一塊大內(nèi)存用作連接表。
18、與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果如下:
19、本發(fā)明相較于現(xiàn)有技術(shù),能夠有效解決在內(nèi)存緊張的情況下可能導(dǎo)致連接表規(guī)格未用完而新建連接表失敗的問題和有效緩解因連接表新建和老化對內(nèi)存頻繁的申請和釋放導(dǎo)致嚴(yán)重影響系統(tǒng)性能的問題,同時(shí)解決在新技術(shù)中因?yàn)檫B接表指針失效而引發(fā)的一些安全問題。
1.一種基于numa架構(gòu)的連接表管理的方法,其特征在于,管理步驟為:
2.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s1步驟中劃分步驟根據(jù)硬件配置,確定出創(chuàng)建numa節(jié)點(diǎn)的數(shù)量,通過系統(tǒng)啟動(dòng)時(shí)的內(nèi)核參數(shù)與bios設(shè)置來完成,去為每個(gè)節(jié)點(diǎn)分配內(nèi)存量。
3.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于,s2步驟中連接表內(nèi)存大小為:numa_session_size=session_size*session_quota/n,計(jì)算每個(gè)numa節(jié)點(diǎn)需要預(yù)申請的連接表內(nèi)存大小方法通過分析確定連接表的數(shù)據(jù)結(jié)構(gòu),將每個(gè)連接項(xiàng)的大小乘以同時(shí)需要跟蹤的連接數(shù)量,得到總連接表內(nèi)存需求,考慮numa架構(gòu),確定將連接表分布在numa節(jié)點(diǎn)上,對進(jìn)行內(nèi)存的分配;其中申請內(nèi)存起始地址為numa_session_address,并記錄每塊內(nèi)存的起始地址memory_area[i]=numa_session_address[i],其中i表示為第i個(gè)numa的節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s3步驟中連接表結(jié)構(gòu)中包括連接年齡age、連接狀態(tài)標(biāo)記flag與連接所屬的numa節(jié)點(diǎn)信息node。
5.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s4步驟中五元組信息進(jìn)行哈希步驟預(yù)先定義五元組,五元組包括源ip地址、目的ip地址、源端口號(hào)、目的端口號(hào)與傳輸層協(xié)議,選擇md5哈希函數(shù),將五元信息組合成二進(jìn)制表示,進(jìn)行哈希,將其連接成長整數(shù),組合完成;md5哈希函數(shù)用以生成128位哈希值,為32個(gè)十六進(jìn)制數(shù)字。
6.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s6步驟中連接句柄是獲取連接的另一種方式,句柄對應(yīng)著連接表項(xiàng),連接句柄包括連接表項(xiàng)的年齡age與連接的session_id,其中session_id的部分信息記錄numa的node信息部分記錄session在對應(yīng)numa中的預(yù)申請連接表的偏移量。
7.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s6步驟中確定連接的有效性步驟先根據(jù)連接句柄中記錄session_id信息去知道對應(yīng)連接所在的numa節(jié)點(diǎn)信息與偏移量,根據(jù)初始化時(shí)記錄的memory_area[i]地址信息找到對應(yīng)的連接指針,去獲取連接表項(xiàng)中記錄的age年齡信息,若連接表項(xiàng)中記錄age年齡信息與連接句柄記錄的age年齡信息相等且連接狀態(tài)有效,則表示連接有效,得到連接表項(xiàng)的指針。
8.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s5步驟中判斷連接表狀態(tài)flag方法通過預(yù)先定義變量flag,在程序不同部分中,根據(jù)連接表的實(shí)際狀態(tài)去設(shè)定flag值,使用if語句判斷flag的值,執(zhí)行相應(yīng)操作。
9.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:s6步驟中預(yù)先分配出一個(gè)環(huán)境句柄,使用已經(jīng)分配的環(huán)境句柄去創(chuàng)建一個(gè)連接句柄,使用該句柄分配一個(gè)或多個(gè)語句句柄,去執(zhí)行sql語句,在執(zhí)行sql語句后,檢查返回的狀態(tài)碼去確定操作是否成功。
10.根據(jù)權(quán)利要求1所述的基于numa架構(gòu)的連接表管理的方法及裝置,其特征在于:網(wǎng)絡(luò)設(shè)備啟動(dòng)中,每個(gè)numa節(jié)點(diǎn)會(huì)預(yù)申請一塊大內(nèi)存用作連接表。