为什么系统调用容器需要更多的执行时间?

时间:2017-10-11 11:41:08

标签: docker kernel system-calls

我们面临的问题是系统调用与容器外部相比,容器内部执行时间更长。

Docker容器设置:

BASE OS Container : Ubuntu Container image
CAPS ALLOW : sys_resource sys_nice sys_tty_config ipc_lock

主机操作系统:

RHEL 7.3

集装箱外的时间:

时间./a.out

for循环执行时间为8.690000秒

for循环执行

需要9.170000秒
real    0m9.188s
user    0m1.768s
sys     0m7.419s

在容器内的时间:

for循环执行时间为64.123517秒

for循环执行时间为64.316575秒

 real    1m4.503s
 user    0m1.449s
 sys     1m2.870s

我们运行以下代码来检查系统调用的执行时间

 int main()
 {
     int key,share_id,num;
     char *data;
     int semid;
     int count= 0;
     struct sembuf sb={0,-1,0};
    clock_t t;
    t = clock();

    if(!fork())
    { //Child Porcess
          for (int i= 0 ;i < 50; i++){
             for (int idx =0; idx < 1000000 ; idx++){
                sb.sem_op=-1; //Lock
                semop(share_id,(struct sembuf *)&sb,1);
                count++;
                sb.sem_op=1;//Unlock
                semop(share_id,(struct sembuf *)&sb,1);
             }
          }
     }
     else
     {     //Parent Process
        for (int i= 0 ;i < 50; i++){
            for (int idx=0; idx < 1000000; idx++){
                sb.sem_op=-1; //Lock
                semop(share_id,(struct sembuf *)&sb,1);
                count++;
                sb.sem_op=1;//Unlock
                semop(share_id,(struct sembuf *)&sb,1);
             }
       }
     }
    t = clock() - t;

    double time_taken = ((double)t)/CLOCKS_PER_SEC; // in seconds

    printf(" for loop took %f seconds to execute \n", time_taken);
    return 0;
 }

0 个答案:

没有答案