标签: algorithms

为什么 Linux 负载计算中不使用简单的 1/5/15 分钟移动平均值?

直到最近,我认为负载平均值(如顶部所示)是处于“可运行”或“正在运行”状态的进程数的最后 n 个值的移动平均值。并且 n 将由移动平均线的“长度”定义:由于计算平均负载的算法似乎每 5 秒触发一次,对于 1 分钟平均负载,n 将为 12,对于 5 分钟平均负载为 12x5 和 12x15对于 15 分钟的平均负载。

但后来我读了这篇文章:http : //www.linuxjournal.com/article/9001。这篇文章已经很老了,但今天在 Linux 内核中实现了相同的算法。负载平均值不是移动平均值,而是一种我不知道名称的算法。无论如何,我对 Linux 内核算法和虚拟周期性负载的移动平均值进行了比较:

负荷图.

这是个很大的差异。

最后我的问题是:

  • 与真正的移动平均线相比,为什么选择这种实现方式,这对任何人都有真正的意义?
  • 为什么每个人都谈论“1 分钟平均负载”,因为算法考虑了比最后一分钟多得多的内容。(数学上,自启动以来的所有度量;在实践中,考虑到舍入误差——仍然有很多度量)

linux kernel monitoring load algorithms

29
推荐指数
1
解决办法
3644
查看次数

是否有算法来决定符号链接是否循环?

如果 Unix 系统遇到包含符号链接循环或太多符号链接的路径,它们通常只会出错,因为它们对在一次路径查找中将遍历的符号链接数量有限制。但是有没有办法真正确定给定的路径是否解析为某些内容或包含循环,即使它包含的链接多于 unix 愿意遵循的链接?或者这是一个形式上不可判定的问题?如果可以决定,是否可以在合理的时间/内存量内决定(例如,不必访问文件系统上的所有文件)?

一些例子:

a/b/c/d
where a/b is a symlink to ../e
and e is a symlink to f
and f is a symlink to a/b

a/b/c/d
where a/b/c is a symlink to ../c

a/b/c/d
where a/b/c is a symlink to ../c/d

a/b/c/d
where a/b/c is a symlink to /a/b/e
where a/b/e is a symlink to /a/b/f
where a/b/f is a symlink to /a/b/g
Run Code Online (Sandbox Code Playgroud)

编辑

澄清一下,我不是在问在文件系统中查找循环,而是在问一种决策算法,该算法决定给定的路径是解析为确定的文件/目录还是根本不解析。例如在下面的系统中,有一个循环,但给定的路径仍然可以正常解析:

/ -- a -- b
where b is a symlink to …
Run Code Online (Sandbox Code Playgroud)

symlink algorithms

20
推荐指数
3
解决办法
1万
查看次数

为什么缓存交换有意义?

缓存被换出的页面对我来说听起来很适得其反。如果交换页面,首先将它们缓存在内存中,然后再将它们移动到正确的位置有什么好处?即使页面被主动换入,“只是”换入不是更有意义吗?实际上缓存交换不只是浪费资源吗?

kernel cache swap algorithms

9
推荐指数
1
解决办法
1410
查看次数

我可以使用 scrypt 来计算 LUKS 的哈希值吗?

scrypt 可以用作 LUKS 的哈希算法吗?我可以调整它的参数吗?我怎样才能做到这一点?

algorithms luks

6
推荐指数
2
解决办法
1331
查看次数

支持 Argon2ID 的 LUKS2 的 GRUB 替代方案

看来即使是最新版本的 GRUB2 也不支持带有 PBKDF Argon2ID 的 LUKS2(来源)。
例如,Raspberry Pi 引导加载程序完全支持这种新的哈希函数。

是否有一个积极维护(并且被广泛采用)的桌面 Linux 引导加载程序支持带有 Argon2ID 的 LUKS2 设备?
是否可以使用此 PBKDF 实现加密的 /boot(/ 除外)分区?

grub boot-loader encryption algorithms luks

6
推荐指数
0
解决办法
2029
查看次数

Grepping 巨大的文件性能

我有超过 300K 行的 FILE_A 和超过 30M 行的 FILE_B。我创建了一个 bash 脚本,它将 FILE_A 中的每一行 grep 到 FILE_B 中,并将 grep 的结果写入一个新文件。

整个过程需要超过 5 个多小时。

我正在寻找有关您是否看到任何提高脚本性能的方法的建议。

我使用 grep -F -m 1 作为 grep 命令。FILE_A 看起来像这样:

123456789 
123455321
Run Code Online (Sandbox Code Playgroud)

和 FILE_B 是这样的:

123456789,123456789,730025400149993,
123455321,123455321,730025400126097,
Run Code Online (Sandbox Code Playgroud)

因此,使用 bash 我有一个 while 循环,它选择 FILE_A 中的下一行,并在 FILE_B 中将其遍历。当在 FILE_B 中找到模式时,我将其写入 result.txt。

while read -r line; do
   grep -F -m1 $line 30MFile
done < 300KFile
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助。

grep bash large-files algorithms

5
推荐指数
1
解决办法
1万
查看次数

如何使用 jq 有条件地重新定位 json 数组的元素?

我想根据条件重新定位数组的元素(更改数组元素的索引)。我不知道如何将其翻译为 jq,它更像是一种函数式语言。
基本上我想对数组进行排序,但特定元素的相对位置应该保持不变。

for each element:
if element.role==master => record type
  for each element:
    if element.type == recorded type
      reposition the element to be below its master of similar type 
Run Code Online (Sandbox Code Playgroud)

我可以用一个例子更好地解释。考虑input.json。如何将类型为“x”的所有非主元素移动到其主元素下方,而不改变相同类型的非主元素的相对位置。(忽略“num”参数。仅用于显示相对性)

输入.json

for each element:
if element.role==master => record type
  for each element:
    if element.type == recorded type
      reposition the element to be below its master of similar type 
Run Code Online (Sandbox Code Playgroud)

目标.json

[
    {
        "type": "A",
        "role": "master"
    },
    {
        "num": 1, …
Run Code Online (Sandbox Code Playgroud)

programming sort algorithms jq

2
推荐指数
1
解决办法
1311
查看次数

尝试完成 Project Euler #5,通过了所有语法检查,但不起作用

尝试完成Project Euler #5。我的代码在逻辑上应该可以工作,并且它通过了 ShellCheck,但由于某种原因没有给出输出。代码如下。谢谢,抱歉,如果这应该在不同的堆栈交换站点中

#!/bin/bash
 i=1
 while [[ $((i % 2)) -eq 0 && $((i % 3)) -eq 0 && $((i % 5)) -eq 0 && $((i % 7)) -eq 0 && $((i % 11)) -eq 0 && $((i % 13)) -eq 0 && $((i % 17)) -eq 0 && $((i  % 19)) -eq 0 ]]
 do
     i=$((i+1))
 done
 echo $i
Run Code Online (Sandbox Code Playgroud)

bash algorithms math

-1
推荐指数
1
解决办法
214
查看次数