Eri*_*tch 9 linux scheduling kernel thread linux-kernel
一个简单的例子。我正在运行一个使用 TCP 套接字处理 http 请求的进程。它可能 A) 计算一些意味着 CPU 将成为瓶颈的东西 B) 发送一个可能导致网络成为瓶颈的大文件或 C) 具有半随机访问的复杂数据库查询导致磁盘瓶颈
我是否应该尝试将每个页面/API 调用归类为上述类型中的一种或多种,并尝试平衡每种调用的数量?或者操作系统会为我这样做吗?我如何决定我想要多少线程?
我将为硬件线程 12 和 48 使用 2 个数字(英特尔至强有那么多)。我想有 2/3 的线程用于重型 CPU(8/32),1 个线程用于重型磁盘(或每个磁盘 1 个重型线程),其余 3/15 用于其他任何事情,这意味着不要尝试平衡网络。
我是否应该在仅支持 12/48 线程的硬件上拥有超过 12/48 的线程?我想要更少,所以我不会导致 CPU 进入较慢的节流模式(我忘记了它的名字,但我听说如果一次激活太多芯片会发生这种情况)。如果我必须加载和资源平衡我的线程,我会怎么做?
Linux 内核在这方面有很好的实现,并且有许多功能/设置旨在管理正在运行的进程的资源(通过 CPU 调控器、sysctl 或 cgroup),在这种情况下,调整这些设置以及交换调整(如果需要)是推荐,基本上您将适应您的设备的默认功能模式。
应用更改后的基准测试、压力测试和情况分析是必须的,尤其是在生产服务器上。当内核设置被调整为所需的使用时,性能增益可能非常重要,另一方面,这需要测试和对不同设置的充分理解,这对于管理员来说是耗时的。
Linux确实使用省长到运行的应用程序之间的负载均衡CPU ressources,许多州长可用; 根据您的发行版内核,某些调控器可能不可用(可以重建内核以添加缺失的或非上游调控器)。你可以检查当前的调控器是什么,改变它,更重要的是在这种情况下,调整它的设置。
附加文档:阅读、指南、类似问题、频率缩放、调节器选择、性能调节器和cpufreq。
Sysctl是一个用于在运行时检查和更改内核参数的工具,可以通过配置文件永久进行调整/etc/sysctl.conf,这是此答案的重要部分,因为可以使用 Sysctl 更改许多内核设置,可以显示可用设置的完整列表使用该命令sysctl -a,可在此和本文中获得详细信息。
内核提供了以下特性:控制组,在本指南中以它们的较短名称 cgroups 来调用。Cgroups 允许您在系统上运行的用户定义的任务(进程)组之间分配资源,例如 CPU 时间、系统内存、网络带宽或这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至可以在正在运行的系统上动态重新配置您的 cgroup。cgconfig(控制组配置)服务可以配置为在引导时启动并重新建立预定义的 cgroup,从而使它们在重新启动后保持不变。
资料来源,进一步阅读和问题的问题。
如果系统的 ram 数量有限,这会很有用,否则您可以禁用交换以主要使用 ram。交换系统可以根据进程或使用交换设置进行调整。如果需要,可以使用ulimit限制每个进程的资源(ram)(也用于限制其他资源)。
磁盘 I/O 设置 ( I/O Scheduler ) 以及集群大小可能会更改。
其他工具,如nice、cpulimit、cpuset、taskset或ulimit可以用作替代方案。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |