小编gro*_*mal的帖子

空闲的 CPU 进程有什么作用?

查看strace我的来源,发现使用了克隆标志CLONE_IDLETASK,在那里描述为:

#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Run Code Online (Sandbox Code Playgroud)

在深入研究之后,我发现,虽然该标志并未包含在man clone其中,但内核在引导过程中实际使用它为机器上的每个 CPU 创建空闲进程(所有这些进程都应该具有 PID 0)。即具有 8 个 CPU 的机器将至少有 7 个(见下面的问题)这样的进程“运行”(注意引号)。

现在,这让我想到了几个关于“空闲”过程实际上做了什么的问题。我的假设是它会持续执行 NOP 操作,直到它的时间范围结束并且内核分配一个真正的进程来运行或再次分配空闲进程(如果 CPU 没有被使用)。然而,这完全是猜测。所以:

  1. 在一台有 8 个 CPU 的机器上,会创建 7 个这样的空闲进程吗?(一个 CPU 将由内核本身持有,而没有执行用户空间工作?)

  2. 空闲进程真的只是一个无限的 NOP 操作流吗?(或执行相同操作的循环)。

  3. CPU 使用率(比如说uptime)是否简单地通过空闲进程在 CPU 上的时间以及在特定时间段内不存在的时间来计算?


PS 这个问题的很大一部分很可能是由于我不完全了解 CPU 的工作原理。即我了解程序集、时间范围和中断,但我不知道如何,例如,CPU 可能会根据执行的内容使用更多或更少的能量。如果有人也能启发我,我将不胜感激。

cpu linux-kernel

80
推荐指数
2
解决办法
3万
查看次数

软件更新和升级有什么区别?

有人说“更新”是小改动,“升级”是大改动。我对软件更新和升级非常困惑。什么时候应该使用更新与什么时候应该使用升级。

有人可以解释包管理器中这些术语之间的区别吗?

yum apt package-management software-updates

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

xmonad 启动时 xmobar 不会出现在窗口堆栈的顶部

xmobar进入后就遇到了一种奇怪的行为xmonad。当我xmonad(来自.xinitrc,我使用 XDM)时,我xmobar出现但它不在窗口堆栈的顶部或底部。一旦我启动了一个应用程序(例如通过按下终端模拟器Mod + Shift + Return),该应用程序就会使用整个屏幕,就好像它xmobar在底部一样。然后我按下Mod + B并没有任何反应,一旦我Mod + B第二次按下它xmobar就会被提升到顶部,从而减小了应用程序窗口的大小。

在此之后Mod + Bxmonad会话的其余部分正常工作,即它降低/提高(隐藏/显示)xmobar.

我确信我配置错误。我的xmonad.hs样子:

import XMonad
import XMonad.Hooks.SetWMName
import XMonad.Hooks.DynamicLog

