In a cabinet in a top secret location somewhere in the Pacific Northwest, I’ve got two Dell PowerEdge 2950s, each with four 2GB DIMMs installed. I purchased four additional 4GB DIMMs to upgrade the memory in both to a total of 16GB, and installed them in the servers last night, so that each server’s DIMM slots were set up as follows:
1:2GB 2:2GB 3:2GB 4:2GB 5:4GB 6:4GB 7:[empty] 8:[empty]
I booted the upgraded systems, and was greeted with the following warning:
Warning: The current memory configuration is not optimal. Dell recommends a population of 2, 4, or 8 DIMMs. DIMMs should be populated sequentially starting in slot 1.
The online manual explains the warning as:
System has detected a legal but non-optimal population of DIMMs (for example, 1 DIMM, 6 DIMMs, 4 DIMMs in slots 1, 2, 5, and 6, etc.). The system will run with all memory accessible but will experience sub-optimal performance.
The System Memory section of the manual continues:
General Memory Module Installation Guidelines: To ensure optimal performance of your system, observe the following guidelines when configuring your system memory… FBDs must be installed in pairs of matched memory size, speed, and technology, and the total number of FBDs in the configuration must total two, four, or eight.
The machines still ran fine (and way faster than before with the new RAM) and both saw all 16GB of total RAM (because I installed a PAE-enabled kernel last night, as well).
Of course, the solution to make this warning go away was to simply put 8x2GB DIMMs in one server and 4x4GB DIMMs in the other (my smokin’ hot former school teacher wife actually figured that math problem out in about 12 seconds). However, the situation got me thinking (and that’s always dangerous). What exactly does “sub-optimal performance” mean, and what precisely (in as geeky and technical terms as possible) was causing it?
I didn’t feel like searching for the answer at 1:00AM this morning when I got home from the colo facility. But I tried today, and found nothing with Google – except links to the Dell manual that makes the ominous warnings of sub-optimal performance. I called Dell Premium Tech Support, and they couldn’t explain it either. They gave me the standard “it’s just not supported” answer, which would have probably been fine for a sane customer, but that’s clearly not a word that describes me, so I held firm until they had no choice but to open a trouble ticket to research it.
My best guess is that maybe all installed DIMMs will run at the clock speed of the slowest DIMM in the bunch, but again – that’s a total guess.
I’m still waiting to hear back from Dell, and I also posed the question to a mailing list of fellow Dell PowerEdge Linux admins, because even though it’s not a Linux question, I figured who better than fellow Linux geeks to take a stab an answering a question that neither Google nor Dell Support could.
If I hear back from either, I’ll update this post with the answer! Of course, it’s an entirely academic question at this point, since moving the DIMMs around made the warning go away, but it’s still got me scratching my head, and I won’t be able to obsess about other geeky questions until this one is answered.
If you’ve got the answer, please leave it in the comments!
UPDATE: Within 5 minutes of publishing this entry, I received the following email from Dan Coulter, an Enterprise Expert Center Server Support Analyst at Dell:
Hello, Steve –
Here is what I’ve been able to find…
The memory module sockets are divided into two equal branches (0 and 1). Each branch consists of two channels:
- Channel 0 and channel 1 are in branch 0.
- Channel 2 and channel 3 are in branch 1.
Each channel consists of three memory module sockets:
- Channel 0 contains DIMM_1 and DIMM_5.
- Channel 1 contains DIMM_2 and DIMM_6.
- Channel 2 contains DIMM_3 and DIMM_7.
- Channel 3 contains DIMM_4 and DIMM _8.
With your current configuration, the north and southbound links in channel 0 and 1 are not optimized because you have mixed DIMM capacity per channel. In addition, you are not getting quad channel access to the memory because branches 0 and 1 are not matched, limiting your memory access to 64-bit from a possible 128-bit.
You are probably seeing an increase in performance because your OS/processes were memory bound, and increasing available memory removed the bottleneck. You may or may not see an even greater increase if the memory configuration was optimal (adhered to the memory population guidelines).
Regardless, the supported memory configuration would be what is outlined in the manual.
Please let me know if this answers your question and I may close the case at this time or if you would like additional assistance.
So, there you have it. Dan’s the man!
And Dan, if you’re reading this: THANK YOU – and you can close the ticket.