Sunday, March 6, 2011

VM - Speeding Up A Linux Guest

Recently I was having an issue with a my CentOS guest running slowly in VirtualBox. Evidently this has something to do with the interrupt checking interval of the Linux system being at 1GHz.

To force the guest to use an interrupt check at only 100Hz, the divider=10 kernel option should be set.

Follow these steps:
  • Use the root account (su)
  • Edit the /boot/grub/grub.conf file
  • add "divider=10" to the end of the kernel line
Here is a sample of the modified grub.conf.
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.32.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.32.1.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10
initrd /initrd-2.6.18-194.32.1.el5.img
title CentOS (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10
initrd /initrd-2.6.18-194.el5.img

You can use cat /proc/cmdline in order to check if it took.
~ $ cat /proc/cmdline
ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10

Saturday, July 24, 2010

How to: 2 (or more) Router Networking

There are a lot of great places online to read about subnets and routing. It's worth a quick read, and the information is consistently repeated everywhere. There isn't however a whole lot on how to set up a network with two routers or on using subnets.

Here is what I figured out after a long night of toying with things:
  • If you want to use two routers in a network, just connect the WAN port of the second router into a LAN port on the first one.
Simple right? I can't believe it took me so long to figure this simple concept out. But before you go just plugging routers into one another, you have to take some initial steps to ensure they play nicely. Here they are:
  • Make sure your routers are using different subnets/assigning different (unique) IP ranges.
    (Mine use 192.168.1.1 and 192.168.0.1 with subnet mask 255.255.255.0)
  • Make sure you understand subnet masking to some small extent.
  • Draw up how you want your network to behave/look before you get started. This is often a good idea for larger more complex networks.
  • Make sure there is no contention between wireless and other network settings. (i.e. turn off or reconfigure wireless to be different across the hardware.)
  • Assign all secondary hardware with static IP's in the range of the primary. (Obviously don't use an IP already in use like 192.168.1.1)
Once you've set up two routers to map hosts on two different subnets, it's time to link them together. Plug the WAN port of your secondary router (Mine was subnet 0) into a LAN port of your primary (subnet 1). The network on your secondary router should now be able to reach the internet and also network hosts on your primary router.

However, if you want the hosts on subnet 1 to see subnet 0 then you need to set up a small and simple routing rule on the primary router. The routing rule looks something like this:

DestinationSubnet MaskGateway
192.168.0.1255.255.255.0192.168.1.2

Where 192.168.1.2 is the external (static) IP of subnet 0, the secondary router. The internal IP of subnet 0 is still 192.168.0.1. And with this new routing rule you can now access it from the primary network.

Happy Routing!

Monday, May 17, 2010

JavaScript Ping

After doing mountains of research and testing on the subject, I've come to the unfortunate conclusion that a Client-Side JavaScript Ping program is impossible to do.

I thought that maybe I'd be able to monkey around in some clever way of using page-loads and time measuring, but it doesn't work. Unfortunately the event handler for onLoad doesn't work exactly how you would expect thus the getTime() function doesn't actually time the page load.

I thought I could work around this by opening new windows, and time it with the window.onLoad event, but this didn't work out either.

Curse you JavaScript! This is something that would be very beneficial for better web software! I suppose I may be able to implement this in VBScript instead. There will be news if I have any success.

Sunday, May 2, 2010

DNS Issue

I recently solved a problem with my ISP's DNS lookup. Google Chrome was waiting forever on loading pages that weren't already DNS cached. I could tell this because they spent a long time on the "Resolving Host" phase, then they would report back with "Page Unavailable".

Further diagnosis included using cmd tools. I used `nslookup` in order to force responses from my local ISP's DNS. While the responses didn't usually take more than a few seconds, there was definitely a problem somewhere. I then changed my DNS in windows to use the Google Public DNS. This seems to have solved my issue.

While I'm aware that DNS lookup on the Google servers would probably take slightly longer than my ISP's, Google doesn't have the problem of timing out on ever uncached request. I've been using Google Public DNS for 4 days now, and everything is just awesome.

Google Public DNS Servers are:
  • 8.8.8.8
  • 8.8.4.4