xm command

RHEL5 提供 xm command 給使用者操作 Xen Guest,下面介紹一些常見的使用方式!

1.xm list
xm list 是看目前正在動作的 Guest.
[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----   1153.6
rhel4.6                                    4      511     1 -b----     15.0
rhel5                                      3      511     1 -b----    510.6

其中要注意的是 STATES 一共有6種
r - running
目前有使用到 CPU 支援的 Guest
b - blocked
可能 Guest 在 sleep 狀態或是等待 I/O 裝置.
p - paused
我們可以使用 xm pause domainID 讓系統進入暫停模式.有點像是進入 S1 - "Sleep" 的狀態.
s - shutdown
Guest 正在 shutdown, rebooted 或是 suspended,當完全關閉時使用 xm list 是看不到的.
c - crashed
Guest 已經完全 crashed 了,通常在 crashed 系統會自動重開機,除非你將設定檔中的 on_crash = "restart" 的選項移除掉.
d - dying
Guest 正在死亡狀態通常是系統還沒完全關機或是 crashed.

如果 Guest 是在關閉的情況下是不會顯示出來的.可以使用 -l (--long) 模式來看!

[root@benjr ~]# xm list -l

顯示的資訊相當多這裡就不多做說明,基本上包括 Guest 硬體資訊都會顯示出來.直接看.configuration files(設定檔 /etc/xen)會是一個比較直接的方式.

2.xen console domain
很奇怪的事,照著 RHEL 的官方文件說明去連接 Guest 的 console 但是系統像是死魚一樣,沒有反應!!檢查一下 Guest 的 /var/log/message 發現說沒有 console 這個東西.過了一個下午後想起來好像是 security 的權限不能讓 console 登入!!但是這應該是針對 root 不應該 Guest 的 console 沒反應.查了一下果然 Guest 還是需要設定不然光是 xm console 這個指令是不能登入的!!

1. 在 /boot/grub/grub.conf
指定 console 值 "console=tty0 console=xvc0"

[root@benjr ~]# vi /boot/grub/grub.conf
title Red Hat Enterprise Linux ES (2.6.9-78.ELxenU)
root (hd0,0)
kernel /boot/vmlinuz-2.6.9-78.ELxenU ro root=LABEL=/
console=tty0 console=xvc0
initrd /boot/initrd-2.6.9-78.ELxenU.img

2. /etc/inittab 系統預設不能使用 comport 來登入系統 ,所以要修改一下 /etc/inittab,

[root@benjr ~]# vi /etc/inittab
co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav

3. /etc/securetty 由於 PAM 的限制所以 root 無法使用 comport 登入系統 ,所以還是要修改一下 /etc/securetty:

[root@benjr ~]# vi /etc/securetty
xvc0

[root@benjr ~]# xm list

Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1231     4 r-----    150.1
rhel4.6                                    2      255     1 -b----      0.1
rhel5                                      4      511     1 -b----      2.2

你會看到的都是目前在 running 狀態的 Guest.

[root@benjr ~]# xm console rhel4.6

如果剛剛的設定正確就可以看到 console 的畫面了!!

3.xen create / shutdown domain

如果我們用的是 virt-manager 基本上 Guest Os 開機時幾乎沒有辦法看到 Bottloader(GRUB).不過還是有辦法透過 virtual console 的方式進入 GRUB 修改一些參數!

使用指令 #xm creat -c domainID
-c 的參數就是開機時會將 kernel 輸出導入到 virtual console.

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1231     4 r-----    150.1
rhel4.6                                    2      255     1 -b----      0.1
rhel5                                      4      511     1 -b----      2.2

目前正在運行的 Guest 有兩個 RHEL4.6 / RHEL5 我想用 RHEL4.6 ,所以先將 RHEL4.6 關機吧!!

[root@benjr ~]# xm shutdown rhel4.6
or #xm shutdown domain(domain ID)
[root@benjr ~]# xm shutdown 2

這動作相當於按下 Guest OS 的 power button

[root@benjr ~]# xm create -c rhel4.6

出現這畫面按下任意鍵就可以在 GRUB 進行參數設定了.

Using config file "/etc/xen/rhel4.6".
Started domain rhel4.6
不過預設 RHEL 是沒有 console ,請參考 RHEL5 - xen console command - http://benjr.tw/?q=node/375

4.xm destroy command

在正常情況下我們都會使用 xm shutdown domain(Domain ID),但是如果 Guest 的系統是在死當的情況下那光是使用 xm shutdown domain(Domain ID)是沒有效果的.這時候可以用 xm destroy domain(Domain ID) 強制 Guest OS 關機.

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1231     4 r-----    150.1
rhel4.6                                    2      255     1 -b----      0.1
rhel5                                      4      511     1 -b----      2.2

目前正在運行的 Guest 有兩個 RHEL4.6 / RHEL5 我想用 RHEL4.6 做示範,所以先將 RHEL4.6 強制關機吧!!

[root@benjr ~]# xm destroy rhel4.6
or #xm destroy domain(domain ID)
[root@benjr ~]# xm destroy 2

這動作相當於按下 Guest OS 的 power button 4秒.直接將系統關閉.

[root@benjr ~]# xm create -c rhel4.6

你可以發現 Guest系統一定是立刻關閉了.

5.xm save / restore command
老實說 save/restore command 很像是 hibernate(S4) - "Suspend to Disk" 的動作.可以將目前系統狀態保留下來並關機.下次開機時就可以快速回覆到關機前的狀態.

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----   1153.6
rhel4.6                                    4      511     1 -b----     15.0
rhel5                                      3      511     1 -b----    510.6

目前正在運行的 Guest 有兩個 RHEL4.6 / RHEL5 我想用 RHEL4.6 ,所以先將 RHEL4.6 做 save 吧!!

[root@benjr ~]# xm save
Error: 'xm save' requires 2 arguments.
Usage: xm save <Domain> <CheckpointFile>
Save a domain state to restore later.

#xm save 主要需要兩個參數 <Domain> 可以是 ID 或是名稱皆可,<CheckpointFile> 將目前狀態存儲下來的檔案.檔案大小和 Guest OS 的記憶體需求一樣的空間.

[root@benjr ~]# xm save rhel4.6 rhel4.6.save

[root@benjr ~]# xm restore
Error: 'xm restore' requires 1 arguments.
Usage: xm restore <CheckpointFile>
Restore a domain from a saved state.

#xm restore 只需要一個參數就是剛剛 save 時的 <CheckpointFile>

[root@benjr ~]# xm restore rhel4.6.save

系統也如期的快速開啟並回到剛剛關機的狀態了!!

6.xm pause/unpause command
"pause" 在一般系統比較下像是 S1 - "Sleep" 的狀態,它系統的資源是不會像是 save 會真的將系統關機並將資源釋放出來.

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----   2167.6
rhel4.6                                    2      511     1 -b----    385.0
rhel5                                        4      511     1 -b----     20.0

目前正在運行的 Guest 有兩個 RHEL4.6 / RHEL5 我想用 RHEL4.6 做示範,所以先將 RHEL4.6 做 pause 吧!!                              

[root@benjr ~]# xm pause rhel4.6
[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----   2170.6
rhel4.6                                    2      511     1
--p---    385.0
rhel5                                      4      511     1 -b----     20.0

可以看到 rhel4.6 進入了 P(Pause) 模式!

[root@benjr ~]# xm unpause rhel4.6
[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----   2171.7
rhel4.6                                    2      511     1
-b----    385.1
rhel5                                      4      511     1 -b----     20.0

rhel4.6 暫停解除,恢復到了原來的狀態!

7.xm mem-set / mem-max command
Guest OS 可以透過 xm mem-set 來增加 Guest OS 系統的記憶體大小,這種技術叫做 balloon ,和 Vmware 是使用相同的方式.指令也相當簡單!!
#xm mem-set domain-id mem[count]
#mem[count] 大小單位為 MBytes

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----    178.2
rhel4.6                                    5      512     1 -b----     11.5

[root@benjr ~]# xm mem-set 5 800
#大小單位為 MBytes
[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----    180.9
rhel4.6                                    5      799     1 -b----     11.7

不過記憶體的變大縮小是有其限制的,還記得當初在新增 Guest OS 時,有個選項是 Memory / Maximum allocation,你不能超過當初設定最大的範圍.當然在設定 Memory / Maximum allocation 也是不能超過系統實際的大小.

還有另外一個指令可以動態變更 Memory / Maximum allocation !
#xm mem-max domain-id mem

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----    178.2
rhel4.6                                    5      512     1 -b----     11.5
[root@benjr ~]#
xm mem-max 5 800

所有使用 xm mem-set / mem-max command 都是暫時性的,需要修改 /etc/xen/ 設定檔.或是使用 virt-manager 的介面來修改.

在其官方說明都敘述說請小心使用 xm mem-set / mem-max command 而且不保證生效也有可能會讓 Guest crash.

8.xm vcpu-list/vcpu-set/vcpu-pin command
通常透過 xm list 只能看到 Guest 的 vcpu 個數外並沒有其他關於 CPU 的資訊,xm 提供另外一個指令 xm vcpu-list . 目前我的系統是1個 CPU 4 個 cores.

1.Name : Guest (Domain) name
2.ID : Domain ID
3.VCPUs : 虛擬的 vcpu 個數,0 為第一顆,以此類推.
4.CPU :目前 vcpu 對應到的實體 CPU 是哪一顆.
5.State :
r - running
目前有使用到 CPU 支援的 Guest
b - blocked
可能 Guest 在 sleep 狀態或是等待 I/O 裝置.
p - paused
我們可以使用 xm pause domainID 讓系統進入暫停模式.有點像是進入S1 - "Sleep" 的狀態.
6.Time(s) : 截至目前為止 Domain 的 CPU 有使用到時間單位為分鐘
7.CPU Affinity: Guest 的 vcpu 對應到哪一個實體 CPU .如果為 any cpu 就代表由系統去動態配置.

[root@benjr ~]# xm vcpu-list
Name                              ID VCPUs   CPU State   Time(s) CPU Affinity
Domain-0                           0     0     0   -b-      26.4 0
Domain-0                           0     1     1   -b-       8.7 1
Domain-0                           0     2     2   r--       9.7 2
Domain-0                           0     3     3   -b-       5.9 3
rhel4.6                            4     0     3   -b-       5.4 any cpu
rhel5                              3     0     1   -b-      19.0 any cpu

剛剛 Domain U (Guest)的 CPU Affinity 都是 any cpu (代表由系統去動態配置),我們可以手動去配置它的的對應,使用 xm vcpu-pin.

Usage: xm vcpu-pin <Domain> <VCPU> <CPUs>
我要指定 rhel4.6(ID:4) 的第一顆 CPU(目前只有設定一顆) 使用實體第二顆 CPU (core)

[root@benjr ~]# xm vcpu-pin 4 0 2
[root@benjr ~]# xm vcpu-list
Name                              ID VCPUs   CPU State   Time(s) CPU Affinity
Domain-0                           0     0     0   -b-      38.4 0
Domain-0                           0     1     1   r--      12.5 1
Domain-0                           0     2     2   -b-      13.1 2
Domain-0                           0     3     3   -b-       7.6 3
rhel4.6                            4     0     2   -b-      12.6 2
rhel5                              3     0     1   -b-      21.4 any cpu

不過下次 Domain U(Guest) 開關機就會失效了.
關於動態調整 VCPU 個數我只能說是可惜,因為大多數的 OS 都不支援動態調配 CPU 個數.所以 xm vcpu-set 基本上派不上用場.

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----     74.6
rhel4.6                                    4      511     1 -b----     12.6
rhel5                                      3      511     1 -b----     21.5

我要指定 rhel4.6(ID:4) 使用3個 CPU (core)

[root@benjr ~]# xm vcpu-set 4 3

可以看到系統並沒有任何變更.

[root@benjr ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      975     4 r-----     75.0
rhel4.6                                    4      511     1 -b----     12.6
rhel5                                      3      511     1 -b----     21.5

不過還是透過最基本的方式去調配,關機去修改 /etc/xen/ 設定檔或是使用 virt-manager 的介面來修改.

[root@benjr ~]# xm vcpu-list
Name                              ID VCPUs   CPU State   Time(s) CPU Affinity
Domain-0                           0     0     0   r--     456.1 0
Domain-0                           0     1     1   r--     217.0 1
Domain-0                           0     2     2   -b-     254.6 2
Domain-0                           0     3     3   -b-      76.6 3
rhel4.6                            5     0     2   -b-       7.7 any cpu
rhel4.6                            5     1     2   -b-       3.2 any cpu
rhel4.6                            5     2     2   -b-       3.3 any cpu
rhel4.6                            5     3     2   -b-       2.9 any cpu

rhel5                              6     0     1   -b-       1.6 any cpu

AI 代码审查Review工具 是一个旨在自动化代码审查流程的工具。它通过集成版本控制系统(如 GitHub 和 GitLab)的 Webhook,利用大型语言模型(LLM)对代码变更进行分析,并将审查意见反馈到相应的 Pull Request 或 Merge Request 中。此外,它还支持将审查结果通知到企业微信等通讯工具。 一个基于 LLM 的自动化代码审查助手。通过 GitHub/GitLab Webhook 监听 PR/MR 变更,调用 AI 分析代码,并将审查意见自动评论到 PR/MR,同时支持多种通知渠道。 主要功能 多平台支持: 集成 GitHub 和 GitLab Webhook,监听 Pull Request / Merge Request 事件。 智能审查模式: 详细审查 (/github_webhook, /gitlab_webhook): AI 对每个变更文件进行分析,旨在找出具体问题。审查意见会以结构化的形式(例如,定位到特定代码行、问题分类、严重程度、分析和建议)逐条评论到 PR/MR。AI 模型会输出 JSON 格式的分析结果,系统再将其转换为多条独立的评论。 通用审查 (/github_webhook_general, /gitlab_webhook_general): AI 对每个变更文件进行整体性分析,并为每个文件生成一个 Markdown 格式的总结性评论。 自动化流程: 自动将 AI 审查意见(详细模式下为多条,通用模式下为每个文件一条)发布到 PR/MR。 在所有文件审查完毕后,自动在 PR/MR 中发布一条总结性评论。 即便 AI 未发现任何值得报告的问题,也会发布相应的友好提示和总结评论。 异步处理审查任务,快速响应 Webhook。 通过 Redis 防止对同一 Commit 的重复审查。 灵活配置: 通过环境变量设置基
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器的状态空间平均模型的建模策略。该方法通过数学建模手段对直流微电网系统进行精确的状态空间描述,并对其进行线性化处理,以便于系统稳定性分析与控制器设计。文中结合Matlab代码实现,展示了建模与仿真过程,有助于研究人员理解和复现相关技术,推动直流微电网系统的动态性能研究与工程应用。; 适合人群:具备电力电子、电力系统或自动化等相关背景,熟悉Matlab/Simulink仿真工具,从事新能源、微电网或智能电网研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网的动态建模方法;②学习DC-DC变换器在耦合条件下的状态空间平均建模技巧;③实现系统的线性化分析并支持后续控制器设计(如电压稳定控制、功率分配等);④为科研论文撰写、项目仿真验证提供技术支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐步实践建模流程,重点关注状态变量选取、平均化处理和线性化推导过程,同时可扩展应用于更复杂的直流微电网拓扑结构中,提升系统分析与设计能力。
内容概要:本文介绍了基于物PINN驱动的三维声波波动方程求解(Matlab代码实现)理信息神经网络(PINN)求解三维声波波动方程的Matlab代码实现方法,展示了如何利用PINN技术在无需大量标注数据的情况下,结合物理定律约束进行偏微分方程的数值求解。该方法将神经网络与物理方程深度融合,适用于复杂波动问题的建模与仿真,并提供了完整的Matlab实现方案,便于科研人员理解和复现。此外,文档还列举了多个相关科研方向和技术服务内容,涵盖智能优化算法、机器学习、信号处理、电力系统等多个领域,突出其在科研仿真中的广泛应用价值。; 适合人群:具备一定数学建模基础和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事计算物理、声学仿真、偏微分方程数值解等相关领域的研究人员; 使用场景及目标:①学习并掌握PINN在求解三维声波波动方程中的应用原理与实现方式;②拓展至其他物理系统的建模与仿真,如电磁场、热传导、流体力学等问题;③为科研项目提供可复用的代码框架和技术支持参考; 阅读建议:建议读者结合文中提供的网盘资源下载完整代码,按照目录顺序逐步学习,重点关注PINN网络结构设计、损失函数构建及物理边界条件的嵌入方法,同时可借鉴其他案例提升综合仿真能力。
### 使用CH341A读取XM25QH芯片 #### 硬件连接 为了通过CH341A读取XM25QH的数据,需确保两者之间的正确连接。具体来说: - CH341A的MOSI引脚应连接到XM25QH的SI引脚; - CH341A的MISO引脚应连接到XM25QH的SO引脚; - CH341A的SCLK引脚应连接到XM25QH的SCK引脚; - CH341A的CS引脚应连接到XM25QH的WP#/HOLD#引脚作为片选信号[^1]。 #### 初始化设置 初始化过程中,需要配置CH341A进入SPI模式并设定相应的参数如波特率等。这通常可以通过发送特定命令序列给CH341A来完成。 ```c // 假设已经包含了必要的头文件和库 void ch341a_spi_init(void){ // 设置工作模式为SPI Master Mode uint8_t cmd[] = {0xF7, 0x0C}; write(CH341A_DEVICE_PATH, &cmd, sizeof(cmd)); } ``` #### 发送指令与接收响应 对于任何针对XM25QH的操作而言,都需要先发出对应的控制字节(即命令),之后再根据具体情况决定是否继续传输其他数据或是准备接受来自设备的信息返回值。 例如要执行一次简单的状态寄存器查询操作,则可按照如下方式进行编码处理: ```c uint8_t read_status_register(){ uint8_t command = READ_STATUS_REG_CMD; // 定义READ STATUS REG Command Code uint8_t status; // Select the device by pulling CS low. digitalWrite(CS_PIN, LOW); // Send the Read Status Register instruction over SPI bus using CH341A interface. spi_transfer(&command, 1); // Receive one byte of data from XM25QH which contains current value inside its internal Status Register. spi_receive(&status, 1); // Deselect the device after completing communication session. digitalWrite(CS_PIN, HIGH); return status; } ``` 这里`spi_transfer()` 和 `spi_receive()` 函数分别代表了利用CH341A接口发送以及获取单个字符长度的消息体的方法;而`digitalWrite()` 则用来改变指定管脚电平高低从而达到选择/取消选定目标存储器件的目的。 #### 实际应用中的注意事项 当涉及到更复杂的功能比如擦除扇区、编程页面等内容时,除了遵循上述基本流程外还需要特别注意以下几点事项: - 在每次发起新的事务之前务必确认前次通讯已完成并且没有任何未决错误存在。 - 对于某些敏感型操作(像全盘清除之类的),建议事先做好充分备份以防意外丢失重要资料。 - 如果遇到异常情况无法正常通信的话,可能是因为电源供电不稳定或者是连线接触不良等原因造成的,此时应该仔细排查物理层面上可能出现的问题点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值