Last active
July 10, 2023 14:03
-
-
Save sitano/e2ff4a0463bc1fa545c6102110a1ae69 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# cat syscall_bench.c | |
#define _GNU_SOURCE | |
#include <asm/unistd_64.h> | |
#include <sys/types.h> | |
#include <sys/wait.h> | |
#include <sys/syscall.h> | |
#include <unistd.h> | |
#include <stdlib.h> | |
#include <stdio.h> | |
int main(int argc, char **argv) | |
{ | |
int n_threads = atoi(argv[2]), n_syscalls = atoi(argv[1]); | |
unsigned long long i, j; | |
int status; | |
pid_t pid; | |
for (j = 0; j < n_threads - 1; j++) { | |
pid = fork(); | |
if (pid < 0) | |
return 1; | |
if (pid == 0) | |
break; | |
} | |
for (i = 0; i < n_syscalls; i++) { | |
syscall(__NR_clock_gettime, 1 << 31, NULL); | |
} | |
if (pid != 0) { | |
for (j = 0; j < n_threads - 1; j++) { | |
if (wait(&status) == -1 || status != 0) { | |
return 1; | |
} | |
} | |
} | |
printf("done\n"); | |
while (1) | |
sleep(1000); | |
return 0; | |
} | |
# gcc -Wall syscall_bench.c -o syscall_bench | |
# n=1; for i in `seq $n`; do runsc --ignore-cgroups --network none do ./syscall_bench 1000000 2 & done | |
root@6f3ef52c5247:/# pgrep 'exe' | xargs -I '{}' cat /proc/{}/stat | awk 'BEGIN {print "pgrp pid cmd name: utime ktime"} { ("cat /proc/"$1"/cmdline") | getline t; if ($5 > 1000) { print $5 " " $1 " " substr(t, 0, 11) " " $2 ": " $14*10 " " $15*10; a+=$14+$15;}} END { print "=" a*10 "ms = " (a*10)/1 }' | |
pgrp pid cmd name: utime ktime | |
1685 1685 runsc-gofer (exe): 10 0 | |
1690 1690 runsc-sandb (exe): 3570 230 | |
1720 1720 runsc-sandb (exe): 0 0 | |
1720 1721 runsc-sandb (exe): 0 0 | |
1720 1729 runsc-sandb (exe): 0 0 | |
1720 1733 runsc-sandb (exe): 1980 1330 | |
1720 1735 runsc-sandb (exe): 0 0 | |
1720 1736 runsc-sandb (exe): 2040 1260 | |
=10420ms = 10420 | |
# n=8; for i in `seq $n`; do runsc --platform=systrap --ignore-cgroups --network none do ./syscall_bench 1000000 2 & done | |
[1] 2447 | |
[2] 2448 | |
[3] 2449 | |
[4] 2450 | |
[5] 2451 | |
[6] 2452 | |
[7] 2453 | |
[8] 2456 | |
[many seconds later...] | |
root@6f3ef52c5247:/vm# done | |
done | |
done | |
done | |
done | |
done | |
done | |
done | |
root@6f3ef52c5247:/# pgrep 'exe' | xargs -I '{}' cat /proc/{}/stat | awk 'BEGIN {print "pgrp pid cmd name: utime ktime"} { ("cat /proc/"$1"/cmdline") | getline t; if ($5 > 1000) { print $5 " " $1 " " substr(t, 0, 11) " " $2 ": " $14*10 " " $15*10; a+=$14+$15;}} END { print "=" a*10 "ms = " (a*10)/8 }' | |
pgrp pid cmd name: utime ktime | |
2489 2489 runsc-gofer (exe): 0 0 | |
2495 2495 runsc-sandb (exe): 29900 2430 | |
2499 2499 runsc-gofer (exe): 10 0 | |
2504 2504 runsc-gofer (exe): 0 0 | |
2505 2505 runsc-gofer (exe): 0 0 | |
2510 2510 runsc-sandb (exe): 29660 2490 | |
2515 2515 runsc-sandb (exe): 29770 2320 | |
2519 2519 runsc-gofer (exe): 10 0 | |
2523 2523 runsc-gofer (exe): 0 0 | |
2524 2524 runsc-gofer (exe): 0 0 | |
2527 2527 runsc-sandb (exe): 30220 2400 | |
2540 2540 runsc-sandb (exe): 29510 2440 | |
2541 2541 runsc-sandb (exe): 29600 2400 | |
2556 2556 runsc-sandb (exe): 29560 2650 | |
2557 2557 runsc-gofer (exe): 0 0 | |
2574 2574 runsc-sandb (exe): 29870 2470 | |
2771 2771 runsc-sandb (exe): 0 0 | |
2772 2772 runsc-sandb (exe): 0 0 | |
2773 2773 runsc-sandb (exe): 0 0 | |
2774 2774 runsc-sandb (exe): 0 0 | |
2775 2775 runsc-sandb (exe): 0 0 | |
2776 2776 runsc-sandb (exe): 0 0 | |
2774 2777 runsc-sandb (exe): 0 0 | |
2771 2778 runsc-sandb (exe): 0 0 | |
2776 2779 runsc-sandb (exe): 0 0 | |
2772 2780 runsc-sandb (exe): 0 0 | |
2773 2781 runsc-sandb (exe): 0 0 | |
2775 2782 runsc-sandb (exe): 0 0 | |
2774 2806 runsc-sandb (exe): 0 0 | |
2776 2808 runsc-sandb (exe): 0 0 | |
2771 2819 runsc-sandb (exe): 0 0 | |
2771 2820 runsc-sandb (exe): 8450 2700 | |
2772 2821 runsc-sandb (exe): 0 0 | |
2772 2824 runsc-sandb (exe): 8060 2490 | |
2776 2825 runsc-sandb (exe): 8330 2570 | |
2831 2831 runsc-sandb (exe): 0 0 | |
2832 2832 runsc-sandb (exe): 0 0 | |
2774 2836 runsc-sandb (exe): 7870 2670 | |
2773 2839 runsc-sandb (exe): 0 0 | |
2831 2841 runsc-sandb (exe): 0 0 | |
2775 2850 runsc-sandb (exe): 0 0 | |
2832 2851 runsc-sandb (exe): 0 0 | |
2775 2852 runsc-sandb (exe): 8020 2680 | |
2773 2854 runsc-sandb (exe): 8360 2420 | |
2776 2855 runsc-sandb (exe): 0 0 | |
2776 2856 runsc-sandb (exe): 8380 2440 | |
2774 2857 runsc-sandb (exe): 0 10 | |
2774 2858 runsc-sandb (exe): 8370 2520 | |
2771 2859 runsc-sandb (exe): 0 0 | |
2832 2865 runsc-sandb (exe): 0 0 | |
2775 2867 runsc-sandb (exe): 0 0 | |
2772 2868 runsc-sandb (exe): 0 0 | |
2775 2869 runsc-sandb (exe): 8300 2500 | |
2771 2871 runsc-sandb (exe): 8580 2470 | |
2772 2873 runsc-sandb (exe): 8210 2590 | |
2773 2874 runsc-sandb (exe): 0 0 | |
2832 2875 runsc-sandb (exe): 8500 2600 | |
2773 2876 runsc-sandb (exe): 8520 2440 | |
2832 2877 runsc-sandb (exe): 0 0 | |
2831 2882 runsc-sandb (exe): 0 10 | |
2831 2884 runsc-sandb (exe): 8580 2540 | |
2831 2887 runsc-sandb (exe): 0 0 | |
2831 2888 runsc-sandb (exe): 8310 2310 | |
2832 2889 runsc-sandb (exe): 8540 2580 | |
=431630ms = 53953.8ms per vm | |
root@55136c6603bf:/vm# n=8; for i in `seq $n`; do runsc --platform=ptrace --ignore-cgroups --network none do ./syscall_bench 1000000 2 & done | |
[1] 2001 | |
[2] 2002 | |
[3] 2003 | |
[4] 2004 | |
[5] 2005 | |
[6] 2006 | |
[7] 2007 | |
[8] 2008 | |
root@55136c6603bf:/vm# done | |
done | |
done | |
done | |
done | |
done | |
done | |
done | |
root@55136c6603bf:/# pgrep 'exe' | xargs -I '{}' cat /proc/{}/stat | awk 'BEGIN {print "pgrp pid cmd name: utime ktime"} { ("cat /proc/"$1"/cmdline") | getline t; if ($5 > 1000) { print $5 " " $1 " " substr(t, 0, 11) " " $2 ": " $14*10 " " $15*10; a+=$14+$15;}} END { print "=" a*10 "ms = " (a*10)/8 }' | |
pgrp pid cmd name: utime ktime | |
2044 2044 runsc-gofer (exe): 0 0 | |
2045 2045 runsc-gofer (exe): 0 0 | |
2058 2058 runsc-sandb (exe): 5100 16170 | |
2059 2059 runsc-sandb (exe): 5120 16120 | |
2060 2060 runsc-gofer (exe): 0 0 | |
2061 2061 runsc-gofer (exe): 10 0 | |
2062 2062 runsc-gofer (exe): 0 0 | |
2074 2074 runsc-sandb (exe): 4990 15250 | |
2081 2081 runsc-sandb (exe): 4860 16320 | |
2082 2082 runsc-sandb (exe): 4670 15690 | |
2100 2100 runsc-gofer (exe): 10 0 | |
2101 2101 runsc-gofer (exe): 0 0 | |
2106 2106 runsc-sandb (exe): 4920 16500 | |
2107 2107 runsc-sandb (exe): 4660 15250 | |
2120 2120 runsc-gofer (exe): 0 0 | |
2124 2124 runsc-sandb (exe): 4800 15800 | |
2315 2315 runsc-sandb (exe): 0 0 | |
2316 2316 runsc-sandb (exe): 0 0 | |
2315 2335 runsc-sandb (exe): 590 2470 | |
2316 2342 runsc-sandb (exe): 590 1910 | |
2366 2366 runsc-sandb (exe): 0 0 | |
2315 2370 runsc-sandb (exe): 670 2480 | |
2316 2371 runsc-sandb (exe): 620 2510 | |
2378 2378 runsc-sandb (exe): 0 0 | |
2366 2389 runsc-sandb (exe): 750 2280 | |
2397 2397 runsc-sandb (exe): 0 0 | |
2366 2407 runsc-sandb (exe): 710 2270 | |
2378 2414 runsc-sandb (exe): 680 1840 | |
2434 2434 runsc-sandb (exe): 0 0 | |
2397 2440 runsc-sandb (exe): 720 2030 | |
2378 2441 runsc-sandb (exe): 580 2120 | |
2442 2442 runsc-sandb (exe): 0 0 | |
2443 2443 runsc-sandb (exe): 0 0 | |
2434 2470 runsc-sandb (exe): 650 2070 | |
2397 2471 runsc-sandb (exe): 650 2000 | |
2443 2492 runsc-sandb (exe): 750 2140 | |
2442 2494 runsc-sandb (exe): 640 2070 | |
2434 2498 runsc-sandb (exe): 720 2400 | |
2442 2505 runsc-sandb (exe): 610 2860 | |
2443 2507 runsc-sandb (exe): 670 2600 | |
=212890ms = 26611.2 | |
root@55136c6603bf:/# pgrep 'exe' | xargs -I '{}' cat /proc/{}/stat | awk 'BEGIN {print "pgrp pid cmd name: utime ktime"} { ("cat /proc/"$1"/cmdline") | getline t; if ($5 > 1000) { print $5 " " $1 " " substr(t, 0, 11) " " $2 ": " $14*10 " " $15*10; a+=$14+$15;}} END { print "=" a*10 "ms = " (a*10)/8 }' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment