Tuesday May 13, 2008 Last Thursday I had retina surgery number four. This time I had it at Duke in an attempt to change my luck which so far has been pretty poor.
The surgery was the most interesting of the bunch as I remember almost all of it. At the very beginning of the surgery they have to install a "block" which apparently involves sticking this needle into the back of the eye. They knock you out for that part but then let you regain some degree of consciousness for the remainder of the surgery. On number three I only remember the last 15 minutes or so. On this one I can remember from the point where the Dr. Postel told me "Now we're going to remove the (silicone) oil. We just let it drain out on its own rather than draw it out". I could see the shadow of various instruments as they worked in my eye. I could pick out three different instruments. The coolest part was the laser. I could hear when Dr. Postel ordered that the laser be turned on at 400mw. Then whenever they fired it I could see the shadow of ejecta debris rise up from where the laser was doing its work. All of this was just shadows so it was in black in white like I was watching shadow puppets. Very neat.
The next morning I went back to Duke for the post-op check. I was concerened about what my vision would be like since on every other surgery where they could actually do the reattachment (i.e. all but the first) my vision was pretty poor, I could just detect hand motion, no fingers no letters on the chart. I was afraid I might lose all the healing I'd done since the end of March. I was a pleasant experience to see that my vision was the best 1 day post-op that it has been, I could count fingers and read the top line of the chart. Maybe this was going to do the trick.
Over the weekend though I could see that my vision was not improving, at best it was staying the same or maybe a little worse. This was a bit disconcerting since previously this early on I could see improvement as the day went on. Well maybe since it was so good to start it isn't so apparent this time?
On Monday though it was clear that the vision was worse. I probably could no longer count fingers although it was close. Aghh not another detachment already! I called Duke and made an appointment for the next morning.
Driving to the appointment this morning I could tell there was a bit of an improvement from yesterday but still not back to last Friday. The vision was like the worst pool chlorine eye you can imagine. Definitely different than what I'd expect from a detachment. What was up?
The technician that checks your vision and puts the dilation drop in your eye said an odd thing when he looked thru the scope they normally use to examine the cornea, "Have you had cataract surgery?". (I haven't really although my lens has been removed). Then he took my pressure, twice. It was 5, pretty low. Last Friday it was 10 (also a bit on the low side). I was pretty disappointed at that news since in the past a pressure drop had meant a new detachment. I went back to the waiting area very anxious.
I finally saw Dr. Dayani who had assisted on the surgery on Thursday. He did the whole retina scan thing with the stationary microscope and the head lamp. Finally he said "I have good news for you the retina is all well attached". Whew! Apparently my eye has decided on a new way to stress me out. I'm forming a layer of haze or film on the surface of the oil just at the iris and that is making it hard to see. (I think this explains the technician's cataract remark.) They expect that by increasing the prednisolone drops that the inflammation will go down and the haze will go away. If not they'd have to remove it, but normally it just goes away on its own. At this point I'm just happy that the retina is staying in place, maybe the fourth will be the fix.
So this is a little story in anticipation of tax day tomorrow.
Last Thursday I came home to find a rather thick letter from the IRS. Umm this does not look good. I opened the letter to find that the IRS was claiming that I owed $22,820 in back taxes for 2006. I was immediately relieved since this was clearly a mistake. Now if it was something like one or two thousand I might have been worried, but $22k, can't be.
On further reading it turned out that the dispute was the result of a 1099b that I apparently failed to report for a sale of $48,295 in a Fidelity mutual fund. I thought "well maybe I did miss that". I wasn't worried since I knew that that money was a result of selling Sun ESPP shares in anticipation of paying for my Velocity kit. I sold those shares a few months before I needed to pay Velocity and I parked result in a mutual fund for 3 months while I waited for the kit to be delivered. I figured at worst I might owe $100, much better than the $22.8k they wanted. The IRS's calculation was based on a cost basis for the mutual fund of $0 which results in taxes of $17k, penalty of $3.5k and interest of $1.7k. Now if I only could figure out how to get shares for zero dollars...
So I went and dug up the 2006 return. No sign of the 1099 which explains why I left it off. Looking further I found the records of the sale and discovered that I in fact lost $71 on that sale (no wonder I forgot about it). So instead of owing ther IRS almost $23k they owed me. I drafted a letter explaining all the numbers along with a copy of the documentation of the proper cost basis. At the bottom of the letter I wrote:
Based on this the IRS owes me a refund of $18. I'm sure that the President will be sorry to see the windfall of $22,820 he expected from me to help pay for the war evaporate, but he must be used to disappointments by now.
I thought about telling them that they couldn't pay me on the installment plan but figured I better not push my luck.
Back in November I wrote about my experience with retinal tears. I was hoping that was pretty much the end of the story. Unfortunately it wasn't since that entry I've had more issues. At first it wasn't too bad. Originally I had three tears, one big one and two little ones. In December the big tear and the nearby small tear joined forces to make one large tear. This wasn't too bad since I noticed it quickly and it was lasered and things were fine.
Things seemed to proceed ok until early February with only biweekly visits to the doctor for checks. It looked like I was pretty much out of the woods. On Feb. 2 I noticed a little bit of flashing in my eye that lasted for a couple of minutes. It was barely visible, had the lighting situation been any different I never would have noticed it. I debated calling the doctor about it but since it was so shrt lived I decide I'd just try and pay close attention and see if there was any change in the floater situation. In hindsight that was a bad idea since I had so many floaters (tens if not hundred of thousands) that detecting any change was probably unlikely.
The next Saturday (the 9th) when I went to bed there was a bright light in the upper right of my eye. Not good. Why does this stuff always happen on the weekend? On Monday I made an appt. with the doctor to get it checked out on Tues. As far as I could tell there was nothing different in my vision, in fact I passed my 3rd class FAA medical that day.
Tuesday came and with the testing the technician did before I even saw the doctor, it was clear I had lost a bunch of peripheral vision. The doctor then confirmed the worst. I had a new tear in a completely different place and the retina had detached. I would need surgery Wed. morning. The good new, if there was any, was that they'd do a vitrectomy so all my floaters would be gone and I could expect my normal vision. The bad news was I'd get a gas bubble inserted in the eye and I'd have to maintain a certain head position for 10 days. Also I could expect to have cataract surgery in 6 months to a year.
I went to the hospital early Wed. and they surgery was performed. Well not really. Shortly after the surgery had started I suffered a suprachoroidal hemorrhage in my eye. This is the bane of eye surgery. It is pretty rare something like .02-.05% of any eye surgery where the eyeball is opened up. Since cataract surgery is the most common surgery of this type it is seen there most frequently if you can call .02% frequent. This basically stopped the operation since this lifts the retina up and if that wasn't bad enough the surgeon can't see for the blood. This complication is pretty devastating as far as final visual outcome. Any chance for 20/20 was now gone. The next day when the patch came off the eye I found I was now blind in that eye. Well I could detect light. I called it my one pixel eye.
Now we'd have to wait for me to recover from the hemorrhage before we could operate again. We'd also have to hope that it wouldn't just happen again. If the probabilities were independent I'd have nothing to worry about. Unfortunately they aren't though it is pretty common for subsequent surgery to go fine.
Two weeks later it looked as if I was at the point where a 2nd surgery could be done. It was hard to tell for sure because the retina wasn't really all that visible. They had to use ultrasound to make the decision. The second surgery lasted 3 hours and went well. At least in the sense I didn't hemorrhage. They were able to do the virectomy, remove my lens, reattach the retina and fill the eye with silicone oil. The next day when the patch came off I could see, after a fashion again. Unfortunately they weren't able to get all the blood ought from under the retina so there was concern that when the blood there dissipated that the oil wouldn't make a good seal. The hope was that by the time that happened the retina would be fairly well attached and not detach again.
No such luck. The blood dissipated and two weeks later my retina detached again, all the way to the macula. Now the plan was to wait until all the blood was completely gone and try yet again. Two more weeks of waiting. The 3rd surgery was March 26. I was hoping that the third time would be the charm. I was brave enough this time that we did the surgery under local anethesia. I actually have a memory of seeing the instrument working inside my eye. This surgery seemed to go well. The blood was all gone. The retina went down nice an flat and there was a good fill with the silicone oil. The doctor and I were very hopeful.
I was really sweating out the first two weeks since after the second surgery I wasn't able to make it two weeks before the retina detached again. Although it wasn't like I'd be out of the woods at two weeks it would be some kind of milestone. After this operation I paid close attention to the vision in that eye and it was clearly getting better every day. It was great because of distortions but it clearly improved daily. I was also aware that it was better than it was at similar days after the 2nd operation. I was very hopeful.
Last Tuesday was my scheduled follow-up visit for 2 weeks post-op. I definitely like going on the scheduled visits because the unplanned ones are always bad. The bad news was that Monday evening I became concerned that I could detect signs of detachment again. They were very subtle so I wasn't sure. Tuesday came and I go to the doctor. I could read the line (well read is too strong a term) under the big E. Unfortunately the doctor confirmed that I had a new very small detachment. Damn!
Now I had to decide what to do. Try again or just give up on the eye. My doctor suggested that I might want to have another doctor try the surgery. I had been to the Duke Eye Clinic after the hemorrhage and my doctor who interned at Duke suggested that the doctor I consulted with there would be a good choice. My initial instinct was to give up and just let the eye fail and get on with my life. I was just tired of the surgeries and the restrictions they imposed and it just wasn't clear that even if things were successful that I'd get reasonable vision out of that eye.
So one of the things I'd been wondering about was how much of the distortion I was seeing was caused by the silicone oil and how much was damage to the retina. I had noticed four different distortions. One if you looked at the lines painted on the road. The lines in my right (bad) eye were at about a 20 degree angle to the lines in my left eye. Also thing were very slightly different sizes. Also I noticed that if I looked at a picture frame it was not rectangular but was a parallelogram. Finally there was the fact that there were no straight lines. Any horizontal or vertical lines had two little bums in them.
I suspected that the angle and tilted vision thing was caused by the oil in the eye (probably by an index of refraction difference compared to the vitreous) and my doctor agreed. I was surprised at how little I could find on the internet about this though. It's one of the reasons I'm writing this so the next person my at least find this entry. I did finally manage to find a document that was for a different surgery but still used the same oil that mentioned the angle/tilt distortion. So now I could at least believe that after the oil is removed (6 month to a year after successful surgery) that this distortion would go away. From what I could find it seemed likely that the little bends in straight line are caused by the retina not being quite flat. In theory the oil will tend to smotth these out over a few months. I sure hope so.
So now I've decided to try operation number four and this time to do it at Duke. Since "third time is the charm" didn't work out, I'm counting on "fourth time is the fix". We'll see. :-)
Apr 11 2008, 11:27:45 AM EDT Permalink
So this weekend was one of those builder's moments as far as building my Velocity. I bolted the wings (such as they are) onto the center section spar.
|
---------------------------------------------- Here I am sitting in the fuselage making airplane noises and wishing I was a lot further along on this project. I've had to do a lot of moving of things around to get the plane to fit. At this point the wings don't have the winglets installed. They won't actually fit in the space I have. My plan is to cut a hole in the roof and have the winglets stick out thru the roof. I'm going to make some sort of temporary structure on the roof to keep the rain outand when the project is complete I'll repair the roof. The first question people ask is how will you get the plane down? The answer is that the wings will be unbolted and brought down separately.
|
![]() |
Here is another view looking up from the first floor. It gives a much better view of how big this thing is.
|
One of the recent projects was to hang plastic strips to help enclose the second floor so I don't have to heat/cool the entire hangar. This has made a substantial improvement in my heating costs. Looks like the plastic will pay itself off the first winter. You can see the nose of the fuselage protruding thru the plastic strips. Hopefully when I get things a little more rearranged and the wings get trimmed to the actual length I'll be able to rotate the plane slightly and keep it within the plastic. For the exceptionally curious the white thing on the first floor just in front of the Tiger is a mirror grinding/polishing machine. I've have plans to grind/polish a 24 inch telescope mirror at some point. To this stage I've just been trying to learn the machine on an 8 inch mirror. On the Velocity the gap you see on each side where the wings are is where the strakes go. This area becomes the fuel tanks for the airplane. I think most builders would agree that building and sealing them is the most stressful part of the building process. It's not a good thing if they leak.
|
![]() |
Any status on tiered compilation?
So it has been a quite a long time since I had anything to say about tiered compilation. Mostly this is because there wasn't a lot to say.
I've spent most of my working on a side issue. That issue is the lack of a 64 bit version of the client compiler. We've actually had a mostly working version of the client compiler for sparc for quite a while but there was nothing at on on the x86 side. Without a client compiler for 64 bit there was no way to have tiered work in that environment.
One of the reasons there was no 64 bit x86 version had a lot to with the way the original 64 bit port on x86 was done. The original implementation was done outside of Sun and the implementator went with a totally separate cpu directory (amd64) rather than i486 cpu directory contain both flavors much like sparc. As a result there was a lot of code duplication. Rather than expand the amount of duplication by adding a whole bunch of new c1 files I took the approach of merging the i486 and amd64 directories into a single x86 directory. Unlike sparc where 64 bit has a very similar ABI (very close anyway) and pretty much the same number of registers 64 bit x86 has more registers and a different abi for calling conventions (32 bit is purely stack based, 64 bit uses register based convention). Worse still solaris/linux have a different abi than windows. This makes merging the files into something as simple as the sparc side fairly difficult. The initial merge and creation of the x86 cpu directory happened some months ago. This resulted in the deletion of a number of files that were basically duplicates.
Once that step was complete I set about merging the two assemblers into a single assembler and adding features to the macro assembler to allow hiding the differing sizes of pointers. For example instead of saying addl or addq when adding to a pointer sized item now there is an addptr which does either a addl/addq as needed. This then allowed me to then make the changes to the client compiler cpu specific files such that almost all of the changes were pointer size agnostic.
I'm pleased to say that changes for 64 bit client jvm are now all complete. The changes just went out for internal review which given the size of them will take quite a while to process. This isn't that much of a headache at this point because of the change from using Teamware for source control to Mecurial we've not been able to putback (commit) any changes to the source base for weeks. This will hopefully end soon but as you can imagine there will likely be a tsunami of changes once the door is open. I'm not in a huge hurry to add to the confusion factor this is all likely to cause so it will still be a bit before these changes hit the OpenJDK sources.
In the meantime I should finally get around to going back to "real" work on tiered compilation. This will mean finally getting back to trying out the changes to compilation policy I've been envisioning for months. Hopefully this time things will work out better.
So one of the things about getting older is that since this is the first and olny time you get to do it there are always surprises. I just had an unpleasant reminder of that the last couple of weeks.
Three Sunday's ago I was working on the wings of my Velocity when I suddenly noticed what seemed to be a eyelash in my eye. I tried to brush it away but it stayed there. After I finished what I was doing I went back to the house and asked my wife Gretchen if she could see anything but she couldn't. I wasn't in any pain so I decided I would be sure to see my eye doctor (optometrist) on Monday.
When I woke up on Monday my vision was definitely worse but not terrible. Sort of like looking thru a window that had lots (thousands) of very tiny water drops on it. Now I'm definitely getting worried. I got an opeing to see the doctor first thing in the morning. He took a photo of my retina with a device call an OptiMap and proceeded to tell me I had posterior vitreous detachment. It wasn't a big deal since my retina was not torn but I should watch out for any flashing lights or shadows. I went back to work greatly relieved.
That night I decided that maybe I didn't really explain how messed up my vision was to the doctor and that maybe I should call him back on Tues.
Tues. my vision was about the same and I called the doctor. He set up an appointment with a retina specialist for Wed. It was about a block away form out offices. I felt better again. Later that afternoon I noticed that my vision seemed different. I covered my left eye only to discover that I couldn't see out of my right eye! I could see light and dark but it was like looking thru very dirty water. I ran out of the office and immediately went to the retina doctor's office. They weren't open. I was pretty paniced at this point. Since I was right next to the emergency room of a hospital I went there. Not surprisingly they couldn't do much but they did find out that the retina doctor was at a different office a few miles away. Off I went to the retina specialist.
The retina doctor examined my eye and found that I had three tears in my retina. Two little ones and one big one. One of the little ones was very near the big one and it was very nearly a "super" tear. They judge the size of the tears but the number of clock hours they span in the eye. A "super" tear is 3 or more hours. The big tear I had was two hours and the others were just a single hour. Because there was so much blood in my eye and there were signs of fluid entering under the tear the treatment that was done that night was cryo therapy. It involved freezing you ey from the outside-in in order to cause scar tissue that would prevent the retina from detaching. It was basically painless. I was sent home with instructions of what to watch for and what to do. Reading and computer was out, watching tv was ok. Also I was to try and lay on my side as much as possible since the tear was on the top of my eye and that way gravity would help try and peel the retinal of the eye wall.
On Wed. I could see vision improving in my eye by the hour. On Thursday I had a followup visit and I could read the 20/25 line. The blood in my eye was greatly reduced and there was evidence that the fluid that was seeping under the retina was gone. Because of this the doctor did laser treatment on the tears. This seemed to take quite a while (15 minutes?) and was surprisingly painful. I was sent home with basically the same instruction and a date for a followup on Tues.
By Tues. I was pretty darn bored. I did manage to watch about half the episodes of Sky King but mostly I tried to sleep. I was really tired of laying on my side. The visit to the doctor went well. I was able to read the 20/20 line on the chart. [Considering how messed up my vision is with the thousands of floaters it is pretty clear how poorly 20/20 stacks up as a measurment]. I was given the clearance to read an use the computer. I was to avoid anything that vibrate or shake my head. Since there was only one more day before the Thanksgiving holiday I decided to stay at home and take it easy. At least I could sit up again.
This week I'm back to work. Tomorrow I have another followup visit, hopefully everything is still ok. I feel like I'm down from say 500,000 floaters to maybe 200,000. Still pretty annoying. I realized driving home last night that driving at night wasn't so bad as I felt sort of normal since I couldn't see all the crap in my eye.
By now I've learned that as everyone ages the vitreous shrinks and eventually detaches from the retina. In most people it's a non-event. In people with myopia detachment happens earlier in life and with a higher risk of retinal tears. Bad eyes gets you coming and going. I was only a moderate myope at -5.25 before I had lasik back in '98. I had always thought I had pretty bad eyes until I had lasik and found that I was only considered moderate. It is hard for me to understand what my friends with -9 or -12 see like. Now I know they may be in for what I've just been thru.
The other bad thing is that since one eye has done this the likelihood of the other eye doing it is increased. At least I'll know what the heck is going on if it happens again. In the meantime I'm just hoping everything continues to heal properly.
Nov 27 2007, 01:55:42 PM EST PermalinkIts been a while since I've gotten around to blogging and much longer since I've talked about the state of tiered compilation. Just a quick note about what's been happening. Almost nothing.
The only significant that has happened is that I've putback a fix to the jvm that will prevent the uncommon trap loops that for whatever reason seem to plage the jvm when tiered compilation is enabled. This fix should appear in B19 which should be built this week and will appears sometime later. This removes a large performance pothole that tiered has suffered with. Generally if you've been having this problem then you will typically see your app run at interpreter speed or worse. In the past you could sometimes work around this by tuning the compile thresholds but not always. Hopefully this issue is pretty much dead.
Unfortunately tiered still has performance and tuning issues. I recently looked at some logs from someone that is using tiered and not seeing the results we'd like. At some compilation thresholds they are seeing the uncommon trap loop problem but at other levels that problem is gone but they see worse performance than just using client.
Their app seems to be my worst nightmare. The app seems to be composed of lots of methods that are mostly lukewarm and not many that are significantly hot. By messing with thresholds they may be able to get better behavior but I'm not optimistic.
This has convinced me that the techniques I'm using for controlling the tiered jvm are fatally flawed. They will never be able to do the correct thing for a variety of apps with out very careful and tricky tuning by the user. That just isn't going to make it. So I've been thinking about a new strategy and I've been working on protyping it. If this prototype shows promise then I'll be blogging about it in the near future.
I recently got assigned a bug. It got assigned to me because the stack trace that came with it showed some of the deoptimization code in the trace. (Note that the current synopsis is different than when I got it and reflects the debugging I did.) When I got it I looked at the trace and said to myself "this isn't a deopt bug, it is likely a awt/2d malloc stomp", but I looked at anyway.
By the time I started looking at it Tom R. had already done a bunch of experiments in trying to track down which library was the culprit and whether a debug malloc would track down the problem. The results were confusing but the consensus was that if a debug malloc was used that the problem disappeared.
So the first problem for me was that the supplied testcase was running on linux and on my local network there weren't any suitable machine so I had to run this remotely. I thought this was going to be a pain since pointing the remote machine to my local display was going to be painful. First lesson learned: Years ago I asked about a way to deal with this situation but none of the people I asked had a good answer. Now thanks to Tom's suggestion I know that I can setup a vnc server on a dummy display and dispense with the network i/o. (Or on solaris I could use xvfb). I wish I had learned that ages ago.
Once I started looking at the crashes in gdb I was even more convinced that the fault was not in the jvm. The data nearby the block that was being released didn't look like jvm data and looked suspiciously like graphics data (an array of coordinates). Unfortunately in reading the malloc sources I didn't do it carefully enough and misinterpreted what I saw. I believed that what I was seeing was a case of someone using a dangling pointer after the memory was freed rather than a more vanilla write off the end of storage type failure. (The fact that the debug malloc's didn't find it contributed to that misunderstanding.)
I thought about using valgrind but decided not to because I knew there were issues with using it with the jvm and I wasn't sure I wanted to go down that route yet. I'd save that approach if my current strategies didn't work.
I located the pieces of the 2d code that seemed to be related to the corruption and modfied them to put some crumbs in the storage when the malloced/freed storage so I could at least figure out what data was suspect. This led to the next lesson. I've been working on the jvm for a long time (>7 years) but I've never actually built anything but the jvm. I've never built an entire jdk. I was hoping to keep this record intact. Well we have a tool called PRT internally that is used by jvm developers do build and test the jvm on the supported platforms and if run is successful to putback the changes into the appropriate workspace. Well there is a new tool JPRT which does a similar thing for both the jdk and the jvm. We're supposed to be migrating to JPRT but I'd not used it to this point. JPRT has a lot of nice features and it allows you to specify which builds you want. So I was able to make my mods to two files in the 2d source and tell JPRT to build me a linux jdk. So I learned how use JPRT and still managed to not build a jdk by myself.
After a few iterations of building instrumented jdks and staring at crashes I was able to track down an out of bound store in some 2d code. After looking at the code I was able to come up with what looked to be a good enough fix to at least eliminate the stomp and see what happened. The crash was gone. So my initial prediction turned out to be accurate and I turned the bug and all my notes over to someone that actually understands the code for a proper fix.
Now for the final (hard) lesson. After I had tracked this down to a simple oob store Tom and I wondered why the debug mallocs didn't find this. So Tom decided to try valgrind on the testcase. In very short order (like maybe an hour) it had located the same piece of code I had spent a good bit of time finding and one other suspicious routine. So I definitely learned respect for valgrind and will surely use it in cases like this in the future!
This past Saturday was our big annual party. The theme this years was Pirates. As usual it was hectic getting everything ready for the party. At least this year I didn't have some big project, like building the gazillion, to complete (although I did stain the gazillion). Mostly it was a getting the hangar in shape after a year of increasing entropy. My wife thinks that I should just always keep the hangar neat then it would be so bad ... right!
The props this year were pretty simple, a few fake cannons and turning the 10 foot john boat we keep on our pond into a pirate ship. Oh and the usual palm tree grove. I'm going to glad when those fronds are finally retired.
|
Here's a shot of the various pirates having a good time. |
| There was an impromptu costume contest with a category for the women and the men. My wife Gretchen (2nd from the right) doing her best a pirate wench. Our neigbor Diane (3rd from right) was the people's choice winner. |
|
|
Here was the guys auditioning for best costume. Much to Diane's chagrin her husband Pat (rightmost) did not win. He surely would have won but who would know that we'd get a professional pirate (not shown) who really wowed the crowd. |
|
Here I am in the only correct Pirate costume. I'm wearing a Roberto Clemente jersey (the greatest Pirate). I don't understand how everyone got the wrong pirate idea from the invitation? I borrowed the grill I'm standing next to from one of my neighbors. This grill almost got my in trouble at the party. This grill (actually there are two on the trailer) is normally used for pig picking. Cooking a pig for 8-10 hours. |
|
Well the first thing to know is how large and heavy this grill is. It takes two people to open the lid! It is in serious need of a big counterweight. When I borrowed this I was told not to mess with the gas regulator so I didn't. Well after I had the first round of jerk chicken on the grill (30 lbs of boneless breasts) for 20 minutes I got someone to help me open the grill onyl to find that the chicken was pretty much in the same state as when it went on the grill. Yikes! So we had to mess with the regulator. I adjusted it to the point where it almost would blow the flame out to get the max heat. That helped a bunch but it was still pretty slow. It probably took almost 1.5 hours to do the first batch of chicken. I don't know how many times I had people asking "is the chicken done yet". The second batch went much quicker and in actuality the fact that it went slow made it much easier to deal with once I got past that first hiccup.
The weather turned out almost perfect after giving us a bit of a worry. We hadn't had rain in several weeks but on Friday afternoon tropical storm Barry popped up in the Gulf of Mexico and the remnants were expect to reach NC by late Sat. and to rain all Sunday. On Saturday morning the sky was looking like maybe Barry was going to arrive early. That would have been no fun. As it turned out it was mostly cloudy and relatively cool for June in NC and only a few small bits of rain. Whew!
As usual everything went much too fast and before we knew it the party was over. Now we have to think about what to do for next year's party (SciFi). We have a couple of interesting ideas we'll see how practical they turn out.
For another view of the party you can check out the blog of my friend "Big Lee" who has a good write up on it (and had a great costume too).
I'm back from JavaOne where I had a pretty good time. The weather started out real nice Mon. and Tues. but by Fri. it was really cold. I need to bring a heavier jacket next time as I managed to get myself a cold. I'm sure that some of those people on the plane with me have it now. :-(
This was the 3rd time I've been to JavaOne. I wasn't listed as a speaker this time so I was sentenced to the standby (aka Sun employees) line for the sessions. I need to come up with something to talk about next year. I was even demoted out of being an alumni. :-)
As usual I attended some good talks and some not so good ones. By far my favorite talk was A Lock-Free HashTable by Cliff Click. It wasn't really java specific but it was clever and Cliff is a good speaker.
My next most favorite talk was a surprise to me. It was Chris Oliver's JavaFX Script talk. I'm mostly allergic to hype and JavaFX was getting a lot of talk. I had read his F3 blog somewhat but not really that closely. I mostly went because it was the only thing I found interesting in that time slot. It was really cool. I was very impressed it is very simple for a programmer to produce very nice looking gui instead of the typical looking Swing/AWT stuff. Of course the real must have is a tool that allows building this kind of interaction without really having to think about the programming language. Still he had some very sweet demos.
Another good talk was the Garbage-Collection-Friendly Programming by three members of the Hotspot JVM team (not that I'm biased or anything). I didn't really learn much mostly because I hang around with these guys (electonically) quite a bit, but the talk had a lot of good stuff and was entertaining. They packed Gateway 102/103 and had questions until they threw us out of the room.
The Hotspot BOF was the same night as the GC talk and I think that the people that didn't get their questions answered in the afternoon session came by for a second chance at night as most of the questions were GC related with very few runtime or compiler questions. The BOF was also in Gateway 102/103 which was a terrible room for a BOF. The room holds like 1500 people and we might have had 50. As a result there was a lot of echo and it was really very hard to hear the questions. I don't know how hard it was to hear the answers hopefully not as hard as the questions.
The final cool thing was that I had several people come up to me and read my badge and go "oh you're fatcatair!". So I guess I really have some amount of audience paying attention.
I got a comment in my last entry about tiered compilation that I'd like to respond. It is more convenient (and obvious) to do it here. Here is the comment:
Can I try to understand better your "as it works now tiered tends to do too much compilation" comment?Do you mean that HotSpot currently attempts to compile code prematurely but that that tendency is counterbalanced in practice by the compilations being queued and thus delayed? If so, can't the compilation threshold just be put back a little to achieve the same overall where there is less queueing (more CPUs)?
Or do you mean that you see the compilation taking CPU resources away from the app itself where that may not have been the best choice? Does that still apply where the app is not able to use all the available CPU resource at the time, eg not being threaded enough to use all cores in a Niagara CPU?
So part of the problem is as Damon surmised in the first question, but there is more to it than that. If you don't adjust the thresholds (Tier2CompileThreshold) you'll certainly do too much compilation because even though that threshold matches what server normally used the counters are being incremented by compiled code and not the interpreter and since the compiled code is faster than the interpreter we can hit the limit quicker. The counters do get decayed every so often but in a sense we lengthened that decay time period by running faster code. So without any adjustment you'll see a lot more server compiles queue for the same elapsed time in you app. lifetime. My experiments show that around 35k-40k is a better than 10k value which will be default in b12. Keeping the threshold working as expected in the default (tiered compilation off) kept the tier2 threshold at this low value.
But there is more going on than that. So other issues have to do with how profile data is collected and how the counters work. In the current world (not my development code) the counters are used as triggers and as measures of execution counts. These work against each other because of how the triggers are implemented. So the execution counts we get are kind of blurry. Also because of the speed of the interpreter we don't normally collect full profile data (what we call MDO data) until after a method has warmed up to a degree. This keeps us from slowing everything that gets interpreted when we only need data for hot methods. This also tends to (and not entirely by design I think) cause us not to see transients as the system starts up.
Well in the current (B12) tiered mode we collect MDO data in every c1 (client compiler) compiled method. So this causes us to see different profile data than we used to see. As it turns out this has more of an effect than you might expect. One of the most important optimizations that the compiler does is inlining a virtual call. Because of profiling data we can see, to a degree, that a call site has a single receiver object type so we can inline the called method based on that observation. It is not unusual, unfortunately, to see a call site change its properties about the receiver type with the initialization of the jdk essentially poluting the data for what is typical for the app.
So c2 (the server compiler) tries to handle this situation by tailoring the code at the call sites to try and get the proper behavior. So when predictions go bad the code is thrown out (via what we call an uncommon trap) and the code is recompiled based on new data. I was surprised to see how well tuned the system seems to be to not seeing the transients and getting the code right (in the prediction sense of right, not in the correct code sense). When c1 code is collecting the MDO data I tend to see more uncommon traps so that more compiles occur than you'd normally expect. Worse still because of how we recover in these situations you can end up with a full vtable call at a call site that is, by the time the app settles down, really monomorphic. So we end up compiling more to get worse code. :-( This is why I said that my expectation is that people that have been using -client to get good startup are likely to be happier with the current incarnation of tiered because they'll still get better final performance than c1 could deliver but that apps using server can see some loss of performance because the system doesn't get code that is as good as before.
Apr 11 2007, 09:57:00 AM EDT PermalinkMy earliest memory of realizing I was left handed and that it was somehow different came when I was 4 or 5 and I tried to use a pair of scissors and I couldn't make them work. I was mystified as to why they refused to cut. My mother then told me I had to use my other hand to get them to work. I was pretty clumsy using them with the "wrong" hand. I tried turning the scissors upside down which would have sort-of worked if the finger holes weren't so annoying. Eventually I got over it.
When I was looking to buy good scissors for cutting the fiberglass cloth for building my airplane I noticed a pair of left handed scissors. I decided that after all this time I was going to finally have scissors that were made for me. Truth is in cutting the fiberglass cloth I mostly use a "pizza cutter" since it is much faster and doesn't disturb the cloth. The annoying thing was that I found that I couldn't really cut well with the left handed scissors. There was just something wrong about them them I couldn't place. I found that I could cut about as well with either hand using these scissors. That was disappointing.
Sometime later I gave the scissors to my wife and asked her to cut something. I figured it was about time for turn-about on the right handers of the world. She could cut with them ok but she had trouble cutting where she wanted and remarked that they "cut on the wrong side". That's when I realized why they didn't seem normal to me. I'm right eye dominant and even though the scissors felt more natural in my hand I couldn't see what I was doing unless I twisted my hand to get the blade out of the way. So I was still screwed.
I figure I'm resigned to using right handed scissors forever. A few years ago a friend of mine remarked how he had a left handed circular saw and how much better it was for him being left handed. I had never had a problem using a circular saw with either hand and just figured it was another one of those things I was trained out of though by no means as annoying as my first experience with scissors. I had always wondered about special ordering a left handed circular saw (although since mostly I use a table saw it wasn't high on the tool list). Now I'm thinking that it would be a total waste since it probably cuts on the wrong side for my eye dominance.
Apr 02 2007, 10:10:53 AM EDT Permalink
Tiered Compilation almost live
A few days ago I putback the change that now causes the server jvm (32bit) to be built as tiered. It doesn't actually enable the jvm to run tiered by default but both compilers are present and you can optionally ask for tiered. I'm still having trouble tuning my multi-tiers jvm and I decided that at the very least I ought to see what feedback there was from people adventuresome enough to try the tiered jvm. I expect that there are pathologies and that you may have to tune the thresholds a bit.
It looks like for the current schedule that this will end up in jdk7 build 12 which is still about a week away. If it isn't in b12 it will certainly be in lucky b13.
You can tell if you have the tiered jvm by running -server -version and you'll see something like:
Java HotSpot(TM) Tiered VM (..., mixed mode)
In order to actually get tiered operation you'll have to ask for it via the switch -XX:+TieredCompilation
You may also want to experiment with the compiler thresholds via -XX:CompileThreshold=<nnn> and -XX:Tier2CompileThreshold=<nnn>. Currently the thresholds are 1000/10000. I've found that 1000/35000 works ok for me. I'm curious to see where others find the best tradeoff.
I read today that John Backus died. As a compiler writer he was of course one of my heroes. I'd met him twice, once at Carnegie Mellon as an EE undergrad and once at UNC Chapel Hill when I was in grad school. The occasion in Chapel Hill was quite memorable.
He was invited to do a colloqium talk about FP. It was quite well attended. He was introduced by Fred Brooks who gives John a very glowing intro. Mr. Backus then gets up to give his talk but first he launches into a rant about how he is embarrassed to be in a state that hasn't ratified the Equal Rights Amendment and that the NC legislature should ratify it and that he wasn't going to come back to NC until the ERA was ratified by NC. He got a lot of applause from the audience over this stance. What made it so memorable was the fact the Fred Brooks had testified against the ERA in the NC legislature so this was quite a slap in the face to him.
I'm guessing that John never returned to NC...
FatCatAir site now live.
I've owned the domain fatcatair.com for several years but have never actually had a web site there. The intention was to have this site document the building of my Velocity among other things. Well I recently got a new laptop and that gave me the incentive to finally work on putting the website together. It is pretty crude at this point but it now has all of my construction photos with commentary. So at this point I'll probably not blog about the airplane builder here any more. For keeping up with the construction process you'll have to follow the work over there.
Mar 13 2007, 01:16:45 PM EDT
Permalink

