A lot of credit appears to go to majbthrd, who came up with a reliable way of reproducing the hangs on mipsbe:
http://forum.mikrotik.com/viewtopic.php?f=15&t=58936
I find it interesting, though, that in that thread, RB2011 are talked about as if they don't have any problems with MetaROUTER, even though I can easily reproduce the problem myself on my RB2011L-IN running 5.24.
I tried 5.25rc1, and I can confirm that even on the RB2011L-IN, there are no more freezes! Awesome! Also, I'll have to run some tests, but I think CPU utilization as shown by the host (/system resource print) when the guests are busy is more accurate now. In the past, I could load down the guests with tasks that would bring the system to a crawl, but CPU utilization would not be showing anything near 100%.
However, I am still seeing the same bizarre problems with MikroTik's MetaFS. I don't know whether the bug is in the host or the guest code. Testing on my RB2011L-IN after several reboots of my Asterisk guest, I saw...
1) the contents of /usr/share completely disappear almost every time, shortly after bootup.
2) the contents of /usr/lib/asterisk/static-http disappear (and thus the Asterisk GUI was unable to find its files)
3) the contents of /etc/init.d disappear in the middle of bootup (so it did not complete booting properly)
And once, I was in /etc/init.d trying to change the file mode of one of the startup scripts (I wanted to prevent Asterisk from starting on next boot to test a theory I had), and although the files were listing, they could not be accessed; chmod told me "chmod: asterisk: Invalid argument". Worked fine after another reboot.
This almost never happens on my RB450G boards, *although* I have seen similar symptoms on an RB450G after using SCP to copy a large file over to the MetaROUTER guest (the file was larger than the amount of RAM I assigned to the guest, and 'top' showed that during the copy, all of either the page cache or the filesystem cache had been consumed). Whenever I did this, the guest would begin to act very...wonky, and similar things would occur (entire directories would disappear, trying to execute commands would result in a system hang or "Segmentation fault", and so on). This made me wonder if the problem was memory-related (after all, 450G has 256MB of memory and I always assign my Asterisk guest half of that), and that's why I wanted to prevent Asterisk from starting on boot-up on my 2011. What I found is that it does help to reduce the occurrence of the problem on the RB2011, but doesn't eliminate it completely (when /etc/init.d disappeared while init was in the middle of running through the boot-up scripts, it disappeared before it reached the Asterisk one, so Asterisk never even managed to start that time).
On the 450G, whenever I would copy a large file to it over the network, I would carefully watch the consumption of available RAM, and periodically issue an 'echo 3 > /proc/sys/vm/drop_caches' to free up any memory that could be freed. That did seem to help. Interestingly, on the 2011 board, when I do that, it almost immediately causes the guest to go sideways...from that moment on, executing any command will either hang the guest or produce "Segmentation fault" (the guest is still responsive, though...console prints typed characters, it responds to pings, etc., so it's not the normal "hanging" problem, which I really do think has finally been fixed for good). It must be a problem with the pagecache because I get the same behavior if I echo '1' instead of '3' (see
http://linux-mm.org/Drop_Caches).
Whatever is causing this (bug in Linux kernel in guest, bug in guest MetaFS driver, bug in RouterOS host), it's really annoying.
-- Nathan