Loop-Device
並聯迴路安裝
我正在做一個項目,我需要掛載 100 多個循環設備並將其合併到 AUFS 掛載點作為觀察,順序掛載 90 個循環設備需要 25 秒。
我正在尋找一種解決方案,通過並行安裝環路設備來最大限度地減少時間
我認為這很明顯,但是
typeset -i M=1 while [ $M -le 102 ] do mount mysourcedevice$M targetdir$M & let M++ done wait
應該做的工作。在執行下一條命令之前,
wait
將等待所有子程序完成。
也許執行緒版本可能會更快一些,您必須自己調整
mount()
參數。#include <stdio.h> #include <pthread.h> #include <sys/mount.h> #include <string.h> #include <errno.h> #define DEVS 100 static void *mountt(void *d) { int i = (int)d; char loop[48], mp[48]; snprintf(loop, 47, "/dev/loop%d", i); snprintf(mp, 47, "/mnt/%d", i); if (mount(loop, mp, "ext2", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "") < 0) fprintf(stderr, "mount[%d]: failed: %s\n", i, strerror(errno)); return NULL; } int main(int argc, char **argv) { int i; pthread_t tt[DEVS]; for (i=0; i<DEVS; i++) { if (pthread_create( &tt[i], NULL, mountt, (void*)i) != 0) fprintf(stderr, "thread create[%d] failed: %s\n", i, strerror(errno)); } for (i=0; i<DEVS; i++) pthread_join(tt[i], NULL); return 0; }
gcc -O2 -Wall -o mountt mountt.c -lpthread