3 # Launcher for xseg configurations
5 NI_SAVED=${NONINTERACTIVE}
6 export NONINTERACTIVE=1
8 export NONINTERACTIVE=${NI_SAVED}
10 function pretty_print {
11 echo "======================="
13 echo "======================="
21 function parse_config {
22 [ -e ~/.xsegrc ] && source ~/.xsegrc
24 [ -z "${HOSTNAME}" ] && HOSTNAME=`hostname`
25 [ -z "${XSEG_HOME}" ] && XSEG_HOME="/root/archip/xseg"
26 [ -z "${MODULES_DIR}" ] && MODULES_DIR="${XSEG_HOME}/lib/kernel"
27 #type:name:nr_ports:nr_requests:request_size:extra_size:page_shift
28 [ -z "${SPEC}" ] && SPEC="segdev:xsegbd:4:1024:12"
29 [ -z "${REQS}" ] && REQS=512
30 [ -z "${PORTS}" ] && PORTS=16
31 [ -z "${IMAGES}" ] && IMAGES="/srv/archip/images"
32 [ -z "${XSEG_LOGS}" ] && BLOCKD_LOGS="/srv/archip/logs"
33 [ -z "${DEVICE_PREFIX}" ] && DEVICE_PREFIX="/dev/xsegbd"
34 [ -z "${XSEGBD_SYSFS}" ] && XSEGBD_SYSFS="/sys/bus/xsegbd"
35 [ -z "${CHRDEV_NAME}" ] && CHRDEV_NAME=/dev/`cat /proc/devices | grep segdev | awk '{print $2}'`
36 [ "${CHRDEV_NAME}" = "/dev/" ] && CHRDEV_NAME="/dev/segdev"
37 [ -z "${CHRDEV_MAJOR}" ] && CHRDEV_MAJOR=`cat /proc/devices | grep segdev | awk '{print $1}'`
38 [ -z "${CHRDEV_MAJOR}" ] && CHRDEV_MAJOR=60
39 [ -z "${NR_OPS}" ] && NR_OPS=16
42 function unload_module {
47 unload_module "xsegbd"
48 rm "${CHRDEV_NAME}" || true
49 unload_module "xseg_segdev"
50 unload_module "xseg_pthread"
51 unload_module "xseg_posix"
52 unload_module "segdev"
56 function load_module {
57 (lsmod | grep "$1" > /dev/null) || insmod "${MODULES_DIR}/$1.ko" "$2" || exit 1
61 ls "${CHRDEV_NAME}" &> /dev/null || \
62 mknod "${CHRDEV_NAME}" c "${CHRDEV_MAJOR}" 0 || exit 1
68 load_module "xseg_posix"
69 load_module "xseg_pthread"
70 load_module "xseg_segdev"
72 "${XSEG_HOME}/peers/user/xseg" "${SPEC}" create
73 load_module "xsegbd" "spec=$SPEC"
76 # spawn_filed - Spawn a filed instance
78 # @param $1 root directory
81 function spawn_filed {
82 "${XSEG_HOME}/peers/user/filed" "$1" -p "$2" -g "${SPEC}" -n ${NR_OPS} -v &> "${XSEG_LOGS}/filed-${HOSTNAME}" &
85 # map_volume - Map a volume to an xsegbd device
87 # @param $1 target/volume name
91 echo "$1 $2:$3:${REQS}" > "${XSEGBD_SYSFS}/add" || exit 1
94 # unmap_device - Unmap an xsegbd device/volume
96 # @param $1 xsegbd device id
97 function unmap_device {
98 echo "$1" > "${XSEGBD_SYSFS}/remove" || exit 1
102 echo "Usage: ./launch [list | <configuration> [start | stop] | insmod | rmmod]"
105 if [ -n "$NONINTERACTIVE" ]; then
113 echo "filed [start|stop]"
127 echo "HOSTNAME=${HOSTNAME}"
128 echo "XSEG_HOME=${XSEG_HOME}"
129 echo "MODULES_DIR=${MODULES_DIR}"
132 echo "PORTS=${PORTS}"
133 echo "IMAGES=${IMAGES}"
134 echo "XSEG_LOGS=${XSEG_LOGS}"
135 echo "DEVICE_PREFIX=${DEVICE_PREFIX}"
136 echo "XSEGBD_SYSFS=${XSEGBD_SYSFS}"
137 echo "CHRDEV_NAME=${CHRDEV_NAME}"
138 echo "CHRDEV_MAJOR=${CHRDEV_MAJOR}"
139 echo "NR_OPS=${NR_OPS}"
146 spawn_filed ${IMAGES} 1
147 # map_volume xsegvol 0 1
150 pkill -f peers/user/filed