Skip to content

Instantly share code, notes, and snippets.

@ad-m
Last active June 23, 2021 12:52
Show Gist options
  • Save ad-m/4c791ec1870d4060728ebc3c6b67fb62 to your computer and use it in GitHub Desktop.
Save ad-m/4c791ec1870d4060728ebc3c6b67fb62 to your computer and use it in GitHub Desktop.
klaw & native walking syscall count

Syscall count comparision

syscall new old new / old
access 8 8 100,00%
arch_prctl 1 1 100,00%
brk 17 16 106,25%
clock_getres 1 1 100,00%
clone 10 10 100,00%
close 1119 1490 75,10%
epoll_create1 3 3 100,00%
epoll_ctl 7 7 100,00%
epoll_wait 8825 50319 17,54%
eventfd2 3 3 100,00%
exit 9 9 100,00%
exit_group 1 1 100,00%
fcntl 11 11 100,00%
futex 13903 76681 18,13%
getcwd 1 1 100,00%
getdents 3291 2922 112,63%
getegid 11 11 100,00%
geteuid 11 11 100,00%
getgid 11 11 100,00%
getrandom 1 1 100,00%
getrlimit 11 11 100,00%
getuid 11 11 100,00%
ioctl 37 37 100,00%
madvise 51 163 31,29%
mmap 77 247 31,17%
mprotect 286 599 47,75%
munmap 87 427 20,37%
newfstat 1116 1480 75,41%
open 1110 1482 74,90%
pipe2 4 4 100,00%
pread64 1 3 33,33%
read 4444 25232 17,61%
readlink 1 1 100,00%
rt_sigaction 63 63 100,00%
rt_sigprocmask 13 13 100,00%
sched_yield 9 7 128,57%
set_robust_list 11 11 100,00%
set_tid_address 1 1 100,00%
statx 5 23756 0,02%
sysinfo 0 1 0,00%
write 22101 26697 82,78%
/*
$ sudo syscount -c nodejs iterate-klaw.js /sys/fs/cgroup/
Tracing while running: "nodejs iterate-klaw.js /sys/fs/cgroup/"...
SYSCALL COUNT
arch_prctl 1
clock_getres 1
exit_group 1
getcwd 1
getrandom 1
readlink 1
set_tid_address 1
sysinfo 1
epoll_create1 3
eventfd2 3
pread64 3
pipe2 4
epoll_ctl 7
sched_yield 7
access 8
exit 9
clone 10
fcntl 11
getegid 11
geteuid 11
getgid 11
getrlimit 11
getuid 11
set_robust_list 11
rt_sigprocmask 13
brk 16
ioctl 37
rt_sigaction 63
madvise 163
mmap 247
munmap 427
mprotect 599
newfstat 1480
open 1482
close 1490
getdents 2922
statx 23756
read 25232
write 26697
epoll_wait 50319
futex 76681
*/
const klaw = require('klaw');
const iterate = async function* (directory) {
for await (const { path, stats } of klaw(directory)) {
if (!stats.isDirectory()) {
continue;
}
yield {name: path}
}
};
const main = async () => {
for await (const {name} of iterate(process.argv[2])){
console.log(name);
};
};
main().catch(err => {
console.error(err);
process.exit(-1)
});
/*
$ sudo syscount -c nodejs iterate-native.js /sys/fs/cgroup/
Tracing while running: "nodejs iterate-native.js /sys/fs/cgroup/"...
SYSCALL COUNT
arch_prctl 1
clock_getres 1
exit_group 1
getcwd 1
getrandom 1
pread64 1
readlink 1
set_tid_address 1
epoll_create1 3
eventfd2 3
pipe2 4
statx 5 # 0.02% of previous value
epoll_ctl 7
access 8
exit 9
sched_yield 9
clone 10
fcntl 11
getegid 11
geteuid 11
getgid 11
getrlimit 11
getuid 11
set_robust_list 11
rt_sigprocmask 13
brk 17
ioctl 37
madvise 51
rt_sigaction 63
mmap 77
munmap 87
mprotect 286
open 1110
newfstat 1116
close 1119
getdents 3291
read 4444 # 5x time less
epoll_wait 8825 # 5x time less
futex 13903
write 22101
*/
const fs = require('fs');
const path = require('path');
const iterate = async function* (directory) {
for await (const dirent of await fs.promises.opendir(directory)) {
const name = path.join(directory, dirent.name);
yield {
dirent,
name
};
if(dirent.isDirectory()){
for await(const entry of iterate(name)){
yield entry
}
}
}
};
const main = async () => {
for await (const {name} of iterate(process.argv[2])){
console.log(name);
};
};
main().catch(err => {
console.error(err);
process.exit(-1)
});
{
"name": "benchmark",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"dependencies": {
"klaw": "^3.0.0"
}
},
"node_modules/graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
},
"node_modules/klaw": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz",
"integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==",
"dependencies": {
"graceful-fs": "^4.1.9"
}
}
},
"dependencies": {
"graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
},
"klaw": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz",
"integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==",
"requires": {
"graceful-fs": "^4.1.9"
}
}
}
}
{
"dependencies": {
"klaw": "^3.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment