AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-542534

S.Goswami's questions

Martin Hope
S.Goswami
Asked: 2020-03-05 12:24:48 +0800 CST

为什么禁用超线程会使我的服务器变慢?

  • 14

我有一个主要运行 Ruby 脚本的服务器。因为 Ruby (2.7) 有一个 GIL,所以它是单线程的。

我的计算机(服务器)有一个 Intel i3 双核处理器,但由于超线程,我看到了 4 个内核。Ruby 在重负载下仅使用 25% 的 CPU。我想看看禁用超线程是否有利于在单线程上运行的编程语言。

此外,我的服务器正在运行一个非常小的桌面环境,它使用的 CPU 不超过 2%。所以我想让大部分资源都可用于 Ruby。我做了一个基准测试,看看我是否真的通过禁用超线程来提高性能。


基准:

我编写了一个简单的 Ruby 脚本,它运行一个 while 循环并将循环计数器的值与另一个变量相加。该程序应使用 100% 的 CPU 内核:

#!/usr/bin/env ruby
$-v = true

LOOPS = ENV['N'].to_i.then { |x| x < 1 ? 100_000_000 : x } + 1
i, j, t = 0, 0, Time.now

puts "Counting till #{LOOPS - 1} and adding values to V..."
while (i += 1) < LOOPS
    if i % 10000 == 0
        e = Time.now - t
        r = LOOPS.*(e)./(i).-(e).round(2)
        print "\e[2KN: #{i} | Done: #{i.*(100) / LOOPS}% | Elapsed: #{e.round(2)}s | Estimated Rem: #{r}s\r"
    end

    j += i
end

puts "\nV = #{j}\nTime: #{(Time.now).-(t).round(2)}s"
  • 使用超线程:
⮚ ruby p.rb
Counting till 100000000 and adding values to V...
N: 100000000 | Done: 99% | Elapsed: 4.55s | Estimated Rem: 0.0s
V = 5000000050000000
Time: 4.55s

⮚ ruby p.rb
Counting till 100000000 and adding values to V...
N: 100000000 | Done: 99% | Elapsed: 4.54s | Estimated Rem: 0.0s
V = 5000000050000000
Time: 4.54s

⮚ ruby p.rb
Counting till 100000000 and adding values to V...
N: 100000000 | Done: 99% | Elapsed: 4.67s | Estimated Rem: 0.0s
V = 5000000050000000
Time: 4.67s

gnome-system-monitor在测试运行时报告 Ruby 的 CPU 使用率为 25%。

  • 没有超线程:

[# echo 0 | tee /sys/devices/system/cpu/cpu{2,3}/online用于禁用超线程]

⮚ ruby p.rb
Counting till 100000000 and adding values to V...
N: 100000000 | Done: 99% | Elapsed: 4.72s | Estimated Rem: 0.0s
V = 5000000050000000
Time: 4.72s

⮚ ruby p.rb
Counting till 100000000 and adding values to V...
N: 100000000 | Done: 99% | Elapsed: 4.54s | Estimated Rem: 0.0s
V = 5000000050000000
Time: 4.54s

⮚ ruby p.rb
Counting till 100000000 and adding values to V...
N: 100000000 | Done: 99% | Elapsed: 4.56s | Estimated Rem: 0.0s
V = 5000000050000000
Time: 4.56s

gnome-system-monitor在测试运行时报告 Ruby 的 CPU 使用率为 50%。


我什至在我的笔记本电脑上运行了测试,它所花费的时间大约是我电脑上的两倍。但结果是相同的:禁用超线程并不能帮助进程做得更好。更糟糕的是,我的笔记本电脑在多任务处理时会变慢一些。

因此,在非超线程模式下,Ruby 使用的 CPU 功率是超线程模式的 2 倍。但是为什么完成同样的任务仍然需要同样的时间呢?

hyperthreading
  • 2 个回答
  • 7820 Views
Martin Hope
S.Goswami
Asked: 2019-11-29 22:51:12 +0800 CST

启用粘滞位的脚本无法写入根文件

  • 0

我在 /tmp/ 中有 2 个文件。

  • 第一个是一个名为“file”的空文件,具有权限-rw-------和所有者root:root。

  • 第二个文件名为“script”,它是一个简单的 Ruby 脚本,具有权限-rwsr-xr-x和所有者root:root。脚本文件的内容是:

#!/usr/bin/env ruby
$-v = true

IO.write( File.join(Dir.pwd, 'file'), 100.times.map { rand(97..122).chr }.join << ?\n )

文件“file”与文件具有相同的权限/etc/shadow:

# ls -l /etc/shadow
-rw------- 1 root root 1045 Sep 22 04:13 /etc/shadow

# ls -l file
-rw------- 1 root root 6 Nov 29 12:22 file

passwdruby 脚本 "script" 与命令具有相同的权限:

$ ls -l $(type -p passwd)
-rwsr-xr-x 1 root root 63624 Nov 13 22:28 /usr/bin/passwd

# ls -l script
-rwsr-xr-x 1 root root 78 Nov 29 12:22 script

我可以./script以 root 身份运行,它用一些随机字符串替换文件“file”的内容。

但是当我./script以非 root 用户身份运行时,Ruby 会引发Errno::EACCES.


我可以通过正确设置SUID权限以非root用户身份写入root可写文件“file”吗?

setuid
  • 1 个回答
  • 109 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve