Skip to content

Instantly share code, notes, and snippets.

@aszeszo
Created July 16, 2013 16:01
Show Gist options
  • Select an option

  • Save aszeszo/6010065 to your computer and use it in GitHub Desktop.

Select an option

Save aszeszo/6010065 to your computer and use it in GitHub Desktop.
Command to get some info about stuck qemu instances on SmartOS hosts. mdb magic courtesy of @rmustacc
#!/bin/bash
if [[ -z $1 ]]; then
echo Usage: $0 zone-uuid
exit 1
fi
LOG=/tmp/kvcpu_ringbuf.log.$$
set -e
ZONE_NAME=$1
KVM_PID=$(pgrep -z $ZONE_NAME -f qemu-system-x86_64)
KVM_T=$(echo "::walk kvm | ::printf \"0x%x %d\n\" kvm_t . kvm_pid" | mdb -k | nawk -v pid=$KVM_PID '$2 == pid { print $1 }')
KVM_VCPUS=$(echo $KVM_T::print kvm_t vcpus | mdb -k | sed 's/.*\[\ //;s/\ 0,//g;s/...\ \]//;s/,//g')
echo "# pgrep -z $ZONE_NAME -f qemu-system-x86_64" >$LOG
pgrep -z $ZONE_NAME -f qemu-system-x86_64 >>$LOG
echo "" >> $LOG
echo "# echo \"::walk kvm | ::printf \\\"0x%x %d\n\\\" kvm_t . kvm_pid\" | mdb -k" >> $LOG
echo "::walk kvm | ::printf \"0x%x %d\n\" kvm_t . kvm_pid" | mdb -k >> $LOG
echo "" >> $LOG
echo "# echo $KVM_T::print kvm_t vcpus | mdb -k" >> $LOG
echo $KVM_T::print kvm_t vcpus | mdb -k >> $LOG
echo "" >> $LOG
printf "\n# for i in $(echo $KVM_VCPUS | nawk '{ print $1, $2, $3 }') ...\n" >> $LOG
for i in $KVM_VCPUS; do
printf "\n:: $i ::\n" >> $LOG
echo "$i::print kvm_vcpu_t kvcpu_ringbuf | ::walk kvm_ringbuf_entry | ::kvm_ringbuf_entry" | mdb -k >>$LOG
done
echo Output can be found in $LOG. Paste it in \#smartos, mailing list, etc.
echo less $LOG
echo cat $LOG
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment