Windows下Libvirt Java API使用チュートリアル(二)-インタフェース使用説明
libvirt Java APIの導入について説明します.
『Windows下Libvirt Java API使用チュートリアル(一)-開発環境導入』
次に、インタフェースの使用とコードサンプルについて説明します.
libvirtの管理単位は単一ホストであるため,インタフェースが取得できる情報の最大範囲もホストである.まずホストからlibvirtインタフェースを検証します.ホスト(libvirtが存在する管理ノード)プローブ関連インタフェース検証コードは以下の通りである.
Libvirtインタフェースは、KVMおよびXEN環境でそれぞれテストされ、テスト結果は次のとおりです.
Host name: s5410
Type: QEMU
9001
the number of active CPUs: 64
number of core per socket: 8
memory size in kilobytes: 49444896
expected CPU frequency: 2131
string indicating the CPU model: x86_64
the number of NUMA cell, 1 for uniform: 1
number of CPU socket per node: 4
number of threads per core: 2
the total number of CPUs supported but not necessarily active in the host.: 64
Network name: hello
Network name: default
Network filter name: no-other-l2-traffic
Network filter name: allow-dhcp
...
30b940dd-f79a-21a2-82d5-ddc1b1b4a7e4
x86_64
core2duo
...
tcp
hvm
32
/usr/libexec/qemu-kvm
rhel5.4.0
pc
rhel5.4.4
rhel5.5.0
rhel5.6.0
/usr/libexec/qemu-kvm
...
Host name: s55203
Type: Xen
3001000
the number of active CPUs: 32
number of core per socket: 8
memory size in kilobytes: 50276352
expected CPU frequency: 1995
string indicating the CPU model: x86_64
the number of NUMA cell, 1 for uniform: 1
number of CPU socket per node: 2
number of threads per core: 2
the total number of CPUs supported but not necessarily active in the host.: 32
Network name: default
Network filter name: allow-dhcp-server
Network filter name: qemu-announce-self-rarp
...
x86_64
xenmigr
xen
64
/usr/lib64/xen/bin/qemu-dm
xenpv
...
説明:
注意1:寸法はサポートされていません.現在の環境のlibvirtバージョンで、エラーが報告されるインタフェースを実行します.
unsupported in sys interface
注2:名詞の解釈
hvm: gives similar information but when running a 32 bit OS fully virtualized with Xen using the hvm support. numa: For processors that support hyperthreading, this is the number of hyperthreads they have per core. On a machine that doesn't support hyperthreading, this will be 1.
正直に言うと、こんなに多くの情報の中で、筆者が注目しているのは多くなく、その代表的な意味さえ言えないものがたくさんあります.筆者が注目しているのはcpuの個数、コア数、メモリ総量などの直感的な情報だけです.あれば十分です.ホストを見終わったら、仮想マシンを見てみましょう.仮想化環境のコアリソースは、仮想マシンであるため、その属性と情報も自然に多く、コードをテストします.
ループが多く、一部の結果は以下の通りです.
: には、 マシンからなるすべての が に まれています. システムを りたいなら、ここに のものがあります.
マシンの マシンのId マシンのメモリサイズ CPU マシンディスクファイル 、ディスクファイルのサイズ.ロゴなどの も まれています. ディスクの み き . マシンネットワークデバイス .Macアドレス、デバイスタイプなど.VM NICの み き .
には システムのニーズを たすことができます. のテストコードを します.libvirt Java APIのエントリは、 にConnectというクラスを しています.つまり、まず ホストとの を します.
に、 によって を します.
インタフェースのパラメータを け れる がある :
のインタフェースの りから えを つけることができます.
ただし、 する は、xmlフォーマットの り を してパラメータ を する がある があります. えば、diskのpahtとinterfaceのpathです. に、 インタフェースについて に します.
この では、 に マシンの とリカバリ をテストします.パラメータを としないため、このような は です. なシステムには、 マシンの などの が です.libvirtは にxml によってリソースを し、まず された マシンの な を し、 に す があります. のフォーマット?ほほほ、もちろん のテスト から えられたデータです. があるなら、 でやってみてください.libvirtのドキュメントは、まだ していませんが、このような な を するには、 しています. のマニュアルをダウンロードして にすることもできます.
さて、VMware、Xenserverなどの プラットフォームのSDKに べてlibvirtのJava APIは で、 が く、 が です.もちろん、 には けているかもしれませんが、 には、 のものほど ではありません.XMLベースでリソースを することで,インタフェースの を らし, び しをより にするが, には を す.しかし、 として い マシン で するAPIであり、 にKVM/XENの にとって、 の と える.
『Windows下Libvirt Java API使用チュートリアル(一)-開発環境導入』
次に、インタフェースの使用とコードサンプルについて説明します.
libvirtの管理単位は単一ホストであるため,インタフェースが取得できる情報の最大範囲もホストである.まずホストからlibvirtインタフェースを検証します.ホスト(libvirtが存在する管理ノード)プローブ関連インタフェース検証コードは以下の通りである.
- @Before
- public void init() {
- System.setProperty("jna.library.path",
- "D:/Git-Repo/git/libvirt-java/libvirt-java/src/test/java/kubi/coder/");
- try {
- xenConn = new Connect("xen+tcp://10.4.55.203/");
- // system /session
- kvmConn = new Connect("qemu+tcp://10.4.54.10/system");
- } catch (LibvirtException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * , , Xen KVM
- *
- *
- * @author lihzh
- * @date 2012-5-15 1:28:00
- */
- @Test
- public void testDetectHost() {
- // KVM
- doDetectHost(kvmConn);
- // XEN
- doDetectHost(xenConn);
- }
-
- /**
- *
- *
- * @param conn
- * @author lihzh
- * @date 2012-5-15 1:37:37
- */
- private void doDetectHost(Connect conn) {
- try {
- // Returns the free memory for the connection
- // System.out.println("FreeMemory: " + conn.getFreeMemory());//
-
- // Returns the system hostname on which the hypervisor is running.
- // (the result of the gethostname(2) system call)
- // If we are connected to a remote system,
- // then this returns the hostname of the remote system
- System.out.println("Host name: " + conn.getHostName());
- // Gets the name of the Hypervisor software used.
- System.out.println("Type: " + conn.getType());
- // Gets the version level of the Hypervisor running. This may work
- // only with hypervisor call, i.e. with priviledged access to the
- // hypervisor, not with a Read-Only connection. If the version can't
- // be extracted by lack of capacities returns 0.
- // Returns:
- // major * 1,000,000 + minor * 1,000 + release
- System.out.println(conn.getVersion());
-
- NodeInfo nodeInfo = conn.nodeInfo();
- System.out.println("the number of active CPUs: " + nodeInfo.cpus);
- System.out.println("number of core per socket: " + nodeInfo.cores);
- System.out.println("memory size in kilobytes: " + nodeInfo.memory);
- System.out.println("expected CPU frequency: " + nodeInfo.mhz);
- System.out.println("string indicating the CPU model: "
- + nodeInfo.model);
- System.out.println("the number of NUMA cell, 1 for uniform: "
- + nodeInfo.nodes);
- System.out.println("number of CPU socket per node: "
- + nodeInfo.sockets);
- System.out.println("number of threads per core: "
- + nodeInfo.threads);
- System.out
- .println("the total number of CPUs supported but not necessarily active in the host.: "
- + nodeInfo.maxCpus());
-
- // for (String interName : conn.listInterfaces()) {
- // System.out.println(interName);
- // }
-
- // Provides the list of names of defined interfaces on this host
-
- // for (String interName : conn.listDefinedInterfaces()) {
- // System.out.println(interName);
- // } //
-
- // Lists the active networks.
- for (String networkName : conn.listNetworks()) {
- System.out.println("Network name: " + networkName);
- }
-
- // Lists the names of the network filters
- for (String networkFilterName : conn.listNetworkFilters()) {
- System.out.println("Network filter name: " + networkFilterName);
- }
-
- System.out.println(conn.getCapabilities());
- } catch (LibvirtException e) {
- e.printStackTrace();
- }
- }
-
Libvirtインタフェースは、KVMおよびXEN環境でそれぞれテストされ、テスト結果は次のとおりです.
Host name: s5410
Type: QEMU
9001
the number of active CPUs: 64
number of core per socket: 8
memory size in kilobytes: 49444896
expected CPU frequency: 2131
string indicating the CPU model: x86_64
the number of NUMA cell, 1 for uniform: 1
number of CPU socket per node: 4
number of threads per core: 2
the total number of CPUs supported but not necessarily active in the host.: 64
Network name: hello
Network name: default
Network filter name: no-other-l2-traffic
Network filter name: allow-dhcp
...
30b940dd-f79a-21a2-82d5-ddc1b1b4a7e4
x86_64
core2duo
...
tcp
hvm
32
/usr/libexec/qemu-kvm
rhel5.4.0
pc
rhel5.4.4
rhel5.5.0
rhel5.6.0
/usr/libexec/qemu-kvm
...
Host name: s55203
Type: Xen
3001000
the number of active CPUs: 32
number of core per socket: 8
memory size in kilobytes: 50276352
expected CPU frequency: 1995
string indicating the CPU model: x86_64
the number of NUMA cell, 1 for uniform: 1
number of CPU socket per node: 2
number of threads per core: 2
the total number of CPUs supported but not necessarily active in the host.: 32
Network name: default
Network filter name: allow-dhcp-server
Network filter name: qemu-announce-self-rarp
...
x86_64
xenmigr
xen
64
/usr/lib64/xen/bin/qemu-dm
xenpv
...
説明:
注意1:寸法はサポートされていません.現在の環境のlibvirtバージョンで、エラーが報告されるインタフェースを実行します.
unsupported in sys interface
注2:名詞の解釈
hvm: gives similar information but when running a 32 bit OS fully virtualized with Xen using the hvm support. numa: For processors that support hyperthreading, this is the number of hyperthreads they have per core. On a machine that doesn't support hyperthreading, this will be 1.
正直に言うと、こんなに多くの情報の中で、筆者が注目しているのは多くなく、その代表的な意味さえ言えないものがたくさんあります.筆者が注目しているのはcpuの個数、コア数、メモリ総量などの直感的な情報だけです.あれば十分です.ホストを見終わったら、仮想マシンを見てみましょう.仮想化環境のコアリソースは、仮想マシンであるため、その属性と情報も自然に多く、コードをテストします.
- /**
- *
- *
- * @author lihzh
- * @date 2012-5-16 11:14:20
- */
- @Test
- public void testDetectDomains() {
- // KVM
- doDetectDomains(kvmConn);
- // XEN
- doDetectDomains(xenConn);
- }
-
- /**
- *
- *
- * @param conn
- * @author lihzh
- * @date 2012-5-16 11:15:27
- */
- private void doDetectDomains(Connect conn) {
- try {
- // Lists the active domains.( ( ) id)
- for (int activeDomId : conn.listDomains()) {
- System.out.println("Active vm id: " + activeDomId);
- // Id,
- Domain domain = conn.domainLookupByID(activeDomId);
- // Gets the hypervisor ID number for the domain
- System.out.println("Domain id: " + domain.getID());
- // Gets the public name for this domain
- System.out.println("Domain name: " + domain.getName());
- // Gets the type of domain operation system.
- System.out.println("Domain os type: " + domain.getOSType());
- // Gets the UUID for this domain as string.
- System.out.println("Domain uuid: " + domain.getUUIDString());
- // Retrieve the maximum amount of physical memory allocated to a
- // domain.
- System.out.println("Domain max memory: "
- + domain.getMaxMemory());
- // Provides the maximum number of virtual CPUs supported for the
- // guest VM. If the guest is inactive, this is basically the
- // same as virConnectGetMaxVcpus. If the guest is running this
- // will reflect the maximum number of virtual CPUs the guest was
- // booted with.
- System.out.println("Domain max vcpu: " + domain.getMaxVcpus());
- // Provides an XML description of the domain. The description
- // may be
- // reused later to relaunch the domain with createLinux().
- System.out.println("Domain xml description: "
- + domain.getXMLDesc(0));
- System.out.println("Domain maxMen allowed: "
- + domain.getInfo().maxMem);
- System.out.println("Domain memory: " + domain.getInfo().memory);
- // domain.getJobInfo()
- //
- System.out.println("Domain state: " + domain.getInfo().state);
- // Provides a boolean value indicating whether the network is
- // configured to be automatically started when the host machine
- // boots.
- System.out.println("Domain network autostart: "
- + domain.getAutostart());
- // Extracts information about virtual CPUs of this domain
- for (VcpuInfo vcpuInfo : domain.getVcpusInfo()) {
- System.out.println("cpu: " + vcpuInfo.cpu);
- System.out.println("cpu time: " + vcpuInfo.cpuTime);
- System.out.println("cpu number: " + vcpuInfo.number);
- System.out.println("cpu state: " + vcpuInfo.state);
- }
-
- // KVM
- if (conn.getURI().startsWith("qemu")) {
- // This function returns block device (disk) stats for block
- // devices attached to the domain
- DomainBlockInfo blockInfo = domain
- .blockInfo("/opt/awcloud/instance/admin/"
- + domain.getName() + "/disk");
- System.out.println("Disk Capacity: "
- + blockInfo.getCapacity());
- System.out.println("Disk allocation: "
- + blockInfo.getAllocation());
- System.out.println("Disk physical: "
- + blockInfo.getPhysical());
-
- DomainBlockStats blockStats = domain.blockStats("vda");
- //
- System.out.println("read request num: " + blockStats.rd_req);
- // bytes
- System.out.println("read request num: " + blockStats.rd_bytes);
- //
- System.out.println("read request num: " + blockStats.wr_req);
- // bytes
- System.out.println("read request num: " + blockStats.wr_bytes);
- }
-
- }
-
- //
- for (String name : conn.listDefinedDomains()) {
- System.out.println("Inactive domain name: " + name);
- }
-
- } catch (LibvirtException e) {
- e.printStackTrace();
- }
- }
ループが多く、一部の結果は以下の通りです.
Active vm id: 53
Domain id: 53
Domain name: i-546A099E
Domain os type: hvm
Domain uuid: e608560a-2c03-8e48-2e60-d0d01693f530
Domain max memory: 147456
Domain max vcpu: 1
Domain xml description:
i-546A099E
e608560a-2c03-8e48-2e60-d0d01693f530
131072
131072
1
hvm
/usr/lib/xen/boot/hvmloader
destroy
restart
restart
/usr/lib64/xen/bin/qemu-dm
Domain maxMen allowed: 147456
Domain memory: 139140
Domain state: VIR_DOMAIN_BLOCKED
Domain network autostart: false
cpu: 31
cpu time: 2225977676675
cpu number: 0
cpu state: VIR_VCPU_BLOCKED
Domain network autostart: false
Inactive domain name: i-46A70811
Inactive domain name: i-38C20705
Inactive domain name: i-498E09B2
Inactive domain name: null
Inactive domain name: null
Inactive domain name: null
Inactive domain name: null
Inactive domain name: null
: には、 マシンからなるすべての が に まれています. システムを りたいなら、ここに のものがあります.
マシンの マシンのId マシンのメモリサイズ CPU マシンディスクファイル 、ディスクファイルのサイズ.ロゴなどの も まれています. ディスクの み き . マシンネットワークデバイス .Macアドレス、デバイスタイプなど.VM NICの み き .
には システムのニーズを たすことができます. のテストコードを します.libvirt Java APIのエントリは、 にConnectというクラスを しています.つまり、まず ホストとの を します.
- Connect kvmConn = new Connect("qemu+tcp://10.4.54.10/system");
に、 によって を します.
- conn.listDomains()
インタフェースのパラメータを け れる がある :
- conn.domainLookupByID(activeDomId)
のインタフェースの りから えを つけることができます.
- for (int activeDomId : conn.listDomains())
ただし、 する は、xmlフォーマットの り を してパラメータ を する がある があります. えば、diskのpahtとinterfaceのpathです. に、 インタフェースについて に します.
- /**
- *
- *
- * @author lihzh
- * @date 2012-5-16 3:35:43
- */
- @Test
- public void testControlVM() {
- try {
- Domain domain = kvmConn.domainLookupByID(8);
- System.out.println("Domain state: " + domain.getInfo().state);
- domain.suspend();
- System.out.println("Domain state: " + domain.getInfo().state);
- for (int i = 0; i 5; i++) {
- System.out.println("wait for: " + (5 - i));
- Thread.sleep(1000);
- }
- System.out.println("Resume vm.");
- domain.resume();
- System.out.println("Domain state: " + domain.getInfo().state);
- } catch (LibvirtException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
この では、 に マシンの とリカバリ をテストします.パラメータを としないため、このような は です. なシステムには、 マシンの などの が です.libvirtは にxml によってリソースを し、まず された マシンの な を し、 に す があります. のフォーマット?ほほほ、もちろん のテスト から えられたデータです. があるなら、 でやってみてください.libvirtのドキュメントは、まだ していませんが、このような な を するには、 しています. のマニュアルをダウンロードして にすることもできます.
さて、VMware、Xenserverなどの プラットフォームのSDKに べてlibvirtのJava APIは で、 が く、 が です.もちろん、 には けているかもしれませんが、 には、 のものほど ではありません.XMLベースでリソースを することで,インタフェースの を らし, び しをより にするが, には を す.しかし、 として い マシン で するAPIであり、 にKVM/XENの にとって、 の と える.