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

内容概要:本文提出了一种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备一定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进一步验证模型泛化能力。
### 使用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、付费专栏及课程。

余额充值