Page 2 of 3

µC Prototype JFET Vpp/Idss Tester — scalable to 20-50+ at a time Phase 2: The 12 Little JFETs That Could and my First Etched PCB

I’ve been experimenting with making PCBs. I’ve always wanted to, but it’s something that I’ve never actually had the chance to do. I went through many a lot of iterations trying to get the toner transfer method to work.

In retrospect my big mistake was grabbing Kodak’s Ultra High Quality inkjet glossy photo paper. Photo paper can work well, but not this 10.7mm thick stuff with a plastic back. I didn’t actually have an iron, so I tried everything I could think of and only wound up going from almost no toner transfer to getting around 80% of the toner transferred with lots of broken traces. I started with a ‘hobby iron,’ which didn’t have enough contact area or enough heat. I was going to use a hobby heat gun, but I couldn’t locate it. I went through probably around 20 sheets of the stuff. I tried heating the paper from the back lightly with a propane torch, which actually gave me some results but only near the center. I heated the copper layer with the torch first, and actually destroyed a couple boards that way by applying too much heat from the torch. I did wind up getting vastly improved transfer this way as I rolled a piece of ~1.5″ aluminum pipe over it and VERY gently heated the paper with a torch.. but I was still left with an unusable amount of transfer.

So I was going to buy baking sheets today (aka cooking parchment, apparently) as I read that had excellent qualities for laserjet toner transfer. But before I ran to Walmart I was in Walgreens which is much closer to me. I picked up their glossy ink jet photo paper thinking I couldn’t do much worse than what I had already done. I learned that there were many thicknesses of glossy photo paper (The More You Know..) and this material actually had a paper back so it should fall apart in water and require less work for removal. I bought a cheap $18 iron while I was there. I’m not sure if it was the iron or the paper (but I’m betting it was mostly the paper with the iron not exactly hurting matters) but I got usable transfer on my first try. There was one little area where a large power trace was broken. I had the foresight in Walgreens to pick up fine-tipped Sharpies, so I scribbled in the broken trace and dumped the board in some Ferric Chloride.

First JFET PCB

This was a pretty good choice for a first etched PCB, I went through a bunch of layout iterations for each module that would be duplicated over the board, and I finally got something that I liked — the trace layout looked better to me than some of the other options and it was efficient in terms in space usage from left to right. I couldn’t fit a 5th row on the PCB without significantly reducing how many columns I had. I intended on using PCB terminals from Radio Shack (hence the 0.3″ spacing next to the resistors), but they were too bulky so I just soldered some Male-Male jumper wire to hook into the Arduino and the 8-way relay boards I ordered before I decided to start making PCBs. I’ll probably wind up integrating the relay board onto the JFET tester with an ADC and a header to connect directly to the Arduino. At least making PCBs is a cheap hobby, and I’ve always wanted to make SO many PCBs — I’ve always resorted to wiring on standard perfboard with thin wire and a decent amount of solder to work as ‘traces’ for audio amplifiers. PCBs would make things SO much easier — if only I had a small CNC mill to drill all the holes for me!

As you can see, each DUT Cell has gotten smaller with time. The last one got slightly larger to accommodate the RS PCB Terminals, but they’d need even more space to properly fit. They hit the resistor on the cell it’s in and on the one before it.. then there’s little clearance even between the terminals so it’d be hard to insert wires.

I actually picked up an AVR ATMega2560 based board cheap at MicroCenter. I’ve been using AVRs forever, the Arduino IDE just makes things a little easier  in some respects, even if it is a bit more limiting than I’d like. I’m used to using Atmel’s stuff, I’ve been using AVRs since the first ATMegas came out and there was a long lead time on the 16MHz variants, so at least I’m fairly familiar with them and their inner workings. I couldn’t resist buying the ATMega2560 board as it has *16* ADC inputs without using an external multiplexer or ADC. I have a few ADCs laying around, but the only one I could find is a TLC1543IN which wouldn’t work with the Arduino Due without a level shifter as this particular model of the 1543 (IN) is a 5v part, so it would blow up the Due’s 3.3v IO without bi-directional level shifters which I don’t have.. nor do I have signal MOSFETs, and IRF510s in a TO-220 would look ridiculous even in the interim. 🙂

I’ve only physically populated a single row, and I used 1% metal film resistors (again from Radio Shack since they’re right there and I don’t have to wait for things even if I pay through the nose and out the other side of it).  Clearly I’m not an electronics engineer, and my circuit design is probably poor overall for some reason, but the JFETs will (hopefully) not oscillate and we’re only testing two parameters so it should suffice. I measured the resistors to make sure I was reading the bands correctly (it’s been a while and I don’t have a magnifying glass — and damn they’re harder to read than I remember), and my little Fluke thought they were all within +/- 1%. I didn’t want reading variations with 5% resistors.

The process is the same as before. The relays are flipped to measure IDSS or Vpp, and we use a single pin to flip the relays. We’ve just scaled it up some by taking it off of a breadboard. You can see the PCB I printed this time only does 36 FETs at a time. I was trying to minimize the area outside of the center of the board and these are just prototypes so there was no reason to not do so.

Speaking of, I have design decisions to make for my prototypes — either use ATTiny828s that have 4 ADCs and mux them out to 28 for a mere $2.24 each (in TQFP from DigiKey) and put them on board (say with 112 JFETs on a larger board) with serial uplinks or to a control processor either on or off the board. With only 512B of RAM they’d need a separate processor to offload readings as quickly as possible. At least it’s cheaper than a halfway decent ADC and leaves me room to update their firmware and possibly do things a bit differently.

Here’s an example of *90* JFETs in the same board space (4.5″x6.375″), up from 36. They’re packed in tight, but there’s enough clearance everywhere. This one uses 2 pin male headers for each JFET.. routing them to a central place for a ribbon cable would be nice, but would require a two sided layout which I’m not quite ready for yet..

So I’m going to wire the 12 JFETs up to a couple 8-relay boards and see what happens. Hopefully I didn’t screw up the circuit design from my breadboard layout and there’s nothing seriously wrong with the design..

Part 3 incoming, it’s either going to detail a massive failure and/or another upgrade.. hooray?

µC Prototype JFET Vpp/Idss Tester — scalable to 20-50+ at a time Phase I: The 4 Little JFETs That Could

I previously tested all my 2SK170 and 2SJ74 JFETs by hand with a simple circuit, it’s illustrated well at the Fetzer Valve page, which is a great resource on making a very simple JFET amplifier that somewhat mimics a tube sound. The schematic is near the bottom of the page. I used a DPDT switch and tested two JFETs at a time, then logged the results in a spreadsheet and put the JFETs on a roll of tape with a start number and end number corresponding to the ID in the spreadsheet.

Clearly I needed a way to automate this as some projects will need to many matched JFETs, or I’ll at least need to know their basic characteristics since they have a ridiculously wide manufacturing tolerance. This was a bit of a pain when I went to build my Discrete Class-A all JFET opamp on a breadboard. Side note: Sounds awesome as the initial input for my modular guitar amplifier project and drives the Fetzer Valve circuits into crunchy distortion, especially when the presence caps are engaged!

So I took the schematic and scaled it up. I used a Seeed relay shield attached to an ARM Cortex M3 based Arduino Due. An Arduino Uno would’ve also worked, but the Due has more ADCs and higher precision. This is just a prototype for a larger version, and a proof of concept. It tests 4 JFETs at a time since there are only 4 relays.

The relay shield acts the same as the SPDT switch shown to switch between Vpp and Idss measurement. Sending “R” to the Arduino over serial changes modes, and it just consistently prints out the measured values. I had tried to use the SPDT switch to trigger an interrupt, but I didn’t have any hardware debounce and the interrupt triggers were actually causing the µC to freeze up for some reason. I didn’t look into it and just figured it’d be easier to read the serial input.

The code is very simple and available on GitHub at https://github.com/fdimitri/Arduino_DUE_JFET_Tester. I set the relay pin low or high to measure Vpp or Idss then perform a few measurements and average them. The Due has a bunch of on-chip SRAM so storing 16 samples from 12 ADCs with 16 bit precision (12 bit with 4 bits of padding) doesn’t hurt in the least at 384 bytes of RAM of our 96kB total.

(Not shown: 9v battery source)

I used 1% metal film resistors so I could basically ignore calibration, though you could easily use 10% and measure them then set a calibration factor FOR EACH ADC. I’d rather spend a few extra bucks and deal with a maximum ~2% error factor.