main = do
  xmonad =<< statusBar "xmobar" myPP toggleStrutsKey defaultConfig
    { terminal           = "urxvt"
    , focusFollowsMouse  = True
    , clickJustFocuses   = False
    , borderWidth        = 1
    , modMask            = mod4Mask …
Run Code Online (Sandbox Code Playgroud)

xmonad

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

Nginx 反向代理重定向

nginx用作反向代理,当我登录 Web 界面时,我被重定向到代理 URL。我想避免它并始终保留“server_name”作为 URL。是否可以?

这是我的/etc/nginx/conf.d/my_app.conf

server { 
    listen 443 ssl; 
    server_name my-app.net; 
    ssl_certificate /etc/pki/tls/certs/my-app.cer; 
    ssl_certificate_key /etc/pki/tls/private/my-app.key; 
    ssl_protocols TLSv1.1 TLSv1.2; 
    access_log /var/log/nginx/my-app.access.log main; 

    location / { 
        proxy_pass http://ip_of_the_app:7180/; 
        proxy_redirect off; 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

我连接http://my-app.net,输入登录信息,然后我被重定向到http://ip_of_the_app:7180同一个登录页面,我必须再次登录。可以避免这种双重登录吗?

linux nginx reverse-proxy

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

麦克风无法在 archlinux 上工作

语境

我多年来一直archlinux在笔记本电脑上运行,从不需要麦克风。现在我需要它,但找不到正确配置它的方法。

我使用alsapulseadio

alsamixer作为用户运行我有两个仪表:

  ||      ||
Master  Capture
Run Code Online (Sandbox Code Playgroud)

我将它们都取消静音并启用了合理的 (~50%) 值。

alsamixer以 root 身份运行我有几个仪表:

  ||        ||        ||      ||      ||       ||
Master  Headphones  Speaker  PCM  Microphone MIC Boot 

 ||      ||       ||        ||       ||
Beep  Loopback Internal  Internal  Capture
Run Code Online (Sandbox Code Playgroud)

如果我Loopback以 root 身份启用,我可以通过扬声器听到麦克风的声音

如果我alsamixer以用户身份明确选择我的声卡,我会得到与以 root 身份运行相同的命令(如果我Loopback在这里启用,我也会听到来自扬声器的麦克风)。我得到以下信息:

在此处输入图片说明

(右边是另外两个Internal仪表,Loopback(enable/disable) 和 mutable Off-hook

然而,无论我做什么,无论我如何干预 alsa 仪表,我都无法将麦克风传递给用户应用程序。本质上,每次运行时,arecord我都会得到以下输出:

$ arecord -vv -f dat /dev/null 
Recording …
Run Code Online (Sandbox Code Playgroud)

arch-linux alsa audio

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

“$-”中的“s”是什么?

我通常很清楚$-. 在最近的 CentOS 上,我得到:

[grochmal@orion ~]$ echo $-
himBH
Run Code Online (Sandbox Code Playgroud)

hmBH都是来自set, 的选项,i意味着我的 shell 是交互式的。

然而,在我的 Arch Linux 上,我得到了:

[grochmal@haps ~]$ echo $-
himBHs
Run Code Online (Sandbox Code Playgroud)

我找不到任何有用的东西man bashset -s给我一个错误。那s代表什么?

bash shell-builtin

11
推荐指数
1
解决办法
1888
查看次数

我如何在以后发送 mutt 推迟的邮件?

我不喜欢早起,但人们更喜欢在早上而不是凌晨 3 点收到电子邮件。因此,我经常at在睡觉时发送电子邮件。

但这带来了复杂性,我需要将电子邮件写为文本文件并使用sendmail. 我将那些尚未发送的电子邮件留在 mutt 的延期 mbox 中,有什么方法可以mutt用来发送该电子邮件?

好的,稍后发送邮件的一种方法mutt是:

echo 'cat /home/grochmal/body | mutt -s "mail" john.doe@example.com' | at now + 12 hours
Run Code Online (Sandbox Code Playgroud)

但是我在推迟的 mbox 中有那封邮件。

如果我只有一封延期邮件,我可以这样做:

echo '/usr/sbin/sendmail -t <(cat /home/grochmal/mail/postponed | sed 1d)' | at now + 12 hours
Run Code Online (Sandbox Code Playgroud)

但是我的延期邮箱里经常有几封延期邮件,如何选择要发送的邮件

我的相关部分muttrc是:

set sendmail  = "/usr/sbin/sendmail -oem -oi -f $EMAIL"
set folder    = $HOME/mail
set record    = +sent
set postponed = +postponed …
Run Code Online (Sandbox Code Playgroud)

email mutt at

10
推荐指数
1
解决办法
4119
查看次数

Xmonad 默认弃用:什么是面向未来的配置?

这可能是 SO 之间的边界,因为很多问题都与 Haskell 编程有关。然而,归根结底,这是一个配置问题。

背景和研究

由于 0.12 Xmonad 在 xmonad.errors 中抛出此警告(多次):

xmonad.hs:15:14: warning: [-Wdeprecations]
    In the use of ‘defaultConfig’
    (imported from XMonad, but defined in XMonad.Config):
    Deprecated: "Use def (from Data.Default, and re-exported by XMonad and XMonad.Config) instead."
Run Code Online (Sandbox Code Playgroud)

它有效,这只是一个警告。然而,我想了解是什么导致了警告(我试图理解它并且已经失败了几个小时)。根据弃用描述,您会猜测这XMonad.Config不是使用Defaultfrom的定义Data.Default,但事实并非如此。查看XMonad.Config您在导入开头看到的代码:

import XMonad.Core as XMonad hiding
    (workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
    ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
    ,handleEventHook,clickJustFocuses,rootMask,clientMask)
import qualified XMonad.Core as XMonad
    (workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
    ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
    ,handleEventHook,clickJustFocuses,rootMask,clientMask)

import XMonad.Layout
import XMonad.Operations
import XMonad.ManageHook
import qualified XMonad.StackSet as W
import Data.Bits ((.|.))
import Data.Default …
Run Code Online (Sandbox Code Playgroud)

xmonad

6
推荐指数
1
解决办法
1799
查看次数

递归移动(`mv -rn`,类似`cp -rn`),只移动不存在文件的移动

语境

我有用户上传的内容需要备份。内容超过 3 个独立的服务器/var/www/domain/media/(在每个服务器上它都在同一个地方)。备份是 NFS 安装的 RAID,位于/var/www/domain/bak/.

media/由不同的用户拥有bak/,基本上 webapp 可以写入media/但只能读取bak/(用户只能删除他们的上传,直到它在格林威治标准时间 00:00 备份)。

这导致了两个问题:用户可以强制使用相同的文件名覆盖备份中的文件,并且文件中的文件media/最终可能会出现在两个不同的服务器上(如果用户上传两次并且得到了服务,则完全相同的文件)一个不同的服务器)。

所有这些都运行在 4 个 CenOS 7(网络 X 3 + 备份 X 1)上。“Web”服务器的磁盘空间有限,需要将内容移至备份服务器以防止它们填满磁盘。

没有竞争条件,这样的东西我们并不需要关心。备份是从单个备份机器完成的,通过ssh在其他三台机器上依次执行命令。


当前解决方案

在清除重复项后完成要备份的文件的“移动”:

find /var/www/domain/media/ -type f | > media
find /var/www/domain/bak/ -type f | awk '{a=gensub("bak","media",1); print a}' > bak
cat bak media | sort | uniq -d > dupes
cat dupes | xargs rm
cp -r /var/www/domain/media/* …
Run Code Online (Sandbox Code Playgroud)

backup cp rsync files mv

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

为什么 cpu.cfs_quota_us 不限制 LXC 容器的 CPU 带宽?

我想将容器限制为系统总 CPU 带宽的 25%。
这是我的设置:

  • LXC 版本 1.0.2
  • 内核 3.2.45
  • 一个用户为 LXC 容器创建了 cgroup (foo)
  • 主机上 40 个可用内核
  • 主机和容器对每个其他 cgroup 子系统都有默认值,除了:
  • /sys/fs/cgroup/cpu/lxc/foo/cpu.cfs_quota_us = 400000
  • /sys/fs/cgroup/cpu/lxc/foo/cpu.cfs_period_us = 100000
  • /sys/fs/cgroup/cpuset/lxc/foo/cpuset.cpus = 0-15

我使用这个公式计算了配额:

(# of cpus available to container) * (cpu.cfs_period_us) * (.25) so 16 * 100000 * .25 = 400000
Run Code Online (Sandbox Code Playgroud)

我同时在容器内部和外部运行了一个基本的stress-ng,以衡量每秒允许内部和外部的操作次数,结果与以“-1”的配额运行时基本相同,也就是说没有配额。

外跑:

$ ./stress-ng  --cpu-load 50 -c 40 --timeout 20s --metrics-brief
stress-ng: info: [25649] dispatching hogs: 40 cpu  
stress-ng: info: [25649] successful run completed in 20.44s  
stress-ng: info: [25649] stressor      bogo …
Run Code Online (Sandbox Code Playgroud)

linux cgroups lxc

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