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-188250

Joshua Boniface's questions

Martin Hope
Joshua Boniface
Asked: 2022-11-09 14:30:57 +0800 CST

自动将 systemd 切片分配给特定的 cset

  • 5

在 systemd 下的 Debian 上,默认情况下,libvirt 下的 KVM 虚拟机被分配给“machine.slice”片。

如果我然后为这个切片添加一个 cpusetcset和一些自定义的 CPU 集,并启动一个 VM,VM 被添加到正确的 cpuset,即

user@host ~ $ sudo cset set --list --recurse
cset: 
         Name       CPUs-X    MEMs-X Tasks Subs Path
 ------------ ---------- - ------- - ----- ---- ----------
         root       0-31 y       0 y   610    1 /
 machine.slice 2-15,18-31 n       0 n     0    1 /machine.slice
 machine-qemu\x2d1\x2dweb1.scope 2-15,18-31 n       0 n     0    5 /ma....scope
        vcpu1 2-15,18-31 n       0 n     1    0 /machine.sli...web1.scope/vcpu1
        vcpu2 2-15,18-31 n       0 n     1    0 /machine.sli...web1.scope/vcpu2
        vcpu0 2-15,18-31 n       0 n     1    0 /machine.sli...web1.scope/vcpu0
     emulator 2-15,18-31 n       0 n    82    0 /machine.sli...1.scope/emulator
        vcpu3 2-15,18-31 n       0 n     1    0 /machine.sli...web1.scope/vcpu3

我想要做的是用单独的切片和 cpuset 复制此行为。但是,它似乎不起作用。

首先,我创建了 cset:

user@host ~ $ sudo cset set -c 0-1,16-17 osd.slice
cset: --> created cpuset "osd.slice"

然后我设置我想使用切片的服务:

user@host ~ $ diff -u /lib/systemd/system/[email protected] /etc/systemd/system/[email protected]
--- /lib/systemd/system/[email protected]       2021-05-27 06:04:21.000000000 -0400
+++ /etc/systemd/system/[email protected]       2022-11-08 17:20:32.515087642 -0500
@@ -6,6 +6,7 @@
 Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-osd.target
 
 [Service]
+Slice=osd.slice
 LimitNOFILE=1048576
 LimitNPROC=1048576
 EnvironmentFile=-/etc/default/ceph

然后我启动其中一项服务。如果我检查服务状态,我确实看到它在正确的切片/cgroup 中:

user@host ~ $ systemctl status [email protected]
● [email protected] - Ceph object storage daemon osd.0
     Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-11-08 17:22:32 EST; 1s ago
    Process: 251238 ExecStartPre=/usr/lib/ceph/ceph-osd-prestart.sh --cluster ${CLUSTER} --id 0 (code=exited, status=0/SUCCESS)
   Main PID: 251245 (ceph-osd)
      Tasks: 25
     Memory: 29.5M
        CPU: 611ms
     CGroup: /osd.slice/[email protected]
             └─251245 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph

为了理智,如果我检查 VM 瞬态服务,它看起来基本相同:

$ systemctl status machine-qemu\\x2d1\\x2dweb1.scope 
● machine-qemu\x2d1\x2dweb1.scope - Virtual Machine qemu-1-web1
     Loaded: loaded (/run/systemd/transient/machine-qemu\x2d1\x2dweb1.scope; transient)
  Transient: yes
     Active: active (running) since Tue 2022-11-08 17:03:57 EST; 22min ago
      Tasks: 87 (limit: 16384)
     Memory: 1.7G
        CPU: 4min 33.514s
     CGroup: /machine.slice/machine-qemu\x2d1\x2dweb1.scope
             └─234638 /usr/bin/kvm -name guest=web1,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-1-web1/master-key.aes -machine pc-i440fx-2.7,accel=kvm,usb=off,dump-guest-core=off,memory-ba>

然而,这就是我卡住的地方:如果我再次检查cset,“任务”不会像我期望的那样分配给切片 cset;它们是rootcset 的一部分,并且切片 cset 有 0 个任务和 0 个子:

user@host ~ $ sudo cset set --list --recurse
cset: 
         Name       CPUs-X    MEMs-X Tasks Subs Path
 ------------ ---------- - ------- - ----- ---- ----------
         root       0-31 y       0 y   622    2 /
    osd.slice  0-1,16-17 n       0 n     0    0 /osd.slice

我看不到任何关于如何machine.slice执行此操作的明显信息,在实际单元文件中没有引用它,machine.slice在瞬态scope单元中也没有任何内容。

我怎样才能得到这个新的、自定义的 slice/cgroup 来模拟machine.slice正在做什么,并将它下面的任何东西强制到这个 cpuset 中?