The relays make a satisfying click as they all switch in synchronization. The JFETs are driven with what ever voltage I need, if you expect your values to exceed 3.3v on a Due you’ll have to add a voltage divider to your sampling line, and they’ll have to be very high resistance to not interfere with the JFET — which can also reduce sampling accuracy, ironically. You could also adjust the sense resistor in the circuit. I’ll post schematics with higher power JFETs to illustrate different tactics for dealing with high current JFETs or ones with a high Vgs(off)/Vpp.

The source voltage for the JFETs doesn’t affect Vpp/Idss to such a degree that I had to modify anything, Vpp never exceeds ~1.3v, and Idss never exceeds ~1.5v (which equates to 15mA) with my 2SK170s. You can also test P channel JFETs, but you have to modify a few things to do so. Again, I’ll be posting complete schematics for each type and what to do with high Vpp/Idss devices. The second version is going to use 24 relays and an extra 8 channel 10 bit ADC so I can measure 20 JFETs at a time.

I like to let them sit in each mode for a few minutes to stabilize temperature (as they’re rather) before actually recording the readings. All of these things are going to go into the software, and support for the Seeed boards will remain for a simpler JFET tester (even up to 3 boards if you’re up to wiring them) — however I really recommend the 8 relay boards with optocouplers that you can buy on eBay. The optocouplers protect your precious µC pins from anything as you trigger the relays.

Feeding the JFETs with 3.3v gave me wonky readings, and 5v wasn’t much better. 9v gives me pretty much the same readings as 30v with some small variance, so I’d recommend a 9v feed. You should protect your ADC inputs with at least Zeners (I didn’t).. or some type of break switch (ie any transistor).

So Phase 1: 4 Relays, Using 4/12 onboard 12 bit ADCs
Phase 2: 16 Relays, using 12/12 onboard 12 bit ADCs
Phase 3: 24 Relays, using 12/12 onboard 12 bit ADCs + external chip with 8 10 bit ADCs
Phase 4: Use RadioShack 276-170 boards with JFET sockets installed instead of breadboards (Two sections of 47 columns, 5 rows). That will easily give me 22 JFETs per board
Phase 5: Add more I2C ADCs and relays to test ~50 JFETs at a time for easy cataloging
Phase 7: Switch to STM32F429, test 100 JFETs at a time with many I2C ADCs (or use a hilarious amount of relays as a huge multiplexer instead of a massive ADC array — which also has the advantage of sounding really cool)

Since the Arduino Due is basically a monster as far as micros go, we won’t run into any issues with lack of RAM or PROM storage. Do you know how insane 96kB is when you came from 8kB and less of RAM? Granted it’s not as much as an improvement as the processor itself.. but still very nice! Of course I cheated back in those days and hooked up 64kB SRAM.. in banks.. and bank switches happened between task switches, so each process/task had its own bank of 32kB of RAM for the heap. But that’s a story for another day, and I digress!

I may also port the project to my STM32F429 Discovery board. It has 256kB of RAM with another 8MB on the PCB accessible and addressable through the external bus, along with a 320×240 touch-screen LCD. That would be an entirely new program, of course as unfortunately the STM32F boards are not really supported under Arduino (though apparently some work is being done for some of them.. the F429 is not one of those devices).

Between that and maybe an easier navigation device (track ball off a Blackberry? Joystick?) it’d certainly be a more impressive looking and easier to use tester. I know I don’t need that much RAM for this application, but I can’t argue with more specs 🙂 It also has a trio of I2C busses for hooking up LOTS of ADCs! It also sports I2S.. which means.. more ADCs!

And my secret end goal? To make a single ended JFET output stage to drive a small guitar amp.. shh! I’m gonna need lots of these things to drive a few amps into a speaker!

Me vs my 2006 Audi A4 Quattro 2.0T Part II: The Tale of Stuck Bolts, and the S3 K04 Turbo That Doesn’t Really Fit On An Audi B7 A4

DISCLAIMER: This is mostly a rant, not a how-to. I’ll post a “how I did it,” later — you know, once I actually do it. A good resource for the S3 K04 turbo on a B7 A4 and the parts you will need is available at Audizine Thread: S3 turbo on A4 2.0 Tfsi DIY:ish, there’s some good information on that post and of course throughout Audizine’s forums.


