Skip to content

Instantly share code, notes, and snippets.

@sitano
Last active July 10, 2023 14:03
Show Gist options
  • Save sitano/e2ff4a0463bc1fa545c6102110a1ae69 to your computer and use it in GitHub Desktop.
Save sitano/e2ff4a0463bc1fa545c6102110a1ae69 to your computer and use it in GitHub Desktop.
# 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