專利名稱::在計(jì)算機(jī)機(jī)群系統(tǒng)中獲取結(jié)點(diǎn)信息的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)機(jī)群監(jiān)控系統(tǒng)領(lǐng)域,更具體地,涉及一種在計(jì)算機(jī)機(jī)群系統(tǒng)中獲取結(jié)點(diǎn)信息的方法,旨在提高機(jī)群監(jiān)控系統(tǒng)結(jié)點(diǎn)信息采集效率,這種方法提高了監(jiān)控系統(tǒng)可允許的數(shù)據(jù)采集頻率,降低了監(jiān)控方法對(duì)系統(tǒng)資源的占用。
背景技術(shù):
:機(jī)群服務(wù)器系統(tǒng)(Cluster)是相互連接的多個(gè)獨(dú)立計(jì)算機(jī)(結(jié)點(diǎn))的集合,每個(gè)結(jié)點(diǎn)都是單獨(dú)的計(jì)算機(jī),可以是PC機(jī)也可以是服務(wù)器,每個(gè)結(jié)點(diǎn)都有自己的處理器、存儲(chǔ)系統(tǒng)、I/O設(shè)備和操作系統(tǒng)。結(jié)點(diǎn)機(jī)上的操作系統(tǒng)最普遍的是Linux。這些結(jié)點(diǎn)通過(guò)高速網(wǎng)絡(luò)連接起來(lái),應(yīng)用中間件將各個(gè)結(jié)點(diǎn)形成一個(gè)單一映像的超級(jí)服務(wù)器。機(jī)群服務(wù)器是高性能服務(wù)器家族中當(dāng)前最受關(guān)注的一個(gè)分支,其性能覆蓋小型機(jī)(SMPUNIX工作站/服務(wù)器)到大型機(jī)(超級(jí)服務(wù)器),有很高性能價(jià)格比。高端機(jī)群服務(wù)器已在石油地震資料處理、基因和蛋白質(zhì)計(jì)算等重要領(lǐng)域廣泛應(yīng)用。機(jī)群計(jì)算將成格點(diǎn)計(jì)算(Gridcomputing)的一種主要實(shí)現(xiàn)形式。國(guó)際上一些專家甚至預(yù)言格點(diǎn)計(jì)算環(huán)境將是新一代的因特網(wǎng),而機(jī)群服務(wù)器則是其關(guān)鍵設(shè)備。由于機(jī)群結(jié)點(diǎn)數(shù)眾多,對(duì)機(jī)群進(jìn)行高效適時(shí)的監(jiān)控是一個(gè)重要而緊迫的問(wèn)題。為了提高機(jī)群監(jiān)控系統(tǒng)的適時(shí)性,必須提高對(duì)結(jié)點(diǎn)信息的采樣頻率,然而提高采樣頻率又會(huì)導(dǎo)致監(jiān)控軟件本身占用的系統(tǒng)資源加大。如何做到盡量適時(shí)地監(jiān)控計(jì)算機(jī)機(jī)群,又不占用很多的系統(tǒng)資源是一個(gè)問(wèn)題。在以前的機(jī)群監(jiān)控系統(tǒng)中,對(duì)結(jié)點(diǎn)信息的采樣需要調(diào)用一系列系統(tǒng)調(diào)用,系統(tǒng)調(diào)用所導(dǎo)致的上下文轉(zhuǎn)換非常占用資源,因此當(dāng)采樣頻率提高時(shí),監(jiān)控軟件所占用的CPU時(shí)間會(huì)明顯上升。圖1示出了傳統(tǒng)的系統(tǒng)信息采集方法的流程。實(shí)際的采集過(guò)程還會(huì)讀取一些其它的proc文件如net/dev等,并且還有系統(tǒng)調(diào)用hostname()等。采集過(guò)程中的每一個(gè)系統(tǒng)調(diào)用都會(huì)引起上下文轉(zhuǎn)換,圖2示出了傳統(tǒng)的系統(tǒng)信息采集方法中的上下文轉(zhuǎn)換的流程,當(dāng)采樣頻率升高時(shí),由上下文轉(zhuǎn)換所占用的CPU時(shí)間會(huì)明顯上升。
發(fā)明內(nèi)容本發(fā)明的目的是提高機(jī)群監(jiān)控系統(tǒng)對(duì)計(jì)算機(jī)結(jié)點(diǎn)的采集頻率,同時(shí)又不增加機(jī)群監(jiān)控方法所占用的系統(tǒng)資源。通過(guò)一種在計(jì)算機(jī)機(jī)群系統(tǒng)中獲取結(jié)點(diǎn)信息的方法,一次性獲取所有的所需系統(tǒng)信息,從而極大地減少系統(tǒng)調(diào)用的次數(shù),也就減少了監(jiān)控方法所占用的CPU時(shí)間。本發(fā)明提出了一種在計(jì)算機(jī)機(jī)群系統(tǒng)中獲取結(jié)點(diǎn)信息的方法,運(yùn)行在計(jì)算機(jī)機(jī)群系統(tǒng)中的每個(gè)結(jié)點(diǎn)上,所述方法包括以下步驟初始化步驟,對(duì)系統(tǒng)調(diào)用列表進(jìn)行初始化;信息獲取步驟,包括從內(nèi)核中獲取CPU相關(guān)信息的步驟;從內(nèi)核中獲取網(wǎng)絡(luò)接口信息的步驟;從內(nèi)核中獲取系統(tǒng)相關(guān)信息的步驟;以及信息復(fù)制步驟,將上述信息獲取步驟中所獲得的信息復(fù)制到用戶態(tài),以便用于對(duì)結(jié)點(diǎn)狀態(tài)的監(jiān)控。提高了監(jiān)控系統(tǒng)可允許的數(shù)據(jù)采集頻率,降低了監(jiān)控方法對(duì)系統(tǒng)資源的占用。圖1示出了傳統(tǒng)的系統(tǒng)信息采集方法的流程;圖2示出了傳統(tǒng)的系統(tǒng)信息采集方法中的上下文轉(zhuǎn)換的流程;圖3示出了按照本發(fā)明實(shí)施例的結(jié)點(diǎn)信息采集方法的方框圖;圖4示出了按照本發(fā)明實(shí)施例的結(jié)點(diǎn)信息采集方法的初始化步驟的流程圖;以及圖5示出了按照本發(fā)明實(shí)施例的結(jié)點(diǎn)信息采集方法的流程圖。具體實(shí)施例方式現(xiàn)在將參考附圖詳細(xì)描述本發(fā)明的實(shí)施例。圖3示出了按照本發(fā)明實(shí)施例的結(jié)點(diǎn)信息采集方法的方框圖。通過(guò)一個(gè)Linux內(nèi)核模塊給Linux操作系統(tǒng)增加一個(gè)系統(tǒng)調(diào)用,用戶所需要的所有系統(tǒng)信息都通過(guò)這個(gè)系統(tǒng)調(diào)用一次性獲取。NA結(jié)點(diǎn)代理,接收控制臺(tái)傳來(lái)的命令,采集結(jié)點(diǎn)的系統(tǒng)信息,并將結(jié)點(diǎn)信息經(jīng)過(guò)機(jī)柜代理(NP)送至控制臺(tái)。NA運(yùn)行在用戶態(tài)。sysstat()獲得結(jié)點(diǎn)信息的系統(tǒng)調(diào)用。這個(gè)系統(tǒng)調(diào)用有一個(gè)參數(shù)是指向structsysstat結(jié)構(gòu)的指針。系統(tǒng)調(diào)用可以獲得所有需要采集的信息。lcm_mod提供sysstat()系統(tǒng)調(diào)用的內(nèi)核模塊,運(yùn)行在內(nèi)核態(tài)。加載該模塊以后才可以使用sysstat()系統(tǒng)調(diào)用。kernelLinux內(nèi)核。通過(guò)sysstat()可以獲得系統(tǒng)負(fù)載情況、內(nèi)存使用狀況、進(jìn)程數(shù)、CPU信息和網(wǎng)絡(luò)接口信息等。sysstat()還可以判斷本結(jié)點(diǎn)中是否有myrinet(高速專用通信網(wǎng))卡,如果有的話,可以通過(guò)讀取myrinet卡的寄存器來(lái)采集myrinet網(wǎng)卡的連接狀態(tài)。sysstat()采集到的信息都包含在structsysstat結(jié)構(gòu)中,數(shù)據(jù)結(jié)構(gòu)是監(jiān)控系統(tǒng)所定義的,包含用戶所需要的系統(tǒng)信息,其結(jié)構(gòu)示例如下structsysstat{charname[64];/*系統(tǒng)名*/unsignedlongloads[3];/*1,5,和15內(nèi)每秒鐘的平均負(fù)載*/unsignedlongtotalram;/*總的內(nèi)存大小*/unsignedlongfreeram;/*可用內(nèi)存大小*/unsignedlongprocesses;/*進(jìn)程數(shù)*/unsignedlongusers;/*用戶數(shù)*/unsignedlongcpu_num;/*CPU個(gè)數(shù)*/structcpuinfocpu_info[MAX_CPUS];/*CPU信息,頻率、利用率等*/unsignedlongnetdev_num;/*網(wǎng)絡(luò)端口數(shù)*/structnetinfonet_info[MAX_NET_IF];/*網(wǎng)絡(luò)端口信息*/}。本領(lǐng)域的技術(shù)人員所清楚的是,所述數(shù)據(jù)結(jié)構(gòu)并不局限于上述示例,任何包括所需信息的結(jié)構(gòu)都是可能的。圖4示出了按照本發(fā)明實(shí)施例的結(jié)點(diǎn)信息采集方法的初始化步驟的流程圖。lcm_mod在加載的時(shí)候需要經(jīng)過(guò)一些初始化,初始化過(guò)程如下首先,在步驟S401,定位Linux內(nèi)核的系統(tǒng)調(diào)用列表。Linux內(nèi)核的系統(tǒng)調(diào)用列表sys_call_table不輸出給模塊使用,所以無(wú)法直接使用sys_call_table。而需要從System.map中讀取sys_call_table的地址。System.map由nmvmlinux生成。其中nm是查看可執(zhí)行文件的符號(hào)的工具,vmlinux是Linux的內(nèi)核文件。然后,在步驟S402中,修改系統(tǒng)調(diào)用列表的第255項(xiàng),將其修改成sys_sysstat()函數(shù)的地址。系統(tǒng)調(diào)用列表原來(lái)的值是sys_ni_syscall()函數(shù)的指針。sys_ni_syscall()是個(gè)空函數(shù),所以修改該項(xiàng)不影響操作系統(tǒng)其它部分的運(yùn)行。也可以修改系統(tǒng)調(diào)用列表的其它為空函數(shù)的項(xiàng),但必須小于255,因?yàn)樵趌inux2.4.18及以下版本的內(nèi)核中,255是系統(tǒng)調(diào)用列表的最后一項(xiàng),如果超出255,會(huì)導(dǎo)致無(wú)法預(yù)計(jì)的錯(cuò)誤,甚至?xí)瓜到y(tǒng)崩潰。在步驟S403中,定位avenrun(平均活動(dòng)進(jìn)程數(shù))、total_forks(總進(jìn)程數(shù))、module_list(模塊列表)、cpu_khz(CPU頻率)等。系統(tǒng)負(fù)載loads需要通過(guò)Linux內(nèi)核中的avenrun計(jì)算而來(lái)。avenrun也是不輸出給模塊使用的,與sys_call_table一樣,需要從System.map文件中讀取。用同樣的方法定位total_forks、module_list。對(duì)于版本大于或等于2.4.20的內(nèi)核,還需要定位cpu_khz。圖5示出了按照本發(fā)明實(shí)施例的結(jié)點(diǎn)信息采集方法的流程圖。系統(tǒng)加載lcm_mod模塊以后,NA就可以調(diào)用sysstat()了。NA調(diào)用sysstat()以后,進(jìn)入內(nèi)核態(tài),內(nèi)核轉(zhuǎn)到sys_sysstat()函數(shù),該函數(shù)獲取系統(tǒng)信息,并把這些信息復(fù)制到用戶態(tài)。sys_sysstat的運(yùn)行過(guò)程如下,在步驟S501,獲取CPU相關(guān)信息,包括CPU個(gè)數(shù)、CPU產(chǎn)商、CPU型號(hào)、CPU緩存大小、頻率、系統(tǒng)時(shí)間、用戶時(shí)間、利用率等。如果沒(méi)有SMP,CPU個(gè)數(shù)為1,如果有SMP,CPU個(gè)數(shù)可以從內(nèi)核中的smp_num_cpus變量得到。CPU的頻率可以從cpu_khz變量得到。CPU產(chǎn)商、CPU型號(hào)、CPU緩存大小等則可以從cpu_data得到。cpu_data是類型為structcpuinfo_x86的一個(gè)數(shù)組。對(duì)于2.6以上版本的內(nèi)核,系統(tǒng)時(shí)間、用戶時(shí)間、利用率等可以從內(nèi)核中的kstat_cpu變量得到,對(duì)于2.4.x的內(nèi)核,可以從kstat變量得到。在步驟S502,獲取網(wǎng)絡(luò)接口信息,如果存在myrinet網(wǎng)卡,則包括myrinet網(wǎng)卡的信息。這些信息包括接口名、硬件地址、接口類型、連接狀態(tài)、接收/發(fā)送包數(shù)、接收/發(fā)送字節(jié)數(shù)、接收/發(fā)送錯(cuò)誤數(shù)等。網(wǎng)絡(luò)接口信息從類型為structnet_device的數(shù)據(jù)變量dev_base得到。對(duì)于myrinet網(wǎng)卡,必須從已加載的myrinet網(wǎng)卡驅(qū)動(dòng)模塊中讀取myrinet卡的信息。在步驟S503,獲取系統(tǒng)名、系統(tǒng)負(fù)載、內(nèi)存使用狀況等信息。系統(tǒng)平均負(fù)載是從avenrun計(jì)算得到的。內(nèi)存使用狀況可以調(diào)用內(nèi)核中的函數(shù)si_meminfo得到。系統(tǒng)名通過(guò)讀取內(nèi)核數(shù)據(jù)變量system_utsname獲取。在步驟S504,將采集的信息復(fù)制到用戶態(tài)。權(quán)利要求1.一種在計(jì)算機(jī)機(jī)群系統(tǒng)中獲取結(jié)點(diǎn)信息的方法,運(yùn)行在計(jì)算機(jī)機(jī)群系統(tǒng)中的每個(gè)結(jié)點(diǎn)上,所述方法包括以下步驟初始化步驟,對(duì)系統(tǒng)調(diào)用列表進(jìn)行初始化;信息獲取步驟,包括從內(nèi)核中獲取CPU相關(guān)信息的步驟;從內(nèi)核中獲取網(wǎng)絡(luò)接口信息的步驟;以及從內(nèi)核中獲取系統(tǒng)相關(guān)信息的步驟;以及信息復(fù)制步驟,將上述信息獲取步驟中所獲得的信息復(fù)制到用戶態(tài),以便用于對(duì)結(jié)點(diǎn)狀態(tài)的監(jiān)控。2.按照權(quán)利要求1所述的獲取結(jié)點(diǎn)信息的方法,其特征在于所述初始化步驟包括以下子步驟第一定位步驟,定位系統(tǒng)調(diào)用列表;修改步驟,將系統(tǒng)調(diào)用列表中的預(yù)定項(xiàng)修改為指向上述獲取與復(fù)制步驟的標(biāo)識(shí)符;以及第二定位步驟,定位平均活動(dòng)進(jìn)程數(shù)(avenrun)、總進(jìn)程數(shù)(total_forks)、模塊列表(module_list)、CPU頻率(cpu_khz)等3.按照權(quán)利要求2所述的獲取節(jié)點(diǎn)信息的方法,其特征在于所述預(yù)定項(xiàng)為系統(tǒng)調(diào)用列表中的空函數(shù)項(xiàng)。4.按照權(quán)利要求2所述的獲取節(jié)點(diǎn)信息的方法,其特征在于所述預(yù)定項(xiàng)為系統(tǒng)調(diào)用列表中小于或等于第255項(xiàng)的項(xiàng)。5.按照權(quán)利要求1所述的獲取結(jié)點(diǎn)信息的方法,其特征在于所述CPU相關(guān)信息包括CPU個(gè)數(shù)、CPU產(chǎn)商、CPU型號(hào)、CPU緩存大小、頻率、系統(tǒng)時(shí)間、用戶時(shí)間、利用率。6.按照權(quán)利要求1或5所述的獲取結(jié)點(diǎn)信息的方法,其特征在于獲取CPU相關(guān)信息的步驟包括如果沒(méi)有SMP,則CPU個(gè)數(shù)為1,如果有SMP,則從內(nèi)核中的smp_num_cpus變量得到CPU個(gè)數(shù);從cpu_khz變量得到CPU的頻率;從cpu_data得到CPU產(chǎn)商、CPU型號(hào)、CPU緩存大??;以及從內(nèi)核中的kstat_cpu變量得到系統(tǒng)時(shí)間、用戶時(shí)間、利用率。7.按照權(quán)利要求5所述的獲取結(jié)點(diǎn)信息的方法,其特征在于獲取CPU相關(guān)信息的步驟包括如果沒(méi)有SMP,則CPU個(gè)數(shù)為1,如果有SMP,則從內(nèi)核中的smp_num_cpus變量得到CPU個(gè)數(shù);從cpu_khz變量得到CPU的頻率;從cpu_data得到CPU產(chǎn)商、CPU型號(hào)、CPU緩存大小;以及從內(nèi)核中的kstat變量得到系統(tǒng)時(shí)間、用戶時(shí)間、利用率。8.按照權(quán)利要求1所述的獲取結(jié)點(diǎn)信息的方法,其特征在于獲取網(wǎng)絡(luò)接口信息的步驟包括如果存在myrinet網(wǎng)卡,則獲取myrinet網(wǎng)卡的信息。9.按照權(quán)利要求1或8所述的獲取結(jié)點(diǎn)信息的方法,其特征在于獲取網(wǎng)絡(luò)接口信息的步驟包括從類型為structnet_device的數(shù)據(jù)變量dev_base得到所述網(wǎng)絡(luò)接口信息;以及對(duì)于myrinet網(wǎng)卡,必須從已加載的myrinet網(wǎng)卡驅(qū)動(dòng)模塊中讀取myrinet卡的信息。10.按照權(quán)利要求1或8所述的獲取結(jié)點(diǎn)信息的方法,其特征在于所述網(wǎng)絡(luò)接口信息包括接口名、硬件地址、接口類型、連接狀態(tài)、接收/發(fā)送包數(shù)、接收/發(fā)送字節(jié)數(shù)、接收/發(fā)送錯(cuò)誤。11.按照權(quán)利要求10所述的獲取結(jié)點(diǎn)信息的方法,其特征在于獲取網(wǎng)絡(luò)接口信息的步驟包括從類型為structnet_device的數(shù)據(jù)變量dev_base得到所述網(wǎng)絡(luò)接口信息;以及對(duì)于myrinet網(wǎng)卡,必須從已加載的myrinet網(wǎng)卡驅(qū)動(dòng)模塊中讀取myrinet卡的信息。12.按照權(quán)利要求1所述的獲取結(jié)點(diǎn)信息的方法,其特征在于所述系統(tǒng)相關(guān)信息包括系統(tǒng)名、系統(tǒng)負(fù)載、內(nèi)存使用狀況。13.按照權(quán)利要求1或12所述的獲取結(jié)點(diǎn)信息的方法,其特征在于獲取系統(tǒng)相關(guān)信息的步驟包括從avenrun計(jì)算得到系統(tǒng)平均負(fù)載;調(diào)用內(nèi)核中的函數(shù)si_meminfo得到內(nèi)存使用狀況;以及通過(guò)讀取內(nèi)核數(shù)據(jù)變量system_utsname獲取系統(tǒng)名。全文摘要一種在計(jì)算機(jī)機(jī)群系統(tǒng)中獲取結(jié)點(diǎn)信息的方法,運(yùn)行在計(jì)算機(jī)機(jī)群系統(tǒng)中的每個(gè)結(jié)點(diǎn)上,所述方法包括以下步驟初始化步驟,對(duì)系統(tǒng)調(diào)用列表進(jìn)行初始化;信息獲取步驟,包括從內(nèi)核中獲取CPU相關(guān)信息的步驟;從內(nèi)核中獲取網(wǎng)絡(luò)接口信息的步驟;從內(nèi)核中獲取系統(tǒng)相關(guān)信息的步驟;以及信息復(fù)制步驟,將上述信息獲取步驟中所獲得的信息復(fù)制到用戶態(tài),以便用于對(duì)結(jié)點(diǎn)狀態(tài)的監(jiān)控。提高了監(jiān)控系統(tǒng)可允許的數(shù)據(jù)采集頻率,降低了監(jiān)控方法對(duì)系統(tǒng)資源的占用。文檔編號(hào)G06F11/30GK1673971SQ20041003320公開(kāi)日2005年9月28日申請(qǐng)日期2004年3月26日優(yōu)先權(quán)日2004年3月26日發(fā)明者蔣曉華,饒弋寧,張羽飛,陳又新,陳然,金正操,李金麗,崔吉順,易昭華,程菊生申請(qǐng)人:聯(lián)想(北京)有限公司