So, the Audi saga continues. After finding out I needed a water pump I ordered a timing set with the pump as it’s driven off of the timing belt on the VW/Audi 2.0T. I realized I had to take the nose of the car off, that’s everything forward of the fenders — core support, bumper, bumper support, headlights. I wasn’t fully prepared for how much of a pain that would be on a 2006 Audi with some stuck bolts.. but I did get it off, and I actually had access to the engine.

Changing the thermostat was now a possibility, so I decided to do that at the same time. As you may have read from Me vs my 2006 Audi A4 Quattro 2.0T Part I, Audi likes to make everything out of plastic. I actually couldn’t get one of the hoses free from the thermostat without possible damaging it, so I simply grabbed a pair of channel locks and crushed the thermostat. The pieces came easily out of the hose, and I didn’t have to buy yet another $110 hose (this one is semi-accessible without massive disassembly so I didn’t replace it for peace of mind).

After a few hours in the heat taking the car apart I decided to do something a little less intensive — I looked at my turbo caked in heavy oil deposits, and decided to match the S3 K04 turbo up to it. I had read that you needed a diverter valve relocation kit, but I could easily fabricate that. I wanted to make sure all the outlets were in the right spot.

They were not.

Of course they weren’t.


So here’s what APR offers as a K04 conversion package, with the outlets in all the same spots so you can reuse your factory hoses. I have a feeling they machine the K03 housing to accept the K04 compressor impeller.

You pay lots of money for one with outlets in the stock locations!

Note how the turbo outlet (the pipe exiting the bottom of the turbo) points basically downward. The S3’s K04.. faces FORWARD! I didn’t do that much research, so I had no idea that I was getting myself into some fabrication.

Now take a look at the S3 turbo — you can see the long squiggly compressor outlet tube that they’ve fabricated and welded directly into the bolt-on turbo flange. You have to do that AND relocate the diverter valve. That tube is actually a good place to put the valve.

But I digress.


Further research after the fact showed what I should have known in the first place. Now my car will be apart longer since I’m not going to take the entire front end off again to change the turbo when that decides to bite the bullet next month. Of course now that I’m doing the turbo, my Tiptronic transmission will die. Mark my words. I bet it’s because of something made out of plastic, too.

Thankfully the inlet is in roughly the right spot and the exhaust manifold is actually part of the turbo, so I know it bolts up to the engine. The exhaust outlet is in the right spot, but I later found out the outlet flange bolt pattern is larger. That will necessitate some modification either to the turbo or the catalytic converter’s flange.

If fabrication scares you, if you don’t have a TIG welder, or access to a small machine shop — stay far away from the actual S3 turbo. The coolant and oil lines will bolt up easy enough, and obviously it’ll go right on the engine. But there’s no readily available turbo to intercooler charge pipe for putting an S3 K04 on an A4. Which means you have to cut up some pipe and do some welding (directly to the turbo’s outlet flange).


But the title says something about bolts, you say? Right. Audi had this great idea where they would put Allen-head bolts through the crank pulley into the crank, all the different types of bolts on this car befuddles me. They go from Allen to “Triple-Square” (12 point extrusion, similar to Allen) to Torx to good old fashioned hex head and 12 point bolts. Go figure.

Anyway, as my luck would have it I stripped two of those Allen head bolts. Considering the tight confines of the crank pulley and the fact that there were no edges to hit with an impact hammer or other tool I simply welded a 3/8″ bolt on to the first bolt and used a 9/16″ socket and the impact gun to drive it. It broke the weld at first, I couldn’t get good weld penetration due to the area constrictions. I ran it again and did my best to get a good weld around the circumference of the bolt.

I heard you liked threads so we put bolts on your bolts so you could..

It zipped right out. Bingo! The next one should be even easier, right?

Wrong!

It worked great for the first bolt, the second one was not so happy. I tried a 1/4″ bolt this time so I could actually sit it inside the existing stripped bolt. Sounds like a good idea, right? I was able to get a much better weld this way.. unfortunately this bolt I was welding it to was also a little more stuck than the last one, so the 1/4″ shank  simply snapped. I had more of a problem now since I also had to deal with the 1/4″ stub with a weld around most of it.

I welded a nut to what was left of the bolt. That weld snapped.

Then I remembered something great (and that I rarely have to resort to). I had recently bought a set of cheapo sockets that were basically junk – they broke easily. They were on sale for like $4, but even junk tools can have a purpose. This one was about to find out what its was.. because being a regular socket was certainly not it.