作为“为什么”/X-to-my-Y 的附录,我尝试ceph-osd使用命令在 cset 中手动生成进程之类的操作cset proc --exec,但这不能可靠地工作(有时它完全失败并显示“cannot移动”),即使它确实起作用,即使移动了主进程,它的线程也会最终卡在根 cset 中。因此,似乎我需要一种方法让 systemd 在实际进程开始之前将整个单元视为 cset 的一部分(与cset proc生成它、分叉它然后更改它的命令不同),这看起来像什么在machine.slice这里完成。

systemd
  • 1 个回答
  • 50 Views
Martin Hope
Joshua Boniface
Asked: 2022-11-09 00:15:09 +0800 CST

Linux Livirt/KVM:默认将所有虚拟机放在cpuset中,无需重新配置

  • 5

我正在尝试建立一个系统,让我在一组主机上拥有一些进程,这些主机位于一个(屏蔽)cpuset 中,而其他所有内容(即所有虚拟机)都在另一个主机中。这里的目标是拥有一个超融合系统,其中虚拟机在任意一组 CPU 内核上运行,而存储进程在其他内核上运行,并具有隔离性。我选择了 cpuset 来完成这项任务,因为这似乎是“最简单”的方法。

但是,这似乎无法正常工作。首次设置 cset shield 时可以移动 VM,但稍后启动 VM 会导致如下错误:

libvirt: Cgroup error : Invalid value '0-31' for 'cpuset.cpus': Invalid argument

显然,它试图将虚拟机放在不允许的根 cset 中。这是一个非常默认的配置,只需指定 VM 中的核心数量,无需考虑单个 CPU ID 或任何此类调整(这是此设置工作的要求;节点可能是不对称的,具有不同的核心数量、拓扑等,而虚拟机可以在它们周围实时迁移)。

但总的来说,我想知道:是否可以将 Libvirt/KVM 配置为默认使用特定的 cpuset,而无需以任何方式重新配置 VM(无需手动配置 CPU 固定恶作剧),并且无需任何手动调整 per-工艺依据?

kvm-virtualization libvirt
  • 1 个回答
  • 13 Views
Martin Hope
Joshua Boniface
Asked: 2015-10-10 11:30:55 +0800 CST

在另一台服务器上获取 pfSense 图

  • 1

我试图能够以某种方式从 pfSense 路由器(仅在特定管理 IP 上可用)获取流量和系统图到我的监控服务器上。到目前为止,我想到了:

  1. 尝试导出图表:看起来不太好,需要大量工作
  2. 尝试使用 apache2 到 ProxyPass 到 pfSense 页面:由于各种原因无法正常工作(尝试 ProxyPass 只是重定向,如果我在网络之外,这显然不起作用);这似乎是一个 pfSense 方面的问题,因此是这个问题。

真的,我想要的只是在 Check_MK Multisite 内部的“框架”中显示特定的 pfSense 页面,监控服务器充当代理,以便我可以在管理网络之外查看这些图表。有什么建议吗?

apache-2.4
  • 1 个回答
  • 578 Views
Martin Hope
Joshua Boniface
Asked: 2015-08-22 07:54:48 +0800 CST

基于其他角色的 Ansible 条件语句?

  • 6

我在 Ansible 部署中遇到了以下场景:

  • hostX 具有角色common-mta和其他一些角色
  • hostY有角色common-mta也有角色package-postfix

该common-mta角色复制一个文件(如果您能猜到,它是/etc/postfix/main.cf),但我想根据主机是否具有角色来限制它package-postfix,而不是像我现在那样仅通过主机名进行限制,例如:

when: not group_names == "mail"

我想要的是这样的:

when: not role_names == "package-postfix"

我认为这会更干净,并且允许我随意将package-postfix角色添加到其他主机而无需修改common-mta角色。

这可能吗?

编辑:Navern 的建议不适用于这个特定的用例;角色列表独立于组列表,虽然我可以通过组执行此操作,但它更脏。考虑一下,这是我的实际任务线:

- name: install postfix generic config if we aren't an mx, mail, or luna host
  template: src=main.cf.j2 dest=/etc/postfix/main.cf
  when: "'luna' not in group_names and 'mx' not in group_names and 'mail' not in group_names"

我想将其替换为:

- name: install postfix generic config if we don't have the postfix role
  template: src=main.cf.j2 dest=/etc/postfix/main.cf
  when: "'package-postfix' not in role_names"

但是,role_names它不是一个有效的变量,到目前为止,在文档中我找不到包含主机所在角色列表的变量,而不是它的组。这些可能看起来是一回事,但在我的情况下它们不是,因为我提到的三个组都共享package-postfix角色。希望这是有道理的,我正在正确使用 Ansible。

linux
  • 2 个回答
  • 6701 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