All posts by John Goerzen

Review of VPSLink

Back in June, I wrote about my switch to VPSLink for my virtual private server (VPS) host.

Now it’s 6 months later, my initial contract is up, and it’s time to consider whether to renew it.

Overall, VPSLink has worked out reasonably well. I have their Link-4 plan, which provides 512MB RAM, 20GB of disk storage, and 500GB of bandwidth for $40/mo (or down to $33/mo if you pay for 12 months in advance).

Reliability and Uptime

VPSLink has been reasonably reliable. I wouldn’t say that they have been exceptionally reliable, though.

Some outages:

  • Back in July, the server was down for more than 8 hours. vpslink support blamed it on filesystem corruption; they rebooted, the system came up, FS went into readonly mode, so they went back down for fsck. I don’t know what FS they use.
  • In October, an outage of about 30-60 minutes that apparently was due to load problems on the host. The control panel also was broken during this time. Apparently there is a reboot queue, and the system can only reboot one customer’s VPS at a time, and everybody wanted to reboot. But the UI was not really designed for this situation and presented very confusing status messages.
  • In November, a kernel panic caused an outage of about 60 minutes.
  • Various other outages that were resolved fast enough that I never emailed them about it.

They have generally responded to support requests in a reasonable amount of time, and support has been approximately as helpful as I’d expect.

Overall, there’ve been a few issues but, aside from that 8-hour outage in July, nothing especially remarkable.

Automated Tools

VPSLink has a “control panel” where you can reboot, start, or stop your virtual machine. You can see how much bandwidth you’ve used in a month, your IPs, and billing information.

You can also create support requests and view the status of support requests there. You can also view all correspondence on a given ticket, and add new correspondence to it — a nice touch that’s useful if your email is down because your VPS is down.

The reboot/start/stop facility didn’t work during one outage, though.

Resources

The 20GB of disk space is nice to have, though I never used it all. No complaints there.

But the memory setup is rather strange. This may be because VPSLink is using OpenVZ instead of its more popular (and featureful) commercial counterpart Virtuozzo, or something such as Xen.

Those that have used OpenVZ/Virtuozzo know there is a /proc/user_beancounters file in the virtual environment that reports on the limits of resources allocated to your virtual server. VZ lets the server admins regulate the amount of resident RAM, swap, inodes, pending IP connections, amount of virtual RAM, etc, etc. About 3 dozen items in total.

Unlike some companies like JohnCompanies, VPSLink was not willing to make any adjustments to this file for me. For instance, my mail server may need more simultaneous open files than they have by default, but they wouldn’t work with me to make reasonable adjustments.

But the larger problem was with regard to RAM. This was particularly annoying. VPSLink does not permit any access to swap, so the 512MB is what you get. But tools like top show the entire memory allocation on the host, and are mostly useless in tracking down your own usage.

You can look at the privvmpages entry in /proc/user_beancounters to get an idea of your current usage, but that’s it. There is a script on their wiki that will turn this into a more useful number, but again, it’s not the most helpful.

The minute you try to allocate anything past 512MB, your processes start getting killed. According to /proc/user_beancounters, even though my system normally hovers around 70% of that 512MB allocated, I’ve had 290,567 instances where a process has been refused its request to allocate memory since the last reboot. Such instances usually cause a process to crash.

Other Virtuozzo companies like JohnCompanies will give you “burstable RAM”, so if others aren’t using their full RAM allocation at the moment that your machine goes over your regular limit, you can go over it to a certain extent. That was very effective at preventing crashes during times of higher than usual memory usage, and I never had trouble with this at JohnCompanies.

I’ve had a lot of trouble with VPSLink because of these hard, no-exceptions limits. Getting hit by the Google bot at the same time as the MSN bot could raise memory usage enough that processes would start getting killed. Depending on which process it is, it could take down cron, apache, the mail server, whatever. And there is no log of which processes die because of this.

In normal circumstances, this wouldn’t pose even a noticeable impact to a server; inactive bits could be swapped out, etc.

I am also suspicious of exactly how OpenVZ calculates memory usage. Since moving to a physical Linux box, my memory usage seems to be much lower than the privvmpages would seem to indicate, even though it’s running the exact same code.

So I had some outages on my server that were caused by OpenVZ memory limits, which didn’t get listed in the overall outages above.

This problem is the reason I’m leaving VPSLink.

Performance

Overall performance has been acceptable. The CPU speed appears to be reasonable and about as expected.

The disk performance has been more problematic, however. It tends to be rather slow. There have been times when I can type “ls” in a directory with about 10 files and it takes 5-10 seconds to respond. And I wasn’t even using “-l”.

Now that sort of thing is certainly the exception. But it makes databases — and websites that rely on databases — very slow.

The performance measurements over at RealMetrics also show VPSLink as being at the bottom of the pack for disk performance.

Overall

VPSLink is a reasonable value, and if monthly cost is important to you, probably a good choice. Don’t expect it to be spotless, though. I would call the overall experience pretty average. Nothing too spectacular in either direction in any respect.

The Haskell Blog Tutorial

The first installment of Mark C. Chu-Carroll’s Haskell tutorial series went up last week.

It begins this way:

Before diving in and starting to explain Haskell, I thought it would be good to take a moment and answer the most important question before we start:

Why should you want to learn Haskell?

It’s always surprised me how many people don’t ask questions like that.

Farther down:

So what makes Haskell so wonderful? Or, to ask the question in a slightly better way: what is so great about the pure functional programming model as exemplified by Haskell?

The answer is simple: glue.

Languages like Haskell have absolutely amazing support for modular development.