I cut three deep V grooves into the cracked socket with the bench grinder so I now had 3 prongs attached to the 3/8″ drive base. It fit fairly well over the existing weld material.

I welded it up as good as I could and popped the impact driver on it, and out it came.

I still have to figure out how I’m going to get the large crankshaft bolt out which doesn’t want to seem to budge with my impact driver. Of course nothing about this car is easy!

But hey, now I can’t forget why I hated Audi.

Disclaimer #2: I actually kind of like the car, I just hate working on it as it was apparently engineered by people on massive doses of hallucinogens.

Disclaimer #3: Excuse my writing and rants, I’m running on little sleep.

Me vs my 2006 Audi A4 Quattro 2.0T Part I

The last month has been trying with this vehicle.. I hated Audis earlier in life, to which most people for some reason thought I was jealous. I wasn’t. There was a reason.

And this is the month that I’m reminded of it.

Quick background: I bought the car about 10 months ago and have had no problems with it aside from a miniscule coolant leak and some squealing from the turbo. Those things I was willing to put up with until it was warmer out. I ordered an S3 turbo which is a K04, I believe slightly smaller than the one on my 2007 Solstice GXP — but much bigger than the stock K03 and the same price as the puny stock one. And who could argue with more power, right? And I really don’t mind working on my own cars so long as I’m not fixing them. If I’m UPGRADING them, that’s a different story, right? So it got warm out.

So it all started when I went to put UV dye in my coolant system to track down this little leak that left no puddles or obvious signs, it was extremely slow. I hop in the car and go to drive it to get it good and hot and try to see if I can get my UV light and find some signs of the leak. Can you guess what happened within the next 15 minutes?

The car overheated. Quickly. I put the heat on, and that wasn’t working which told me I had just lost a massive amount of water. I was very close to home and decided to risk the 1/4 mile trip with as little throttle as possible. Audi likes to do this cool thing where they make everything out of plastic. Like coolant flanges on that bolt on to the back of the engine in a nigh-unreachable spot and connect the motor’s coolant passages to the heater hose and upper radiator hose and god knows what else.

Plastic is awesome.

Plastic is awesome.

 

This little piece of plastic took hours. And they break. All the time. Awesome design, Audi! It’s a cheap part, I think I paid around $20. Then I paid $100 for a new heater hose that connects to it just for peace of mind, and about $15 on another hose that’s about 4″ long (it’s probably one of the more expensive 4″ pieces of black hose you’ll run into).

So I somehow get the coolant flange in there and manage to get the hoses on it, I bolt the cam-driven vacuum pump back on and the high pressure fuel pump — I buy another emissions related hose and that sets me back $75 as the clips on mine broke. The PCV valve which is plastic, of course (and no it’s not a Positive Crankcase pressure Valve, it’s Audi’s ridiculous idea of Crankcase regulation) has nice hot oil fumes coming up into it — which make the plastic very brittle. I’ve already replaced it, but it seems to break with minimal pressure. Guess it’s getting changed again. I find out my valve cover is made of plastic and there’s a screw with the head broken off in it that holds the PCV valve..

I remember why I hate Audi.

I start the car, take it for a drive, everything seems to be OK until I get about 10 miles out.. the car slowly starts overheating. I try to bleed the outrageous coolant system. It doesn’t help. I notice there’s no water flow unless you rev the engine.. with a bled system a sure sign of a bad water pump. Which means you get to take the entire nose of the car off so you can change the TIMING BELT DRIVEN WATER PUMP!

Yay.

Did I mention the OE water pump impeller is made of plastic and all the replacements are cast iron? Gee, I wonder why.

Thanks Audi. Clearly I was just jealous all these years. The cuts all over my hands are a testament to that. I’m so glad I finally own some kind of Audi.

In all seriousness though, it seemed to be very reasonably priced for a comfortable “AWD” (It’s not really AWD, don’t let that Quattro stuff fool you — the rear diff is open!) vehicle, and I couldn’t drive my daughter around in snowy weather in a rear wheel drive car with large tires — because they just act like big sleds and you don’t get to go anywhere.

This story continues with a horrible tale of a timing belt replacement.

And I ask myself — why did my 1979 Firebird need less maintenance and why was it literally over one hundred times faster to fix mechanical issues on it?

HP ProLiant DL580 G5 — GOOD LORD HOW LOUD YOU ARE, Also: How to quiet down a DL580 G5

So these servers I got are insanely loud, and I can’t stress insanely enough. The fans don’t seem to spin down to any reasonable level even when nothing is stressed and the system as drawing a “paltry” 650w.

So since there’s no direct control of the fans, at least so far in my limited testing with FreeBSD which I’m unfamiliar with anyhow I decided to quiet things down the hardware way. I took each of the 6 120mmx120mmx38mm fan cages out with *65dB* fans rated at 150CFM and cut the power cables to the proprietary connector. There was no way to get a standard width fan in here easily, so I decided to try running each pair in series.

That didn’t go so well. The fans would spin up a bit and then spin all the way down, the server thought they were bad. 6 volts was not enough to keep them going.. so I decided to cheat another way. I cut the power wires to some of the remaining 4 and wired a few diodes in series (5 of the 6 fans have 2 diodes, one has 3). That should give me some voltage drop from the forward bias of the diodes, and it did! My system went from absurdly loud to manageable.

For the other server I’ll be trying 4 diodes in series to try to get a bit more Vdrop and a bit more manageable noise. So far, so good. The 1.5amp diodes aren’t quite enough for my 150CFM Deltas and managed to burn out. 4x 3 amp barrel diodes fit perfectly in the little cavity in the fan, but I don’t have any pictures to show of that at the moment unfortunately.

 

 

3 1.5amp Rectifier Diodes, Twisted Together

3 1.5amp Rectifier Diodes, Twisted Together

Step 1:

Twist the diodes together, anode to cathode (note the silver band), this will get us some voltage drop.

3 1.5amp Rectifier Diodes, Soldered

3 1.5amp Rectifier Diodes, Soldered

Step 2:

Solder these connections and clip the parts we just soldered, we just need the two ends. This step is basically the same for 4 diodes, you just cut one more twisted set.

Fan and cage separated

Fan and cage separated

Step 3:

If your fan has a cage, disassemble the fan from the cage. Mine had plastic push pins much like most cars do, after that it slipped right out as I spread it apart to take the custom connector out.

Diodes Placed on Fan, Tinned

Diodes Placed on Fan, Tinned

Step 4:

Place the diodes on the fan, you can use some super glue to hold them in the cavity if there is a cavity. Otherwise place them somewhere convenient. Tin the anode/cathode of the diode(s) and cut the main power wire to the fan. Tin those wires.

Diodes Wired To Fan

Diodes Wired To Fan

Step 5:

Solder the power wires. The incoming wire will be wired to the cathode, or to the diode with the band furthest away from the connection.

Assembled Fan

Assembled Fan

Step 6:

You should probably have used shrink wrap in Step 5 (doh!), use some electric tape to make sure the exposed power does not hit ground and short out. (Yes, I had this problem, even with the electric tape, and I had to do horrible things to get the fan going again since it uses an uncommon connector that I couldn’t just replace)

Servers!

I got a pair of HP Proliant DL580 G5s, old, but potentially good. I was looking for something to run the ZFS SAN setup (which will hereafter be referred to as Hermes), and perhaps another VM server. They were supposed to have 2 Xeon E7330 quad-core CPUs and 32GB of DDR2 RAM.

To my surprise when I booted them up, server one had:

  • 4x X7460 CPUs (Six-core, 2.66GHz 16MB L3, SSE4)
  • 128GB of RAM

The second also had 128GB of RAM, but 4 E7450 CPUs, also six-cores but at a slightly lower 2.4GHz clock speed and I believe less cache. Total score, a single X7460 is worth more on eBay than I paid for both servers, so I ordered some cheaper CPUs (you know — the cheapest I could find that would work in the socket) at around $6/ea and these will go on eBay to help fund my little lab.

Once the MSA70 comes in I’ll be moving all the SAN stuff off the old desktop it’s in now and onto Hermes.

Note: These things SUCK power. Like 650w sitting there doing nothing power usage. But hey.. 128GB of RAM. That’s a lot of ARC for my ZFS machine!

How My Network Broke Today (Part I of atleast a billion)

So today I went to spin up a new VM for development use. It wouldn’t get an IP address, I saw the DHCP request on the DHCP server, and saw an offer go out but it was never received.  I dug through, and it seemed like this was just happening on one VLAN since everything else was OK.

Did I mention everything else was already running?

Did I mention if I had a trap collector with an alarm board that I would know what had happened almost immediately and been able to pinpoint the issue before I even saw the effects?

