The experience was okay, I would take it again. We went all the way from the start in Milano to Messina. The train left Milano on time and pretty much remained on time except for a minor delay in Rome (15 minutes).
We had a 3 person sleeper cabin for ourselves. They do serve a little breakfast - espresso, shrink-wrapped croissants, some biscuits with Marmelade and some salty crackers. Not a great meal, but good enough. If you’re going beyond Messina to Syracuse or Palermo, you should bring food along - or pick something up on the ferry.
The rolling stock is old - as in the toilets are still the kind where you can see the tracks, not a closed system. So they close the toilets a while before you get on the ferry.
Still, the ride was comfortable enough to actually sleep, even though the top bunk is a bit short for people of my size (1,85) - but neither wife nor kid could be convinced to climb up there.
Going to bed in Milano and waking up with a view of the coast was amazing. The beds fold up and you have a proper 3 seat cabin for the rest of the ride.
The ride was amazingly cheap - we paid 160 EUR for two adults and one 8year old, one way, so 330 in total.