An interesting and though-provoking article, even for someone that’s been using Haskell for more than 2 years now. (Yikes, I had no idea it was that long)

You can also see all his posts on Haskell, which include a couple more installments.

Weather in Kansas

Here’s what it’s been doing:

2 days ago: high of 69
yesterday: daytime high of 23 plus “breezy” winds at 30MPH
today: forecasted high of 26, 3-7 inches of snow, winds at 25MPH, gusting to 35MPH

Yesterday, I drove to the doctor’s office and back to work, a drive of about 15 minutes. During that time, I encountered:

  • calm
  • thunder and lightning
  • freezing rain bad enough that my windshield almost froze over in less than 5 minutes
  • calm again
  • sleet

I’ve heard people from all over the country say, “if you don’t like our weather, wait 5 minutes.”

In Kansas, we really mean it.

Renovation: Weeks 19-22

It’s been a few weeks since my last house update.

I’ve posted some new photos of the project.

The new insulation has been sprayed. It’s a foam type of insulation that dries solid. It not only acts as an insulator, but also as a sealant, filling in little cracks that could let air in and out of the house. In some places it is up to 12 inches thick — mostly in the attic.

After that, work on the drywall began. By this point, it’s pretty much done and interior painting should be starting this week. After the painting, the next thing will be the floor restoration.

Concrete work got started last week. The porches are being re-built now, and in the photo below, you can see the forms starting to be in place for them.

So the appearance of the interior has changed dramatically over the past few weeks, mainly because there are now walls there.

Here’s the usual sample photo:

hpodder to be multithreaded… done right.

I’ll be hacking on my hpodder program this weekend. hpodder is a full-featured podcast aggregator that runs on the command line, and has many features over other command-line podcatchers like bashpodder, and even over GUI tools like iPodder.

I originally envisioned hpodder to be something that I’d cron up and run in the background. But I have tended to run it in the foreground more than in the background. Some others have too, and the requested hpodder feature is parallel downloads.

So I am working on that. I already have code working, in fact, that will parallelize both the hpodder update (downloading the feeds) and the hpodder download (downloading the actual episodes) commands.

Unlike ipodder, my code will make sure that no more than 1 thread will ever be downloading from a given server at a given time. ipodder had the terribly annoying habit of pointing all of its threads at a single server, thus pounding it while also providing little benefit for someone with a pipe fatter than the server’s.

Before all this multithreaded stuff could be written, I needed to write my own status bar code instead of just letting curl display its own status bar. (That wouldn’t work when there are 5 curls running at once)

I decided that I would write some generic status bar code, rather than something specific to hpodder. I took the apt-get status bar as an example, and whipped one up in Haskell and added it to my MissingH Haskell library.

But a status bar just begged for another feature: a generalized progress tracker. Something that could keep track of where a task (and its sub-tasks) are, calculate ETA, estimated time remaining, speed, etc. So I wrote that and made the status bar use it.

AND, a status bar begged for a generalized numeric formatter: something that could render 512 as 512, 2048 as 2K, 1048576 as 1M, etc. So I wrote that, and it’s general enough that it can render into both SI and “binary” units by default (and others that users may want).

Finally, I wrote a function to take a number of seconds and render it in something friendly like 23m5s like apt uses, and shoved that in MissingH as well.

So now hpodder will have a status bar, and any other Haskell program can use the same status bar code in minutes because it’s all generic. Or if someone just needs to render a number in megabytes, they can do that.

I really enjoy it when a program needs a solution that is generic enough to put in a larger library. I try to put as much of my Haskell code in MissingH as I can, so as to make it useful to others (and my other programs).

Desktop Linux: NFS or something else?

Recently, I asked for opinions on desktop Linux. Thanks very much to those that replied. I’ve set up an old laptop as an experiment. I’m using Debian, Gnome, and Systemimager. It’s been an interesting project (especially getting SystemImager and a splash screen program to do what I want).

I’d like for my desktop machines to mount /home over the network. I could use NFS, but of course that has all the well-known security risks. Is there a better network filesystem that is easy to use, fast, and more secure than NFS?

Desktop Linux Opinions?

I’m brainstorming about ways of setting up Linux desktops machines for people used to Window users on a LAN. It could be any size of LAN.

I’d like people to be able to sit down at any Linux machine on the LAN and log in — probably use a LDAP directory for that, and NFS-mounted home directories. I wouldn’t want to NFS-mount the entire thing for performance reasons.

So, some of the things I’m thinking about are:

  • Desktop environment: KDE or Gnome? Which would give Windows users all the tools they’d want? Which would they feel most at home with? I’m thinking it’s KDE, but Gnome has a more polished “feel” too it.
  • Image management. How could the desktops be updated? Just rsync everything except fstab over? Can we actually have a single system image? Is XOrg powerful enough to just recognize hardware at boot and Do The Right Thing? Can we build a unified initrd somehow?
  • Distribution. Debian, Ubuntu, Kubuntu? Do the Ubuntus bring anything to the table, if we take as a given that an experienced Debian admin is managing all this?
  • Laptops. What do we do about the home directories there? Some sort of automated rsync thingy?
  • Installation. FAI? Or some homegrown thing that just boots up, partitions, and runs rsync?

Renovation: Week 18

Well, it’s been awhile since I’ve posted a renovation update. Things have been going on, but not much that is all that impressive with photos.

We’ve had electrical work going on. The new water and propane lines have been trenched in. New ductwork is in progress. New electrical and phone service will be trenched in this week or next.

In the past week, the new siding has started going up, and the sheetrock is supposed to start going up on Monday.

So there is some quite visible change going on now! Click here for the pictures.