【发布时间】:2017-08-17 09:25:14
【问题描述】:
我正在调查 glibc-2.25 中的一些内存函数(memcpy、memset、memmove)是否可以为我们在 Linux(glibc 2.12)中的服务器程序带来性能提升。 我的第一次尝试是下载 glibc-2.25 的 tar 球并按照此处的说明进行构建/测试 https://sourceware.org/glibc/wiki/Testing/Builds。我手动注释掉内核版本检查,一切顺利。然后使用 glibc wiki 的“针对 glibc 构建树编译”部分中列出的过程将一个测试程序与新建的 glibc 链接,“ldd test”表明它确实依赖于预期的库:
# $GLIBC is /data8/home/wentingli/temp/glibc/build
libm.so.6 => /data8/home/wentingli/temp/glibc/build/math/libm.so.6 (0x00007fe42f364000)
libc.so.6 => /data8/home/wentingli/temp/glibc/build/libc.so.6 (0x00007fe42efc4000)
/data8/home/wentingli/temp/glibc/build/elf/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fe42f787000)
libdl.so.2 => /data8/home/wentingli/temp/glibc/build/dlfcn/libdl.so.2 (0x00007fe42edc0000)
libpthread.so.0 => /data8/home/wentingli/temp/glibc/build/nptl/libpthread.so.0 (0x00007fe42eba2000)
我使用 gdb 来验证实际调用了哪个 memset/memcpy,但它总是显示使用了 __memset_sse2_unaligned_erms,而我期望函数的一些更高级版本(avx2,avx512)可能是in use。 我的问题是:
- glibc-2.25是否根据cpu/os/内存地址自动选择了最合适的内存函数版本?如果没有,我是否在 glibc 构建期间遗漏了任何配置或我的设置有问题?
- 还有其他替代方法可以从较新的 glibc 移植内存功能吗?
任何帮助或建议将不胜感激。
【问题讨论】:
标签: c x86-64 glibc porting memcpy