我知道這個問題更多的是編譯器&操作系統相關的東西,但如果任何人都可以拋出一些光,它可以幫助我做一些優化。不同方法的功能性能分析Linux
我的目標是在文件夾中創建一個文件X Y
(這可能是數以百萬計的數量,也x和y是變異和變化的每一個電話。) 上午在Linux上工作。
要做到這一點,我有兩個途徑:
首先做一個CHDIR所需目錄「Y」,然後創建文件「X」。
C代碼:
char *dir = "/root/";
FILE *fd;
chdir(dir);
fd = fopen("geneliatestingN","a+");
fprintf(fd,"ansh");
fclose(fd);
strace的:
1329039557.874631 chdir("/root/") = 0
1329039557.874704 brk(0) = 0x9ad6000
1329039557.874726 brk(0x9af7000) = 0x9af7000
1329039557.874757 open("geneliatestingN", O_RDWR|O_CREAT|O_APPEND, 0666) = 3
1329039557.874817 fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
1329039557.874869 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fcb000
1329039557.874899 write(3, "ansh", 4) = 4
1329039557.874940 close(3) = 0
第二種方式是 只需提供該文件的絕對路徑,並創建它。
C代碼:
sprintf(filepath, "%s/geneliatestingS",dir);
fd = fopen(filepath,"a+");
fprintf(fd,"ansh Testing again");
fclose(fd);
strace的:
1329039557.875000 open("/root//geneliatestingS", O_RDWR|O_CREAT|O_APPEND, 0666) = 3
1329039557.875046 fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
1329039557.875096 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fcb000
1329039557.875123 write(3, "ansh Testing again", 18) = 18
1329039557.875160 close(3) = 0
那麼,什麼可能是更好的方法來基本實現此功能這兩個將消耗更少的指令週期,無論是在CPU更高效和執行時間。
什麼文件系統?也許一些背景會讓答案更有趣。您是否打算在不同目錄中創建大量文件? – 2012-02-12 10:00:31
嗨Johan,這是一個CentOS版本5.4(最終版)。 Linux 2.6.18-164.el5PAE 2009 i686 i686 i386 GNU/Linux。 Yess Johan,我有一套約1000萬個根目錄的目錄,這些文件被隨機地寫入這些目錄中的任何一個,或者可能是它的子目錄。 – 2012-02-12 10:16:38
請遵循以下建議。如果您確實需要堅持您的方法,請嘗試各種文件系統和文件系統選項(例如man tune2fs)。看看ReiserFS(或Reiser4) – 2012-02-12 12:04:44