The Xen Store
5405 단어 store
The Xen Store Daemon provides a simple tree-like database to which we can read and write values. The Xen Store code is mainly under tools\xenstore.
It replaces the XCS, which was a daemon handling control messages.
The physical xenstore resides in one file: /var/lib/xenstored/tdb.
Both user space ("tools"in Xen terminology) and kernel code can write to the XenStore .The kernel code writes to the XenStore by using XenBus .
The python scripts (under tools/python) uses lowlevel/xs.c to read/write to the XenStore .
The Xen Store Daemon is started in xenstored_core.c. It creates a device file ("/dev/xen/evtchn") in case such a device file does not exists and it opens it. (see : domain_init() ,file tools/xenstore/xenstored_domain.c).
It opens 2 TCP sockets (UNIX sockets). One of these sockets is a Read-Only socket, and it resides under/var/run/xenstored/socket_ro. The second is/var/run/xenstored/socket.
Connections on these sockets are represented by the connection struct.
A connection can be in one of three states:
BLOCKED (blocked by a transaction)
BUSY (doing some action)
OK (completed it's transaction)
struct connection is declared in xenstore/xenstored_core.h; When a socket is ReadOnly ,the "can_write"member of it is false.
Then we start an endless loop in which we can get input/output from three sources: the two sockets and the event channel, mentioned above.
Events, which are received in the event channel,are handled by handle_event() method (file xenstored_domain.c).
There are six executables under tools/xenstore, five of which are in fact made from the same module, which is xenstore_client.c, each time built with a different DEFINE passed. (See the Makefile). The sixth tool is built from xsls.c
These executables are : xenstore-exists, xenstore-list, xenstore-read, xenstore-rm, xenstore-write and xsls.
You can use these executable for accessing xenstore. For example: to view the list of fields of domain 0 which has a path "local/domain/0", you run:
xenstore-list /local/domain/0
and a typical result can be the following list:
cpu
memory
name
console
vm
domid
backend
The xsls command is very useful and recursively shows the contents of a specified XenStore path. Essentially it does a xenstore-list and then a xenstore-read for each returned field, displaying the fields and their values and then repeating this recursively on each sub-path. For example: to view information about all VIFs backends hosted in domain 0 you may use the following command.
xenstore-ls /local/domain/0/backend/vif
and a typical result may be:
14 = "" 0 = "" bridge = "xenbr0" domain = "vm1" handle = "0" script = "/etc/xen/scripts/vif-bridge" state = "4" frontend = "/local/domain/14/device/vif/0" mac = "aa:00:00:22:fe:9f" frontend-id = "14" hotplug-status = "connected"15 = "" 0 = "" mac = "aa:00:00:6e:d8:46" state = "4" handle = "0" script = "/etc/xen/scripts/vif-bridge" frontend-id = "15" domain = "vm2" frontend = "/local/domain/15/device/vif/0" hotplug-status = "connected"
(The xenstored must be running for these six executables to run; If xenstored is not running, then running theses executables will usually hang. The Xend daemon can be stopped).
An instance of struct node is the elementary unit of the XenStore . (struct node is defined in xenstored_core.h). The actual writing to the XenStore is done by write_node() method of xenstored_core.c.
xen_start_info structure has a member named :store_evtchn. (declared in public/xen.h as u16). This is the event channel for store communication.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React18을 사용해야 하는 좋은 이유: useSyncExternalStore간단한 ToDo를 생각해 봅시다. 이것은 당신의 동료가 휴가를 가기 전에 💩 당신에게 선물로 남긴 것입니다: index.js에는 다른 함수를 호출하는 구성 요소 간에 전달되는 구성 요소 내 함수가 엉망입니다. 그리고...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.