微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pthread on-wakeup执行

每次内核重新安排时,如何让我的pthread执行一个函数

我需要确定我的线程正在安排在哪个物理cpu /套接字(不是逻辑核心),并且不能一直这样做.

只有当线程实际被重新安排时,唤醒例程是否可以以某种方式挂钩以对TLS进行必要的更新?

至于为什么我需要这个:我有每个线程每70ns执行AMO appx代码,如果地址没有缓存在另一个套接字上就没问题,在两个套接字上部署相同的代码会因频繁的缓存失效而产生15倍的性能影响.我打算为此分配内存,这只在运行相同L3缓存的线程之间共享.所以我需要确定我正在运行哪个套接字并解决正确的内存块.我显然可以调用sched_getcpu并将其与/ proc / cpuinfo中的物理cpu ID进行比较,但这是一个相当大的开销.我不能为每个线程分配线程专用内存,但是太贵了.

解决方法

从我在 Linux Kernel Development,Third Edition中读到的内容来看,内核提供的服务和接口都不是你想要的.使用pthread_setaffinity(如上面的@osgx所建议,或者,在最近的Linux内核实现中,pthread_setaffinity_np)或者在开始时为每个cpu套接字缓存一个TLS密钥(如上面@caf所建议的那样)可能是在这个方向上使用的最佳方法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