Saints only reached the final in 2017 but few gave them a chance of progressing against City given how poor their league form has been this season.
Pep Guardiola opted for a rotated side and ended up paying the price. The City boss even resorted to a number of changes at half-time, including the introduction of Erling Haaland, but to no avail.
Southampton started the stronger and had the first chance when Stefan Ortega headed in a volley from Saints centre-back Duje Caleta-Caro. It was a warning sign and a decisive first-half quick-fire double followed not long after.
Sekou Mara got his first goal for the club after Lyanco won the ball and slotted the ball into the box, a wonderfully clinical finish. Moments later, Moussa Djenepo doubled that lead when he drove into the box and lifted a curling effort over Ortega’s head to send St Mary’s into a state of delirium.
As well as Haaland, Kevin De Bruyne was among the City stars who came on at half-time, but the home side did enough to soak up the pressure without conceding many chances. Julian Alvarez had a late chance but goalkeeper Gavin Bazunu leveled it.
Southampton player ratings (4-2-3-1)
GK: Bazunu (7); RB: Lyanco (8), CB: Caleta-Car (7), CB: Salisu (7), LB: Walker-Peters (7); CM: Lavia (8), CM: Diallo (7); RM: Djenepo (8), AM: Ward-Prowse (7), LM: Armstrong (6); ST: Mara (8)
Subs: Perraud (7), Elyououssi (7), Adams (7), Orsic (N/A)
Man City player ratings (4-3-3)
GK: Ortega (5); RB: Cancelo (5), CB: Walker (5), CB: Laporte (6), LB: Gomez (6); CM: Palmer (5), CM: Phillips (6), CM: Gundogan (6); RW: Foden (6); ST: Alvarez (5), LW: Grealish (6)
Subs: Ake (6), Akanji (6), De Bruyne (6), Haaland (5), Rodri (6)