【每日进步】May 2012
----------------------------------------------Tue May 8 2012--------------------------------------------
Ubuntu:
1.重定向輸出可以將stderr與stdout重定向到位置:$command > out.log 2>&1
2. gcc 編譯時遇到cannot find -lssl,使用ldconfig -p | grep libssl可以找到ssl動態庫,但是生成的符號鏈接不對,為libssl.so.1.0.0,重新創建符號鏈接libssl.so。
3. 編譯maui.3.3.1時遇到如下錯誤MPBSI.c:177:12: error: conflicting types for ‘get_svrport’
/usr/local/include/pbs_ifl.h:681:14: note: previous declaration of ‘get_svrport’ was here
網上查了下,這是maui的一個bug,將MPBSI.c中的get_svrport 的prototype去掉即可
4. 按內存使用大小查看進程:ps aux | sort -k4n
5. sort -k 選項用于指定按哪列進行排序,上面命令的n為按數字方式排序,為簡寫。-k POS1[,POS2], POS為F[.c][OPTS],F為field,指定第幾列(1開始),c為從第幾個字符開始排序,OPTS指定排序方式。
?
Torque, Maui:
1. 安裝完后,pbs_server運行正常,但是pbs_mom運行時出錯,查看log,錯誤為connection rejected,手動指定端口pbs_mom -M 15002 -S 15001后運行正常。
2. 使用pbs_sched為scheduler時,提交的作業無法運行,總是處于Q狀態。之后改成maui,但job仍是Q 狀態,查看maui.cfg 配置的ADMIN1為jujj,而作業也是使用jujj提交的,而maui默認不允許ADMIN1提交作業,修改為root,重啟maui,運行正常。
3. 解決torque maillist里的一個問題,作業提交后處于Q 狀態,checkjob提示no resources:提問者的queue配置里有個resources_default.neednodes屬性,查看文檔,并沒有該屬性,去掉并重啟maui后,運行正常,這里重啟maui是必須的。但是如果是修改合法的屬性,修改后是不需要重啟maui的。
----------------------------------------------Tue May 8 2012--------------------------------------------
Ubuntu:
1. 查看內存使用一般使用free命令,需要注意的是,第一行的free部分并不是剩余可用內存大小。Linux的思想是,內存是拿來用的,不象windows,無論你的真實物理內存有多少,他都要拿硬盤交換文件來讀。
free命令第二行-buffers/cache 指的是實際被程序占用的大小,+buffers/cache是實際可用部分。Linux使用buffers和cached部分來加快IO訪問,以應用程序角度是可用內存,以OS角度是被占用的。
參考:http://ldbjakyo.iteye.com/blog/785623??
?
----------------------------------------------Tue May 8 2012--------------------------------------------
Ubuntu:
1.?make: *** Warning:? Clock skew detected.? Your build may be incomplete。由于編譯時在NFS上進行,文件的修改時間可能會大于當前clock時間,導致makewarning
參考:http://www.linuxsa.org.au/pipermail/linuxsa/1999-August/008869.html????
gfortran,NPB:
1. 編譯FT時遇到編譯錯誤relocation truncated to fit。網上搜索后發現當程序數據區申請空間大于2G時會出現這類錯誤,而編譯服務器是64b機,這可以解釋通,FT在classC 4進程編譯時不會出錯,但是2進程就會出錯。解決方法是,添加選項-mcmodel=medium(gfortran下)。
以前多是在32環境下編程,后在64位環境下編寫編譯程序,還需要多注意。
參考:http://www.ualberta.ca/CNS/RESEARCH/LinuxClusters/64-bit.html??http://software.intel.com/en-us/articles/avoiding-relocation-errors-when-building-applications-with-large-global-or-static-data-on-intel64/?
?
| ----------------------------------------------Mon May?14 2012-------------------------------------------- |
GCC,GDB:
1. LD_LIBRARY_PATH, LD_PRELOAD表示很有用的說
2. 使用64位編譯時,所有相關文件都應該是64為編譯,gcc中即都使用-fPIC
?
3. gdb中查看stack,args:info stack? info args
4. GCC printf optimization, GCC對printf的調用默認會進行優化,根據具體情況使用puts、putchar等替代printf以提高性能,如果需要禁止該功能,-fno-builtin-printf
參考:?http://wolfie.stfu.cz/src/GCC_printf_optimization??
5. HOOK : dlsym, 所在位置dlfcn.h -ldl,引用前define宏_GNU_SOURCE
參考:?http://www.linuxforu.com/2011/08/lets-hook-a-library-function/
6. 生成.a文件, ar rcs libxx.a xx.o;?生成.so文件, gcc -shared -o libshared.so ...?
7.??經過試驗,GCC從左到右的符號搜索順序,僅對.o 與.a有效 .o 間和.o 與.so無效
| ----------------------------------------------Tue May?15 2012-------------------------------------------- |
GCC:
1. gcc 查看預編譯(preprocessing)后的輸出使用-E,結果會打印到stdout?
2. 重寫某個庫,如libc的API時,除了可以使用HOOK,也可以用宏定義,如修改fopen:
先實現....myfopen(...),實現內可以調用fopen等libc庫函數,然后寫個頭文件
#define fopen myfopen
使用新庫的程序,只要引入該頭文件即可
這樣做相比HOOK的優勢在于相關數據結構也可以進行修改:
定義struct File.....在頭文件中定義如下:
#define FILE struct File
注意頭文件的引用順序是很重要的。
?GCC, ELF, PE:
1. An ELF executable lists the symbols it needs and the libraries it needs, but it doesn't record which symbol is in which library. A PE file, on the other hand, lists the symbols to import from each library.?這可以解釋為什么如下程序會產生循環調用:
fopen.c
....fopen(..){
myfopen(..);
}
myfopen.c myfopen(..)
{
fopen(...);// glibc version
}
main.c
int main(){
fopen(...);
}
$ gcc -c *.c
$ gcc -shared -o libmyopen.so myopen.o
$ gcc -o test main.o fopen.o libmyopen.so
$ ./test
libmyopen.so內并沒有將printf與libc綁定,當運行時會去尋找首先出現的符號,這里是main中的printf,從而產生循環調用
2.??The ELF scheme is definitely a lot more flexible. Since each executable names the "interpreter" program (now always the dynamic linker named ld.so) to use, different executables could use different interpreters without requring any operating system changes. In practice, this makes it easier to support executables from variant versions of Unix, notably Linux and BSD, by making a dynamic linker that links to compatibility libraries that support non-native executables.
參考:?http://www.iecc.com/linker/linker10.html?
?
| ----------------------------------------------Mon May?21 2012-------------------------------------------- |
TORQUE,Maui:
1. 使用qsub提交的腳本作業,執行目錄在用戶home目錄,但有時會用到腳本提交目錄中的文件,如果腳本時sh腳本的話,使用:
cd $PBS_O_WORKDIR轉到腳本提交目錄
2. 查看作業狀況,qstat? tracejob? checkjob(maui程序),qstat只能查看本用戶的作業,查看所有作業,可以使用maui的showq查看
3. showq? showbf? showres可以查看資源占用和資源使用情況,showres -n查看被占用的節點
Linux:
1. 將stderr傳給管道? <command> 2>&1 | <command>
2. 查看進程系統調用列表 strace,還可用來查看各調用統計信息,debug程序(在程序內容未知的情況下更有效)時,查看出錯位置
3.?查看某用戶使用? id
4. 寫了個getuid? getuid的hook函數,想獲得root權限。函數內直接返回0,使用LD_PRELOAD 運行,并沒有獲得root權限,這種方法看來不行
| ----------------------------------------------Mon May?21 2012-------------------------------------------- |
Linux:
1. xxd以hex形式查看文件?
2. 命令行瀏覽器 lynx links
TORQUE,Maui:
1. qsub 的-W在使用stagein stageout 時,對每個文件都要以stagein=/stageout=開頭,即:-W stagein=localfile@remote:remotehost,stagein=....?
?
----------------------------------------------Tue?May?22?2012--------------------------------------------
?
Intel,Linux:
1. 獲取Intel CPU 拓撲結構,Intel提供了一個cpu-topo的程序。
參考:http://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/? ?
?
----------------------------------------------Fri?May?25?2012--------------------------------------------?-
?
Linux:
1. 在Ubuntu11.10上安裝Chrome出錯,說deb文件無法打開,經查閱解決方案如下:
?
sudo apt-get install -f
sudo dpkg -i google-chrome-stable_current_i386.deb?
2. 找到一個terminal的替代品,guake,表示很酷很好用
3. conky一個系統監視軟件,很酷,不過現在用不到,先留著
4. Macbuntu ubuntu上的mac主題包,對11.10的支持有限,文檔上寫的不支持,不過也可以安裝,把UBUVER改成你的ubuntu版本就就可以,安裝后可能會有bug。我的ubuntu為11.10,安裝后不會覆蓋ubuntu自帶的unity(就是左側的那個任務欄,表示很丑,可能用windows用習慣了,全局菜單也不習慣,這樣有些程序全屏都全屏不了,比如chrome),且docky不會自動運行,需要自己配置,很酷,但是用起來不習慣
?
| ----------------------------------------------Mon May?28?2012--------------------------------------------
1. MPICH2不支持Infiniband。最初沒調查清楚,以為MPICH2支持并會自動選擇Infiniband,看來需要重新進行測試了: 支持Infiniband的庫:MVAPICH2,OopenMPI 2. 使用非MVAPICH2的mpicc編譯程序時,除了libmpich外還需要額外引入-lrdmacm -libverbs -libumad -ldl,不過最好還是使用MVAPICH2帶的mpicc。 ----------------------------------------------Tue?May?29?2012--------------------------------------------
1. Infiniband 的編程接口標準:OFED,由OFA開發 MVAPICH2: 1. MV2對編譯的程序會自動進行CPU affinity,此時使用taskset和numactl是不管用的,如果不想使用該功能或者需要自己指定,export?MV2_ENABLE_AFFINITY=0,或者使用MV2提供的自定義CPU affinity的方式:使用PLPA,MV2_CPU_MAPPING環境變量 ----------------------------------------------Thu?May?31 2012------------------------------------------- Linux: 1. ifconfig得到的輸出,rx和tx的含義 ? ?RX?is the telegraph and radio abbreviation for "receive" or "receiver". ? ?TX, the telegraph abbreviation for?transmission 2. netstat 命令用法,常見參數: ? -a (all)顯示所有選項,默認不顯示LISTEN相關 -p 顯示建立相關鏈接的程序名 -i ?顯示interface的信息 參考:http://blog.chinaunix.net/uid-25940216-id-3213921.html? 3.?watch 是一個非常實用的命令,基本所有的 Linux 發行版都帶有這個小工具,如同名字一樣,watch 可以幫你監測一個命令的運行結果,省得你一遍遍的手動運行。如:watch ifconfig ?watch free -m用于監控網絡及內存使用 ?默認 watch 會以 2s 的間隔重復運行命令,你也可以用 -n 參數指定時間間隔,還有一個實用的參數是 -d,這樣 watch 會幫你高亮顯示變化的區域,這樣更加一目了然了~ OpenMPI,MVAPICH2, Infiniband: 1. 使用MVAPICH2編譯的程序默認使用infiniband,但是在ifconfig中看不到流量變化,原因未知 2. openmpi可以在運行時指定運行時的通信網絡,使用-mca btl 指定,如openib, sm , tcp,可用的btl可用ompi_info查看 3. openMPI綁定進程的機制還是不錯的,不再需要使用taskset來設置了 ----------------------------------------------Fri?Jun 1?2012------------------------------------------- Linux: 1.?ifconfig RX/TX do not reflect the infiniband native verbs communication. These counters will change only if you run TCP/IP over infiniband network. 2. collectl utility : show?traffic over infiniband, 對infiniband的支持使用perfquery實現,需要root權限 3. 設置程序的SUID位,chmod +/-s ?<program> 4. ls -l 第二列顯示的link數 OpenMPI,MVAPICH2, Infiniband: 1. OpenMPI 的tcp運行方式使用的IPoIB(IB可用的情況下),ifconfig顯示eth0/ib0 都有流量。 ----------------------------------------------Sat?Jun 2?2012-------------------------------------------? Windows: 1. 命令行設置IP方法:netsh interface ip set address name="本地連接" source=static addr=??mask= gateway=? |
轉載于:https://www.cnblogs.com/D3Hunter/archive/2012/06/05/2536030.html
總結
以上是生活随笔為你收集整理的【每日进步】May 2012的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 中的ROWID
- 下一篇: 生成和验证注册码的基本思路