No? Well, now I have.

Let’s just say that I spent over an hour digging, running tcpdump on various interfaces, then finally hit the switches. I noticed there was only one port in the port channel on the Dell 5224 access switch when there should have been two down to the distribution switch. Odd but I thought inconsequential (at the time).

I got into the Cisco switch and saw MAC flaps (TRAPPABLE) all over the place with Po2. Odd again. The Dell switch must be to blame, so I go back to it and shut the port that’s not in the LACP port channel but should be. Things improve. Have I mentioned that I’d unplugged that fiber a week ago and only recently got a new one to plug back in?

I spend some time trying to get both ports in the port channel to no avail. I finally look at the config and notice the VLAN allowed config is slightly off (one is missing from eth 1/23), so I shut both the ports on the Cisco side as Dell won’t let you change interface configs while it’s part of a port channel and this was just faster — I reset the eth 1/23 config to match eth 1/24, and voila both ports came up.

But things were even worse now, barely any MACs were seen in ‘show mac address-table’ on my 3550-12 from Po2. And they were all on VLAN 1. Ugh. I shut the interfaces again and reset some more of the configuration on the Dell switch. I pray. (I don’t really pray). I bring the interfaces back up and all is good. The VM gets its IP address and everything is right in the world.

I really hate the Dell configurations. If I hated this switch before it’d be an understatement, and it’s only given me more of a reason to want to smash it with a hammer today. It’s mainly due to me not being familiar with them, but their configs aren’t as intuitive as I’d like.

iSCSI Booting Win2012 Server WITHOUT an HBA (Intel I350-T2 / 82571 / 82574 etc)

Thankfully Intel cards have iSCSI initiators in their firmware, so I setup a ZFS volume to make my HTPC diskless to attempt to stress the file server a bit more and generally just play with things as I tend to do.

So I added some settings to my ISC DHCP daemon under my shared network stanza to pass IQN/server settings to the Intel I350 card (82574 etc would work equally well here):

shared-network "VLAN-451" {
 default-lease-time 720000;
 option domain-name "p2.iscsi.frankd.lab";
 option domain-name-servers ns.frankd.lab;
  subnet 172.17.2.128 netmask 255.255.255.128 {
  range 172.17.2.144 172.17.2.239;
 }
 host intel-htpc1 {
  hardware ethernet a0:36:9f:03:99:7c;
  filename "";
  option root-path "iscsi:172.17.2.130::::iqn.2014-12.lab.frankd:htpc1";
 }
}

Voila, the card came up, grabbed DHCP settings and immediately initiated a connection! Awesome, the first thing to go right so far!  I admit I briefly spent some time trying to get iPXE to work with the Realtek card, but I ran into issues and just decided to use something I had laying around to get up and running quicker. The onboard Realtek is now for regular network data only, I might get a single port Intel card since I don’t need MPIO to this machine.

I imaged Win2012 Server to a USB stick using Rufus and plugged it in, it saw the drive and installed to it. I can’t believe things are going so easy/well for once! Then the system reboots. And it mounts the volume. And the Windows logo comes up. Then an error message comes up saying it couldn’t boot. Right away I knew it wasn’t getting past the BIOS calls to the disk (which were taken care of by the Intel NIC), and some Googling came up with horrible answers until I found an IBM document saying a new Intel driver fixes the issue — in a very indirect way. They don’t specify what, but it apparently has something to do with the iBFT tables that are created for the handoff. So I downloaded the newest drivers, put them on the USB stick and I installed Windows 2012 Server AGAIN. This time I loaded the newest version of the network drivers off the USB stick before even partitioning the disk, though.

The machine rebooted..

 

And..

 

IT WORKED! I was up and running. I installed the User Experience stuff so I could get Netflix/Hulu up easy, downloaded nVidia drivers and am now getting my Steam games downloaded to the machine — although I could stream off my workstation/gaming PC. It can’t hurt to have more than one machine with them installed in case either one of them dies and I need to go blow some pixels up to relieve some stress though, right?

 

Getting My Real VM Server Back Online Part III: Storage, iSCSI, and Live Migrations

After some dubious network configurations (that I should have never configured incorrectly) I finally got multipath working to the main storage server. All of the multipath.conf examples I saw resulted in non-functional iSCSI MPIO, while having no multipath.conf left me with failover MPIO instead of interleaved/round-robin.

