问题:使用超线程技术可能对系统造成哪些负面影响?

简介:

超线程技术能够在很大程度上帮助系统管理员提升处理器性能表现,但是管理员还是应该注意使用这种技术的最终结果可能难以预测。

问题:使用超线程技术可能对系统造成哪些负面影响?

新手系统管理员最常犯的错误之一就是认为使用超线程技术与添加一个全新内核是一样的——但实际情况并非如此。超线程技术并不会为处理器内核增加任何额外计算资源,只是允许不同任务共享内核的现有计算资源而已。如果处理器使用率相对较低,拥有充足的空闲时间,那么这种方式能够大幅度提升系统的性能表现。新增加的线程通过运行额外任务能够有效利用内核空闲时间,这样处理器——以及整个系统——就能够在同样的时间段内完成更多的任务。

但是超线程技术并非总是能够起到帮助作用。比如,超线程技术的成功需要依赖于合适的调度系统,只有Windows Server 2016这样的全新一代操作系统才具有这种特性。即便底层硬件处理器能够支持超线程,并且在系统BIOS中已经启用这种特性,但是像Windows Server 2013这样的操作系统并不能识别超线程。此外,超线程技术能够带来的性能提升会随着内核数量的增加而逐渐降低。比如,借助于超线程技术,单核系统最多能够实现30%的性能提升,而双核系统通常最多只能实现15%的性能提升。而四核——或者更多核心——的处理器需要在启用和关闭超线程的情况下分别进行测试,才能够最终确定性能表现。但是既然已经拥有了多个物理内核,那么同时使用多个内核比使用超线程技术要更加高效。

在hypervisor中启用CPU affinity特性也需要十分小心。如果启用超线程技术,hypervisor能够在系统的物理和逻辑核心之间提供良好的线程调度和自动负载均衡功能。启用CPU affinity特性将会对hypervisor的调度和负载均衡能力造成影响,导致系统不能提供最好的性能表现。CPU affinity特性还会对CPU针对特定虚拟机进行资源预留的能力造成影响。即便CPU affinity特性在当前服务器上能够发挥其作用,如果将虚拟机迁移到不同处理器数量的其他服务器上,也会对CPU affinity特性造成严重影响,因此最好让hypervisor或者操作系统自动进行配置。

最后,不要忽略负载自身的特性。使用多个逻辑处理器并不会对单线程负载带来任何帮助作用,因此超线程技术无法提升这些负载的性能表现。此外,需要占用大量计算资源以及需要和内存进行大量数据传输——也就是占用大量内存I/O——的负载也无法受益于超线程技术。因此需要在了解常驻内存负载的特性之后再决定是否使用超线程技术,或者将负载迁移到其他启用(未启用)超线程技术的系统上。

超线程技术允许不同任务共享处理器内核的空闲计算资源。使用这种方式,管理员无需购买或者添加/升级处理器,使用现有处理器就能够完成更多的任务。但是这种技术并非适用于任何硬件或者负载。在评估全新负载的性能和迁移特性过程中,考虑超线程技术所带来的影响,并且在必要的时候禁用超线程技术。

本文转自d1net(转载)

目录
相关文章
|
2月前
|
监控 Java 测试技术
Java并发编程最佳实践:设计高性能的多线程系统
Java并发编程最佳实践:设计高性能的多线程系统
40 1
|
3月前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
58 3
|
1月前
|
监控 Java
线程池中线程异常后:销毁还是复用?技术深度剖析
在并发编程中,线程池作为一种高效利用系统资源的工具,被广泛用于处理大量并发任务。然而,当线程池中的线程在执行任务时遇到异常,如何妥善处理这些异常线程成为了一个值得深入探讨的话题。本文将围绕“线程池中线程异常后:销毁还是复用?”这一主题,分享一些实践经验和理论思考。
51 3
|
2月前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
40 6
|
3月前
|
算法 Java 编译器
多线程线程安全问题之系统层面的锁优化有哪些常见的策略
多线程线程安全问题之系统层面的锁优化有哪些常见的策略
|
2月前
|
编译器 C语言 iOS开发
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
|
2月前
三个线程交替打印ABC:技术深度解析与实战应用
【8月更文挑战第14天】在并发编程中,实现多个线程之间的精确协同工作是一项既具挑战性又极具实用价值的任务。今天,我们将深入探讨一个经典问题:如何使用三个线程交替打印字符A、B、C,且每个字符连续打印三次,之后循环进行。这个问题不仅考验了我们对线程同步机制的理解,还锻炼了我们在复杂并发场景下的设计能力。
50 0
|
3月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
47 1
|
3月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
3月前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
42 0