有哪些办法可以充分压榨服务器性能?


#1

最近公司在采购一批服务器,看到报价单的时候感觉好心疼。那么有哪些措施/手段可以充分压榨服务器性能呢?
如果我的服务器处在隔离网段,不会有人恶意攻击,也不会有病毒。是否有一些特别的压榨手段?
ps,企业版SLES可以提供相关服务么?


openSUSE-Gossip-20180925-20181231
#2

虚拟化,然后根据监控数据看负载情况,调整虚拟比到一个合适的水平(除非你的业务一直不停地高负载运行,否则资源超卖是必然的,但超卖和性能损失之间的平衡要自己把握);可以适当将不同资源类型的虚拟机混布在一起,比如计算密集型、内存密集型、磁盘密集型和网络密集型(或者这两个合在一起叫IO密集型)的应用之间资源争抢的风险会相对更小,可以适当混布,但如果全部都是同类应用,就一定要算好资源超卖情况避免性能下降太多

现在流行容器技术(以 Docker 为代表),相对传统语义下的虚拟机来说复用宿主机资源更好,单个实例消耗的(业务应用以外的)资源更少,追求高资源利用率的时候这也是一个很好的思路

不要想着把服务器性能完全榨干,如果没有非常好的动态扩缩容技术还是预留一部分(比如20%左右,按实际情况定)冗余比较好,不然业务突发高峰时候哭都来不及

ps, 如果你意思是这些机器本身就会闲置想搞点“副业”,我是建议不要在公家的财产上干这些事情,少买几台更现实…或者换个思路,如果有闲置的计算资源,往上搭个管控平台(比如 Kubernetes)啥的然后尝试把一些日常的事物流程,比如啥各种自动化任务啦、测试啦、打包啦、数据处理啦之类的给弄上去也挺好玩的~


#3

hi,非常感谢您的回复。

我的应用场景类似深度学习训练。但训练的程序是别人给出来的。所以也没办法优化代码。
想到这个问题是因为我看到为了解决熔断这类bug会牺牲cpu性能。但我的场景是不会担心有人恶意攻击的。
有任何提升cpu的能力的建议都欢迎提出来。


#4

看来我之前理解有点偏差,KPTI 按我的理解来说,如果你能完全信任物理机上运行的进程、虚拟机,和虚拟机内的进程的话,是完全可以关掉的(启动时候加个内核参数,好像是 pti=off ),包括虚拟机内的内核也可以关掉

(我依然觉的虚拟化是有必要的,在牺牲单个实例的部分性能的情况下可以提高宿主机资源复用,提升整体的利用率,除非一些比较特殊的情况,比如需要超长时间满载跑一个任务,同时不存在需要和其他任务争抢资源分配的情况,那可以直接独占物理机来跑,做深度学习训练似乎很有可能出现这种场景?)

另外我知道有个 UKSM 可以略微优化一点内存利用率,我自己笔记本一直在用,但不清楚大规模跑任务会不会有什么坑

有一些内核补丁/参数也会有影响,比如内核的 HZ 还有 linux-rt 啥的,然后 CPU 和 IO 调度器是肯定有影响的,这个可能得拿你们实际的任务来测一下找最佳组合了;如果性能瓶颈不在网络、磁盘IO、内存这些地方,可能折腾完了的改善也有限,这种调优的坑太深了_(:зゝ∠)_

另外还可能有一些牺牲安全性换性能的玩法,大概应该是各种隔离和检查想办法关掉,但我就不是太了解了


#5

Hi Astro,

超级感谢你的回复。
因为我会在外部进行任务调度,所以虚拟化对于我来说不是必须的。
你提到的这些手段我会去学习的。不过正如你所说,这是一个非常深的坑。。。
再次感谢!