A large issue with trying to get MPIO configured was the fact that all the examples I found were either old (and scsi_id works slightly differently in Ubuntu 14.04) or just poor. Yes, I wound up using Ubuntu. Usually I use Slackware for EVERYTHING, but lately I’ve been trying to branch out. Most of the VMs run Fedora, “Pegasus” or VMSrv1 uses Fedora, “Titan” uses Ubuntu.

Before I did anything with multipath.conf (It’s empty on Ubuntu 14.04), I got this:

root@titan:/home/frankd# multipath -ll
1FREEBSD HTPC1-D1 dm-2 FREEBSD,CTLDISK
size=256G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 13:0:0:0 sde 8:64 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 12:0:0:0 sdd 8:48 active ready running

Note the disks are both round-robin — with only one member each! This works for fail-over, but did nothing for performance. The only thing that wound up working for multipath.conf was this:

defaults {
 user_friendly_names yes
 polling_interval 3
 path_grouping_policy multibus
 path_checker readsector0
 path_selector "round-robin 0"
 features "0"
 no_path_retry 1
 rr_min_io 100
}

multipaths {
 multipath {
  wwid 1FREEBSD_HTPC1-D1
  alias testLun
 }
}

The wwid/alias doesn’t work, however. All of the MPIO is just coming from the defaults stanza. I attempted many things with no luck, unfortunately. I’m going to have to delve into this more especially if I want live migrations to work properly with MPIO. As it stands the disk devices are pointing at a single IP (ex /dev/disk/by-path/ip-172.17.2.2:3260-iscsi-iqn.2014-12.lab.frankd:htpc1-lun-0), I’ll need to point at aliases to get the VMs working with multipath.

The multipath tests themselves were promising though, dd was able to give me a whopping 230MB/s to the mapper device over a pair of GigE connections.

The output from ‘multipath -ll’ now looked more reasonable:

root@titan:/home/frankd# multipath -ll
mpath1 (1FREEBSD HTPC1-D1) dm-2 FREEBSD,CTLDISK
size=256G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 39:0:0:0 sde 8:64 active ready running
  `- 40:0:0:0 sdg 8:96 active ready running

You can see the drives are both under the same round-robin policy instead of two separate ones.

The storage server also saw some slight changes, including upgrading from one Intel X25-V 40GB for L2ARC to 2xX25-Vs for a total of 80GB. I also added a 60GB Vertex 2 as a SZIL device. I really need to build a machine with more RAM and partition out the SZIL. I’ll likely wind up using my 840Pro 256GB for L2ARC and leave the old X25Vs out of the main array once I get a pair of 10GbE cards for maximum speed (hopefully near-native of the 840Pro — perhaps better with a large amount of ARC) to my workstation.

So we’re at a point where everything appears to be working, although in need of some upgrades! Great! I’m looking at a KCMA-D8 Dual Opteron C32 motherboard as I have a pair of Opteron 4184s (6 core Lisbon, very similar to a Phenom II X6 1055T) laying around, so I could put together a 32GB 12 core machine for under $400 — but as always, budgetary constraints for a hobby squash that idea quickly.

Getting My Real VM Server Back Online Part II: Storage Server!

Anticipating the arrival of RAM for my VM server tomorrow I decided I needed some kind of real storage server, so I started working on one. I haven’t touched BSD since I was a kid, so I’m not used to it in general. I wasn’t sure how OpenSolaris would work on my hardware (I hear it’s better on Intel than AMD) so I opted for FreeBSD. Unfortunately I just found out FreeBSD doesn’t have direct iSCSI integration with ZFS, but that’s okay! We can always change OS’s later, especially since the storage array leaves a lot to be desired (RAID-Z1 with 4x1GB 2.5″ 5200RPM drives + 40GB Intel X25V for L2ARC, no separate ZIL).

I’m getting used to the new OS and about to configure iSCSI, which will be handed out via multipath over an Intel 82571EB NIC into two separate VLANs into a dedicated 3550-12T switch. We’ll see how it works, and if it’s fine I’m going to get my HTPC booting over it.

I’m going to look around for a motherboard with more RAM slots, for now I’m stuck with a mATX motherboard, a SAS card that won’t let the system boot, and 2 RAM slots (8GB) with an FX-8320.

Performance tests to come.. after I encounter a dozen issues and hopefully deal with them!