How Browsers Work: Behind the scenes of modern web browsers
An excellent resource for you to know before you code.
Visit http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/ for in-depth tutorial.
Get Free Updates
Subscribe NowEnStratus: A Service to Manage Your Cloud Infrastructure by @alexwilliams http://t.co/duL1uGbugl
— Ani (@animeshdas) September 15, 2013
Distributing Your Blog Content: The Best Auto-Posting Services http://t.co/vaRJQfqdPn
— Ani (@animeshdas) September 15, 2013
dmidecode -s system-manufacturerthe output should be something
"Redhat"or
"VMWare"or
"XEN"or
"Citrix"
dmidecode | grep -i "vm"
Product Name: KVM(which means running KVM Virtualization)
Product Name: HVM domU(which means running XEN Virtualization)
dmesg | grep -i virtual
VMware vmxnet virtual NIC driver
Vendor: VMware Model: Virtual disk Rev: 1.0
hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
skipping (on a virtual guest)
[ 0.000000] Booting paravirtualized kernel on KVM
# dmesg | grep -i virtual
hda: Virtual HD, ATA DISK drive
hdc: Virtual CD, ATAPI CD/DVD-ROM drive
# dmesg | grep -i xen
Xen virtual console successfully installed as tty1
# dmesg
(returns no output)
# cat /var/log/dmesg
(returns no output)
# ls -al /proc/vz
veinfo veinfo_redir veredir vestat vzaquota vzdata
# dmidecode | egrep -i 'manufacturer|product'
Manufacturer: VMware, Inc.
Product Name: VMware Virtual Platform
# dmidecode | egrep -i 'manufacturer|product'
Manufacturer: Microsoft Corporation
Product Name: Virtual Machine
# dmidecode | egrep -i 'vendor'
Vendor: QEMU
# dmidecode
/dev/mem: Permission denied
# dmidecode | grep -i domU
Product Name: HVM domU
# cat /proc/ide/hd*/model
VMware Virtual IDE CDROM Drive
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: VMware Model: Virtual disk Rev: 1.0
Type: Direct-Access ANSI SCSI revision: 02
# cat /proc/ide/hd*/model
Virtual HD
Virtual CD
# cat /proc/ide/hd*/model
QEMU HARDDISK
QEMU DVD-ROM
# ls -al /dev/vzfs
b-----x--- 1 root root 0, 19 2009-04-06 15:04 /dev/vzfs
#!/bin/bash -
# @configure_input@
# Copyright (C) 2008-2011 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# 'virt-what' tries to detect the type of virtualization being
# used (or none at all if we're running on bare-metal). It prints
# out one of more lines each being a 'fact' about the virtualization.
#
# Please see also the manual page virt-what(1).
# This script should be run as root.
#
# The following resources were useful in writing this script:
# . http://www.dmo.ca/blog/20080530151107
VERSION="@VERSION@"
function fail {
echo "virt-what: $1"
exit 1
}
function usage {
echo "virt-what [options]"
echo "Options:"
echo " --help Display this help"
echo " --version Display version and exit"
exit 0
}
# Handle the command line arguments, if any.
TEMP=`getopt -o v --long help --long version --long test-root: -n 'virt-what' -- "$@"`
if [ $? != 0 ]; then exit 1; fi
eval set -- "$TEMP"
while true; do
case "$1" in
--help) usage ;;
--test-root)
# Deliberately undocumented: used for 'make check'.
root="$2"
shift 2
;;
-v|--version) echo $VERSION; exit 0 ;;
--) shift; break ;;
*) fail "internal error ($1)" ;;
esac
done
# Add /sbin and /usr/sbin to the path so we can find system
# binaries like dmicode.
# Add /usr/libexec to the path so we can find the helper binary.
prefix=@prefix@
exec_prefix=@exec_prefix@
PATH=$root@libexecdir@:$root/sbin:$root/usr/sbin:$PATH
# Check we're running as root.
uid=`id -u`
if [ "$uid" != 0 ]; then
fail "this script must be run as root"
fi
# Many fullvirt hypervisors give an indication through CPUID. Use the
# helper program to get this information.
cpuid=`virt-what-cpuid-helper`
# Check for various products in the BIOS information.
# Note that dmidecode doesn't exist on non-PC architectures. On these,
# this will return an error which is ignored (error message redirected
# into $dmi variable).
dmi=`LANG=C dmidecode 2>&1`
# Architecture.
# Note for the purpose of testing, we only call uname with -p option.
arch=`uname -p`
# Check for VMware.
# cpuid check added by Chetan Loke.
if [ "$cpuid" = "VMwareVMware" ]; then
echo vmware
elif echo "$dmi" | grep -q 'Manufacturer: VMware'; then
echo vmware
fi
# Check for Hyper-V.
# http://blogs.msdn.com/b/sqlosteam/archive/2010/10/30/is-this-real-the-metaphysics-of-hardware-virtualization.aspx
if [ "$cpuid" = "Microsoft Hv" ]; then
echo hyperv
fi
# Check for VirtualPC.
# The negative check for cpuid is to distinguish this from Hyper-V
# which also has the same manufacturer string in the SM-BIOS data.
if [ "$cpuid" != "Microsoft Hv" ] &&
echo "$dmi" | grep -q 'Manufacturer: Microsoft Corporation'; then
echo virtualpc
fi
# Check for VirtualBox.
# Added by Laurent Léonard.
if echo "$dmi" | grep -q 'Manufacturer: innotek GmbH'; then
echo virtualbox
fi
# Check for OpenVZ / Virtuozzo.
# Added by Evgeniy Sokolov.
# /proc/vz - always exists if OpenVZ kernel is running (inside and outside
# container)
# /proc/bc - exists on node, but not inside container.
if [ -d $root/proc/vz -a ! -d $root/proc/bc ]; then
echo openvz
fi
# Check for Linux-VServer
if cat $root/proc/self/status | grep -q "VxID: [0-9]*"; then
echo linux_vserver
fi
# Check for UML.
# Added by Laurent Léonard.
if grep -q 'UML' $root/proc/cpuinfo; then
echo uml
fi
# Check for IBM PowerVM Lx86 Linux/x86 emulator.
if grep -q '^vendor_id.*PowerVM Lx86' $root/proc/cpuinfo; then
echo powervm_lx86
fi
# Check for Hitachi Virtualization Manager (HVM) Virtage logical partitioning.
if echo "$dmi" | grep -q 'Manufacturer.*HITACHI' &&
echo "$dmi" | grep -q 'Product.*HVM LPAR'; then
echo virtage
fi
# Check for IBM SystemZ.
if grep -q '^vendor_id.*IBM/S390' $root/proc/cpuinfo; then
echo ibm_systemz
if [ -f $root/proc/sysinfo ]; then
if grep -q 'VM.*Control Program.*z/VM' $root/proc/sysinfo; then
echo ibm_systemz-zvm
elif grep -q '^LPAR' $root/proc/sysinfo; then
echo ibm_systemz-lpar
else
# This is unlikely to be correct.
echo ibm_systemz-direct
fi
fi
fi
# Check for Parallels.
if echo "$dmi" | grep -q 'Vendor: Parallels'; then
echo parallels
skip_qemu_kvm=1
fi
# Check for Xen.
if [ "$cpuid" = "XenVMMXenVMM" ]; then
echo xen; echo xen-hvm
skip_qemu_kvm=1
elif [ -f $root/proc/xen/capabilities ]; then
echo xen
if grep -q "control_d" $root/proc/xen/capabilities; then
echo xen-dom0
else
echo xen-domU
fi
skip_qemu_kvm=1
elif [ -f $root/sys/hypervisor/type ] &&
grep -q "xen" $root/sys/hypervisor/type; then
# Ordinary kernel with pv_ops. There does not seem to be
# enough information at present to tell whether this is dom0
# or domU. XXX
echo xen
elif [ "$arch" = "ia64" ]; then
if [ -d $root/sys/bus/xen -a ! -d $root/sys/bus/xen-backend ]; then
# PV-on-HVM drivers installed in a Xen guest.
echo xen
echo xen-hvm
else
# There is no virt leaf on IA64 HVM. This is a last-ditch
# attempt to detect something is virtualized by using a
# timing attack.
virt-what-ia64-xen-rdtsc-test > /dev/null 2>&1
case "$?" in
0) ;; # not virtual
1) # Could be some sort of virt, or could just be a bit slow.
echo virt
esac
fi
fi
# Check for QEMU/KVM.
#
# Parallels exports KVMKVMKVM leaf, so skip this test if we've already
# seen that it's Parallels. Xen uses QEMU as the device model, so
# skip this test if we know it is Xen.
if [ ! "$skip_qemu_kvm" ]; then
if [ "$cpuid" = "KVMKVMKVM" ]; then
echo kvm
else
# XXX This is known to fail for qemu with the explicit -cpu
# option, since /proc/cpuinfo will not contain the QEMU
# string. The long term fix for this would be to export
# another CPUID leaf for non-accelerated qemu.
if grep -q 'QEMU' $root/proc/cpuinfo; then
echo qemu
fi
fi
fi