2014-02-28 12 views
2

我需要暫停「運行腳本」,讓操作系統將其狀態保存到磁盤,然後通過讀取該狀態並繼續它離開的地方。該系統是一個12核心的計算節點,共享內存爲48GB,運行linux。我沒有管理員權限,我使用ssh遠程登錄。腳本和其中的可執行文件不使用GUI,它是所有命令行,並且據我所知不需要明確的網絡或套接字。 「運行腳本」(或「管道」)我的意思是一個bash腳本或Perl腳本或兩者的組合,它們產生一些C/C++可執行文件,可能它們使用的是openmp並行化。或者使用gnu-parallel並行產生並行可執行文件。因此,我們不是在談論一個單一的可執行文件,而是一系列可執行文件,它們可以並行運行,也可以按順序運行,使用12個內核的隱式並行處理,通過多個unix命令(例如awk)粘貼在一起。暫停,保存到磁盤,使用PBS在超級計算機上重新啓動長作業

我需要掛起並重新啓動管道,因爲調度程序(MOAB)殺死了(系統規則)運行時間超過24小時的所有作業。這個想法是暫停一個工作並重新排列它。這種技術是完全合法的。

修改可執行文件的源代碼,以便它們全部保存狀態,之後恢復它並不實際,因爲它意味着要修改幾個開源可執行文件來接受「保存狀態和掛起」信號,假設ImageMagick的'轉換',甚至'grep','sed','awk'和perl!此外,還有一個可執行文件是封閉源代碼,沒有源代碼。因此,我相信我處於一種(唯一的?)實際選擇是在所謂的沙箱環境中運行我的'腳本/管道'的情況,例如, QEMU(一個模擬器),希望能夠發送一個信號到'休眠',通過將整個內存和CPU狀態保存到磁盤(48GB不成問題)並掛起來保存所有當前正在運行的程序的狀態。

我不是上述任何人的專家,所以請原諒我的術語,或者如果我說一些無效的東西。我只是素描。

回想一下:我問你們任何一個有經驗的解決方案,在linux下暫停和重啓複雜的腳本作業,而不訴諸修改代碼來保存狀態。該解決方案還應該具有相對高的計算效率,即不會浪費大量的超級計算機電源來運行仿真器。

如果您認爲我上面提到的QEMU解決方案是可以的,那麼請如果可以的話,舉一些如何開始的例子,即從公共ISO創建一個模擬器linux映像,加載映像,運行'腳本',告訴模擬器在20小時後'掛起/休眠',然後通過從暫停狀態讀取它的狀態來恢復模擬器。所有這些,理想情況下都是從命令行或通過腳本。

任何其他解決方案,只要它們是實用的(對於給定的設置)都是受歡迎的。

請注意:我沒有管理員權限,但可以在我的homedir中安裝東西,並有很多硬盤空間。此外,程序不使用GUI,它是所有的命令行,並且據我所知不需要顯式的網絡或套接字。

作爲使用模擬器解決方案的積極副作用,將任何此類「管道」分發到實現「沙箱」/仿真器的任何操作系統(例如,mac或win),而沒有複雜重新編譯所有內容並安裝gnu-utils,bash,boost等的過程。我發現自己多次陷入這種情況。

感謝您的幫助, bliako。

回答

2

我不確定您使用的是哪個版本的pbs,但是TORQUE提供了與Berkeley Lab Checkpoint/Restart(BLCR)的集成。 BLCR最重要的是所有節點具有相同的確切操作系統映像。設置它比較詳細,並且記錄在TORQUE docs.

本質上,pbs_mom守護進程被配置爲使用BLCR,並且無論何時停止作業,守護進程都會使用BLCR拍攝OS內部數據結構的快照,以瞭解確切的進程的狀態,使其能夠從完全相同的點重新啓動相同的進程。

+0

我遵循了您提供的文檔鏈接中的示例。每當我將它告訴檢查點(qhold jobID)時,我都設法讓調度程序爲檢查點數據創建一個目錄。但是這個目錄是空的,沒有檢查點數據被寫入那裏。這讓我懷疑BLCR不在內核中,或者Torque沒有用BLCR編譯(例如:http://docs.adaptivecomputing.com/torque/4-2-6/help.htm#topics/2-jobs/introToBLCR .htm%3FTocPath%3D2.0%20Submitting%20and%20managing%20jobs%7C2.6%20Job%20checkpoint%20and%20restart%7C _____ 1).qsub --version給出4.2.4.1和lsmod | grep blcr不顯示任何內容。 – bliako

+0

您在構建pbs_mom守護程序時是否配置了blcr? – dbeer

+0

我不知道,我只是一個低用戶,管理員似乎沒有線索。有沒有辦法檢查這個?還有一種方法來檢查內核是否與BLCR或BLCR內核模塊一起構建並加載?即使所有這些檢查都OK,你認爲這可以用於我需要的情況,即。一個bash腳本被提交給調度器,然後腳本運行一個perl腳本,它會產生幾個並行或順序的進程(大多數使用openmp),然後用shell命令(awk,sed)粘合在一起進行結果文件處理。BLCR將工作在這樣的情況下,還是隻爲1執行? – bliako

相關問題