起初,这个问题似乎有点愚蠢/令人困惑,因为操作系统负责管理进程执行。
但是,我想测量一些进程受 CPU/IO 限制的程度,并且我觉得我的操作系统正在干扰我的实验,例如,预定的操作系统进程。
以以下情况为例:我运行了进程 A 两次,并从工具“time”(时间列以秒为单位)得到以下输出:
+---+-------+---------+-----------+---------+
|Run|Process|User Time|System Time|Wall time|
+---+-------+---------+-----------+---------+
|1 |A |196.3 |5.12 |148.86 |
|2 |A |190.79 |4.93 |475.46 |
+---+-------+---------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
正如我们所看到的,虽然用户时间和系统时间相似,但两者的经过时间发生了巨大变化(相差约 5 分钟)。感觉我的环境中的某些东西引起了某种争用。
我想停止所有可能的后台进程/服务,以避免在我的实验过程中出现任何类型的噪音,但我认为自己是一个新手/中级 unix 用户,我不知道如何保证这一点。
我使用的Linux 4.4.0-45泛型与Ubuntu的LTS 14.04的64位。
我非常感谢您的帮助。如果你们需要任何缺失的信息,我会及时编辑我的帖子。
CPU信息
$ grep proc /proc/cpuinfo | wc -l
8
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor …Run Code Online (Sandbox Code Playgroud) 是否有任何关于在慢速网络连接上通过 ssh 加速 X 应用程序的具体建议?在这种特定情况下,我正在从东海岸的笔记本电脑访问位于西海岸的服务器,并且也是通过不太快的 DSL 连接。
ssh 有什么设置吗?一般有什么提示吗?
有没有一种方法可以减慢 Linux 上的复制过程?
我有一个大文件,比如 10GB,我想将它复制到另一个目录,但我不想全速复制它。假设我想以 1mb/s 的速度复制它,而不是更快。我想使用标准的 Linuxcp命令。
这可能吗?(如果是,如何?)
编辑:因此,我将为我要实现的目标添加更多上下文。
在通过 USB 复制大文件(到 U 盘、U 盘等)时,我在 ArchLinux 系统上遇到了问题。填满 USB 缓冲区缓存后,我的系统停止响应(甚至鼠标停止;它只是偶尔移动)。复制操作仍在进行中,但它占用了 box 100% 的资源。当复制操作完成后,一切都恢复正常——一切又恢复了完美的响应。
也许是硬件错误,我不知道,但我知道我有两台机器有这个问题(都在 ArchLinux 上,一个是台式机,第二个是笔记本电脑)。
对此最简单和最快的“解决方案”(我同意这不是“真正的”解决方案,只是一个丑陋的“黑客”)是通过以 USB 驱动器的平均写入速度复制文件来防止此缓冲区填满,例如我这就够了。
我的经验是,在物理内存耗尽之前,Linux 可以正常工作。一旦使用交换空间,性能就会严重下降并且 GUI 变得无响应。
这个问题不限于特定的发行版或桌面,因为我已经尝试了一些(问题仍然存在)。
我该怎么办?
如果这个问题过于面向程序员,请告诉我。我想知道是否有人熟悉Linux 2.6上open()系统调用的O_DIRECT标志?Linus 贬低它的使用,但高性能文件写入似乎表明它的使用。我想知道任何现实世界的经验和建议。
更多信息:我正在使用的应用程序确实维护着自己的缓存,这样做的速度平均提高了 5 倍或更多。写入文件时,缓存的内容必须写出到文件系统缓存,这似乎是多余的,而且是一个性能问题。
许多人使用 oneliners 和包含沿线代码的脚本
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
Run Code Online (Sandbox Code Playgroud)
第一个cat通常被称为“对 cat 的无用使用”,因为从技术上讲,它需要启动一个新进程(通常/usr/bin/cat),如果命令已被执行,则可以避免这种情况。
< "$MYFILE" command1 | command2 > "$OUTPUT"
Run Code Online (Sandbox Code Playgroud)
因为然后 shell 只需要启动command1并简单地将其stdin指向给定的文件。
为什么 shell 不自动进行这种转换?我觉得“useless use of cat”语法更容易阅读,shell 应该有足够的信息来自动摆脱无用的 cat。的cat是在POSIX标准定义,因此壳应该允许执行它在内部,而不是在路径使用二进制的。shell 甚至可以只包含一个参数版本的实现,并回退到路径中的二进制文件。
我意识到我可以在没有桌面环境的情况下使用窗口管理器,并且不会丢失我关心的任何功能。应用程序仍然可以正常工作,我仍然可以随心所欲地安排应用程序窗口。
对于像我这样的用例,这几乎消除了对轻量级桌面环境(如 LXDE 和 XFCE)的需求。
我想知道这是否是列表的结尾。有什么可以剪掉的吗?至少,我想要一些可以运行像 Firefox 这样的 GUI 应用程序的东西。我想象有一个终端,我可以从中启动其他应用程序。
performance window-manager gui desktop-environment lightweight
我正在分别6^6^6使用python和评估表达式bc。
python文件的内容是print 6**6**6. 当我执行时time python test.py,我得到的输出为
real 0m0.067s
user 0m0.050s
sys 0m0.011s
Run Code Online (Sandbox Code Playgroud)
然后,我运行了time echo 6^6^6 | bc给我以下输出的命令
real 0m0.205s
user 0m0.197s
sys 0m0.005s
Run Code Online (Sandbox Code Playgroud)
从这些结果可以清楚地看出,python 和 bc 所用的 sys 时间分别为 11 毫秒和 5 毫秒。在bc命令跑赢蟒蛇在SYS时的水平,但是当它涉及到用户和实时蟒蛇比BC快近4倍。那里可能有什么。我没有对这些过程给予任何优先考虑。我试图了解这种情况。
我在一个目录中有几个文件:
$ ls | wc -l
9376
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么使用ls *and有这么大的时差ls?
$ time ls > /dev/null
real 0m0.118s
user 0m0.106s
sys 0m0.011s
Run Code Online (Sandbox Code Playgroud)
和
$ time ls * > /dev/null
real 1m32.602s
user 0m0.233s
sys 0m0.438s
Run Code Online (Sandbox Code Playgroud)
好吧,这是一个极端的例子,可能会有所增强,因为该目录位于通用并行文件系统 (GPFS) 上。但我也可以看到本地文件系统的显着放缓。
编辑:
$ time ls -l > /dev/null
real 0m58.772s
user 0m0.113s
sys 0m0.452s
$ time ls -l * > /dev/null
real 1m19.538s
user 0m0.252s
sys 0m0.461s
Run Code Online (Sandbox Code Playgroud)
我应该补充一点,在我的例子中没有子目录:
$ diff <(ls) <(ls *)
$
Run Code Online (Sandbox Code Playgroud) 是否可以让系统抢先换出非活动页面 ( vm.swappiness),但在系统耗尽 RAM(而不是耗尽内存)并被迫交换时调用 oom-killer?
最终目标是防止系统在由于主要页面错误而开始抖动磁盘时停止运行,但仍然让不活动的页面被换出。
另一个愿望是配置系统在 oom-killer 触发之前强制使用多少交换内存。这样系统就可以稍微进行交换,只要它不会走得太远。或者我可以在使用所有 RAM 之前设置这样一个阈值来触发 oom-killer,这样文件系统缓存总是有空间(从而避免更多的磁盘抖动)。
这似乎并不难做到。似乎您可以告诉 oom-killer 在系统使用/空闲 X ram 时触发。但这就是我问的原因;我不知道。
为了澄清起见,我不打算关闭交换或调整vm.swappiness参数
performance ×10
linux ×4
kernel ×2
swap ×2
bc ×1
block-device ×1
debian ×1
file-copy ×1
files ×1
filesystems ×1
gui ×1
io ×1
lightweight ×1
limit ×1
ls ×1
memory ×1
networking ×1
posix ×1
process ×1
programming ×1
python ×1
shell-script ×1
ssh ×1
time ×1
x11 ×1