A review of surface roughness generation in ultra-precision machining