Server BMCs can need to be rebooted every so often
utcc.utoronto.ca
utcc.utoronto.ca
However, as this fleet was used for computation, after a while they noticed that whenever the BMC stopped working, performance of the system increased by almost 10% or so. Definitely a non-neglible amount. So they kept the machines running in the broken BMC state for as much as possible.
In a datacenter the odds of anyone noticing that the fans are always on high is practically nil, unless you are specifically monitoring fan RPM. Most folks don't bother, as what you are actually interested in is temperature.
It took us a while to identify the issue and all systems were running fine, but we had to shut down many racks to avoid the temperature to rise too high.
Hardware arrived a day or two late, got it unpacked and carted upstairs. Spent a few days installing it (had to build a deployment environment on my Mac in a VM because the servers had no CDROM drive, only NetBoot and USB; our centralised imaging system hadn't been built with "installs outside of core DC network" in mind).
Discovered that the machines had been ordered with iDRACs, not DRACs. Damn things did not work until the box was booted into Linux and a driver to interface/activate the board was loaded. This, of course, worked wonderfully when the kernel locked up with a panic.
The machines were being used to test custom kernel modifications. Panics and lockups were common. Every time it happened, the engineers in the US had to ask "smart hands" to go reset the machine in the cage.
Experiment was a success though. Turned into the foundation for how a very large edge network was built.
This is one of those things that I'd probably be willing to spend a ton of time analysing to find the root cause if I could. Dump the memory image, debug the code, and figure out why it's just that (and possibly other) keys. My guess just from the description is that a bitflip happened exactly to the entry of a character map translation table or similar.
I suspect it is some kind of console and raw keycode mismatch with the remote ui, maybe via the browser.
Recent BMC firmwares have openbmc under the hood, with the industry using it as a base for further development or customisation.
Is there a modular standard for BMCs?
- runbmc (https://www.opencompute.org/documents/ocp-runbmc-daughterboard-card-design-specification-v1-4-1-pdf)
- DC-SCM https://www.opencompute.org/documents/ocp-dc-scm-spec-rev-1-0-pdf
I have only glanced the surface of these specs.BMC security is what keeps me up at night. Firmware software quality is low, and often not up to date. I think openbmc does a good job in both respects.
Incidentally, at a previous gig, the software that handled issuing BMC commands had a BMC reboot as the first step in any script it ran.
Meanwhile competitor systems all have dedicated ports out of box. SuperMicro does have a paid "full unlock" for their BMC, but the only thing it does is add bios updates and such. All the core normal management functionality is there by default. It also only costs $30.
Granted HPs had other irritations like really wonky proprietary fan control (heck, proprietary fan cables too) that would mysteriously fail to function with different flavors of the same OS, and couldn't be overridden from the BMC (then what's the point!?). Also they were slow with EPYC options when that's what a lot of us really wanted to be switching for, the performance and value propositions were getting really good vs Intel who were also jerks.
Like lots of big players the experience may get different if you're buying hundreds to thousands or more units and have a dedicated account manager who takes care of all this for you etc etc. But x86-based servers is a pretty damn competitive market and at some point one has to stop and ask why hours are being burned futzing with stuff when literally the entire basic point of getting "server class" hardware with remote management functionality is to save man hours by NOT having to futz. So yeah there's a little rant I didn't even know I still had in me years later :). HP you silly goofs.
In this world, the legacy vendors like Dell and HP feel like they have to differentiate their hardware somehow, or they lose all the margin. So they'll charge you for all those "value-add" things like KVM or OOB Firmware Updates, because they can't make money on the machines themselves anymore.
The irony is all that extra garbage they add to their servers is exactly the opposite of what you want at high scale and really only serves the "enterprise" market that tends to deploy VMware and hand-manage servers and need point-and-click stuff since there's no incentive to write software to manage small environments like that.
Kind of depends which generation of servers. I had worked with a lot of x9 and x10 (xeon e-2600v1-4) which was alright, as long as you don't mind outdated java (well the newest x10 bmcs do html5 consoles too, IIRC); but I recently started renting an x8 server personally, and it's worse... My favorite is when serial over lan just stops responding when you go from console redirection to os opened serial port (and back)... real helpful for inputting disk encryption passphrases. Oh well, I'm renting this server because it's cheap, it's also 10+ years old, and it works enough.
I guess after lots of problems with expensive "high end" fancy stuff like HPE's and co I kind of felt resigned that all BMC/IPMI was kind of crap, and at least with SM's I felt less obviously squeezed. Like I said math will all be different for high end stuff and big herds. But neither Dell or HPE's struck me as "oh yeah that's worth an extra $300 on every single last server!"
Turns out, you can actually install X9 IPMI firmware on X8 boards as the platform files are still shipped. Might be worth checking out, if this improves things for you. It did for me.
Check out https://github.com/devicenull/ipmi_firmware_tools for unpacking (and repacking) the SuperMicro firmware. The developer just merged my patches making it work with some of the X8 boards. As long as your board is listed in /etc/defaults of the IPMI tree you should be good.
[1]: all things i have personal experience with:
- chassis bootdev pxe => doesn't do that, just reboots to normal OS
- chassis power off => doesn't do it (oh, here's an ipmi raw command you can use for this BMC version. NO!)
- dhcp server sends an option in an offer it doesn't understand, drops the offer, no IP at all.
- gets scanned by auditor-checkbox-as-a-service (qualys), locks up and sends the host CPU into 100% and locks up that up too.
- Not supporting IPv6 properly (if there's a place to start deploying IPv6 it's BMCs), i.e. uses SLAAC properly, but doesn't use the gateway from the RA so you actually can't use it from outside it's own segment - needs a firmware update to fix but uhh, we didn't dual-stack the BMC network because the whole point is to get that IP space back.
We had to write a test suite for vendors to run against their BMC and validate these things and you were disqualified if you failed.
The device in question didn't had NTP so to get accurate BMC logs timing it had to be synced from host OS
BMC is them fucking up the watchdog implementation, that worked on wall time.
Which means if you changed time in-between OS sending watchdog ping and BMC checking for timeout, you got system reboot.
But it was intermittent enough that you might set the cron to update the BMC clock (because you want accurate time on it for log correlation) and be lucky enough time to not connect to the cause when it finally happens.
Also we generally observed that BMCs got better, 10 years server were lucky if it was working and not crashing every few weeks (all mostly on IBM gear), to the point we had to stop alerting on that, and it was unreliable as method for OOB access, so far anything newer than few years have been fine. Althought I have no idea how you make modern hardware take minutes to return list of sensors(I'm looking at you Lenovo)
And the worst are those that use java applets or webstart and require a ancient java version.
I recently set up a supermicro system and spent a whole day just trying to figure out what to install to get the stupid ancient Java crap to load so I could mount an ISO.
I've seen multiple vendors with problematic code that didn't work with newer Java versions.
This is by no means meant to bash Java. Some non-Java BMCs can be horrible as well (e.g. require many TCP ports in a firewall/tunnel unfriendly way or require SSH with old algorithms that are no longer enabled by default, or telnet..)
1. Downloads the data from the IPMI interface
2. Modifies the files to run locally
3. Writes out a Java configuration with weak security settings so that TLS works with the deprecated ciphers.
4. Fires off a socat instance to redirect the localhost ports to the remote IPMI device.
5. Starts appletviewer locally.
Great fun writing that. Thank god we decomissioned the last X7 based storage appliances a while ago...
Sysadmin for 15 years here though, Java was always a problem. The version wasn't always the worst bit, but it was always an exercise in frustration.
Mostly security controls to blame, but I have had so many issues across so many systems that I cannot stand by and let you claim this is FUD about Java.
the .NET applets are also a problem (because who has a compatible IE version?), but they worked more consistently than the Java ones back in the day.
The HTML5 ones are the only ones that seem to work consistently; but that could be biased as HTML5 is much newer, so BMCs implementing that might be updated with more regularity. (or be more modern hardware)
Just annoying.
One of my most useful tools was a thumb drive full of old internet explorer, firefox, and Java installers.
The 50m ethernet cable (nicknamed BFC - big fucking cable) also deserves an honorable mention.
Combination of those two generally removes the need for any of the advanced features that required custom clients or even a Web browser
My favorite is some vendors using COM1 and some using COM2 so you have no idea which it is ahead of time.
And then there are people that just port-forward BMC ports to the internet as cheap remote KVM...
That network should have no routing to the Internet and no production traffic, just BMC management.
When Intel ME shares the NIC used for the OS traffic - that is far harder to secure.
And no single computer with NICs on both the BMC network and one that can access the internet, hopefully.
All it takes is one single mistake.
IMO it's wrong - It's terrible product design that servers have network ports that will cause catastrophic failures unless carefully only connected to a special expertly secured un-network for fragile things.
An idea I have floating around in the back of my head is to just use a raspberry pi as a bmc on consumer grade hardware, I am sure it would turn out more complicated than this, but basically just hook the power button, i2c, and other headers to the pi's gpio. now you have a bmc that runs an off the shelf os.
[1]https://forums.unraid.net/topic/97460-selfmade-ipmibmc-with-...
You’re looking for one of the following projects:
Restart your management devices!
Another issue was a firmware bug on the Sun Netra X1 where rebooting or updating the lom would result in a reset of the host. Not fun with UFS without logging enabled.
We finally got serial servers out of that one, though!
I'd mostly agree with you, but this isn't always as simple as it may seem to "just reboot it" and there can be subtle differences between what you're exercising with your rolling reboots and what actually happens in a real complete power loss scenario. Plenty of stuff can break and you'll have no idea until you're trying to get stuff back up after a power loss event and you're up a creek.
* [ASRock BMC] The BMC firmware updater sometimes causes the NICs to get stuck in a bad state where every NIC has the same MAC address. This can be resolved via a proprietary UEFI application for reflashing the correct MAC address.
* [Dell iDRAC] Local authentication randomly stops working due to some tmpfs running out of space (can see the message if there's an active SSH session). IPMI/SSH occasionally works well enough to issue a reboot command, but when it doesn't, sending the BMC reset comand to /dev/ipmi0 in the server OS is needed.
* [Dell iDRAC] Setting an asset tag via the IPMI DCMI command has a 15 character limit. If that limit is exceeded, the success response is still returned, but when querying the asset tag, random junk data longer than 15 bytes is returned. If I had to guess, I bet there was an sprintf() call somewhere in there :). This was fixed in newer iDRAC firmware. Now, it stores the last 15 bytes of the asset tag instead of returning an error.
* [Lenovo IMM] The shift or alt key sometimes gets stuck on the emulated keyboard without having used the remote console since the last BMC reboot. Can't be fixed by repressing the button, neither physically nor via the virtual keyboard. BMC reboot required.
* [Lenovo IMM] Booting the UEFI shell sometimes crashes both the system and the BMC.
* [Lenovo IMM] BMC and BIOS update sometimes claims to have succeeded, but didn't actually take effect.
* [Lenovo IMM] Rebooting the BMC via the web UI or SSH sometimes doesn't work. Making 50+ simultaneous requests to the login page is enough to crash and restart some component that allows the BMC reboot command to work again though.
* [Supermicro BMC] The BIOS update sometimes doesn't fully upload, but claims that it did. It still parses the header, so the new/old version fields look correct. Sometimes, rebooting the BMC and reflashing works. Other times, only a USB drive + USB keyboard + a recovery key combination fixes it.
* [Supermicro BMC] The remote console sometimes completely fails to initialize (though I've only seen this on servers where the BMC uptime was measured in years). Not just a blank screen. The GPU device was just... gone.
* [Supermicro BMC] Various IPMI commands just lie about successful execution. For example, setting the asset tag via the FRU succeeds, but has no effect. Those commands require toggling a write lock bit via an OEM command, which I only found by reverse engineering. Other commands, like the set asset tag DCMI command, leave the data in a corrupted state until a BMC reboot.
And finally, not really a bug, but an interesting thing about the Lenovo IMM. Instead of exposing information via standard IPMI features, like FRU or DCMI commands, the Lenovo IMM implements a virtual filesystem over OEM IPMI commands. These are commands, like (my naming) open_ro, open_rw, get_size, read, write, and close. They sometimes fail too. I think I ended up making all commands retry up to 10 times with a 5 second delay. At least Lenovo gets error return values right :).
To query the asset tag, you have to open_ro the "config.efi" file, get the size (because read-until-EOF doesn't always work), do a read loop, and close the file. Then, you have the XML data from the file you can query (20 seconds later due to retries). (If anyone ever needs to deal with the Lenovo IMM programmatically, I'd highly recommend the pyghmi [1] library. Wish I knew about it before reverse engineering their proprietary commands...)
Or uploads it to the WebGUI but balks with a different errors. Flash with SUM from SuperDoctor
SET IP=192.168.128.20
SET USER=ADMIN
SET PASS=ADMIN
.\SUM -i %IP% -u %USER% -p %PASS% -c UpdateBios --file E:\Shares\Temp\x10sle-f\bios.bin --force_update --reboot
.\SUM -i %IP% -u %USER% -p %PASS% -c GetBmcInfo
* [Supermicro BMC] BMC on a dedictated Ethernet port get moved to the Shared LAN port on the blade reboot. Which also means what if did shutdown the machine then you no longer can power up it remotely.we have Supermicro server with serial flashed to be something like 12345678 which means it probably doesn't work reliably on their production line either lmao
AFAIK larger vendors like Dell and HP have their own thing.
The latest iDRACs (with the fancy blue GUI) work a little better. I have no numbers to back all that, its just a feeling, maybe the problems are yet to come.
Given the Dell pricing, they should be better. But i've heard from collegues that ILO and others are not much better either.
I'm doing a few timing sensitive projects involving hardware timestamping in the NICs. Does this mess with say timing variability? I've disabled the BMCs out of paranoia but I don't know the topology inside.
Which happens during reboot meaning you won't catch the boot screen on KVM if you use shared nic
I also remember a long series of machines (Supermicro I think) whose BMCs would stop responding after a few weeks if there was too much traffic on the network.
Also those BMC that hijack silently eth0, breaking your server's bonded connections, when the main BNC connector get disconnected for some reason...
We had IDSes that were happy, up, network interface counts were climbing, but they were STONE DEAF to the network traffic we were actually interested in.
Such a silly comment. If your BMC is updated then it will use a recent version of Linux.
You can install an update for a router and end up with an absolutely ancient Linux kernel on it.