http://ask.loongnix.org/?/article/418
好久之前记得龙芯上 VDSO 支持很有问题,前一阵终于获得少量空闲时间,又测了一下,发现还是不行,跑这么一个脚本发现大量 clock_gettime 系统调用。(amd64 上除了用于实现 sleep 的 select 之外没有任何 gettimeofday 或者 clock_gettime 的调用。)
#!/usr/bin/env python3 import time for i in range(100): time.sleep(0.01) _ = time.time()
翻 glibc 源码时候 git log 看到一个叫 vdsotest 的工具,于是弄下来跑了一遍。
测试环境:
- 龙芯 3A3000 开发板
- Gentoo MIPS/n64 multilib 安装
- Linux 4.19.14 + 几乎所有 loongson-community 补丁 + 自制补丁 https://github.com/xen0n/linux/commit/b5dd70d483fcc5a7c9176b5d1d5aba62d202c4d7
- binutils 2.31.1 + 龙芯补丁
- gcc 8.2.0 + 龙芯补丁
- glibc 2.28 + 龙芯补丁
- https://github.com/nlynch-mentor/vdsotest
clock-gettime-monotonic: syscall: 409 nsec/callclock-gettime-monotonic: libc: 476 nsec/callclock-gettime-monotonic: vdso: 462 nsec/callNote: vDSO version of clock_getres not foundclock-getres-monotonic: syscall: 323 nsec/callclock-getres-monotonic: libc: 346 nsec/callclock-getres-monotonic: vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-monotonic-coarse: syscall: 374 nsec/callclock-gettime-monotonic-coarse: libc: 115 nsec/callclock-gettime-monotonic-coarse: vdso: 98 nsec/callpassing UINTPTR_MAX to clock_gettime (VDSO): terminated by unexpected signal 10clock-gettime-monotonic-coarse/abi: 1 failures/inconsistencies encounteredNote: vDSO version of clock_getres not foundclock-getres-monotonic-coarse: syscall: 357 nsec/callclock-getres-monotonic-coarse: libc: 379 nsec/callclock-getres-monotonic-coarse: vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-monotonic-raw: syscall: 406 nsec/callclock-gettime-monotonic-raw: libc: 455 nsec/callclock-gettime-monotonic-raw: vdso: 425 nsec/callNote: vDSO version of clock_getres not foundclock-getres-monotonic-raw: syscall: 323 nsec/callclock-getres-monotonic-raw: libc: 346 nsec/callclock-getres-monotonic-raw: vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-tai: syscall: 422 nsec/callclock-gettime-tai: libc: 472 nsec/callclock-gettime-tai: vdso: 449 nsec/callNote: vDSO version of clock_getres not foundclock-getres-tai: syscall: 323 nsec/callclock-getres-tai: libc: 345 nsec/callclock-getres-tai: vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-boottime: syscall: 421 nsec/callclock-gettime-boottime: libc: 471 nsec/callclock-gettime-boottime: vdso: 450 nsec/callNote: vDSO version of clock_getres not foundclock-getres-boottime: syscall: 324 nsec/callclock-getres-boottime: libc: 346 nsec/callclock-getres-boottime: vdso: not testedNote: vDSO version of clock_getres not foundNote: vDSO version of clock_getres not foundclock-gettime-realtime: syscall: 405 nsec/callclock-gettime-realtime: libc: 474 nsec/callclock-gettime-realtime: vdso: 457 nsec/callNote: vDSO version of clock_getres not foundclock-getres-realtime: syscall: 323 nsec/callclock-getres-realtime: libc: 348 nsec/callclock-ge