Родился 4 июля 1849 года, образование получил в Полоцком кадетском корпусе, из которого перешёл 23 августа 1865 года в Павловское военное училище. 17 июня 1867 года выпущен подпоручиком в 28-й пехотный Полоцкий полк.
17 июля 1867 года Смирнов получил чин прапорщика и был переведён в лейб-гвардии Московский полк, в котором последовательно получил чины подпоручика (17 апреля 1870 года), поручика (30 августа 1872 года), штабс-капитана (30 августа 1872 года).
В 1874 году Смирнов по 2-му разряду окончил прохождение курса наук в Николаевской академии Генерального штаба и был назначен состоять при штабе Харьковского военного округа, 5 марта 1875 года назначен старшим адъютантом штаба 36-й пехотной дивизии; 13 апреля произведён в капитаны и с 1 декабря того же года состоял помощником старшего адъютанта штаба Харьковского военного округа.
4 ноября 1876 года Смирнов занял должность старшего адъютанта штаба 7-го армейского корпуса, в рядах которого принял участие в русско-турецкой войне, за отличие был награждён орденом св. Анны 3-й степени.
С 11 ноября 1877 года Смирнов состоял при штабе Одесского военного округа, 16 апреля 1878 года произведён в подполковники и 12 апреля 1881 года — в полковники; с 1 августа по 15 сентября 1881 года отбывал цензовое командование батальоном в 57-м пехотном Модлинском полку.
Назначенный 20 июля 1884 года начальником штаба 5-й пехотной дивизии, Смирнов на этой должности пробыл почти семь лет, 1 апреля 1891 года он получил в командование 131-й пехотный Тираспольский полк.
26 февраля 1894 года Смирнов за отличие по службе был произведён в генерал-майоры и назначен начальником штаба 9-го армейского корпуса; 4 июля 1901 года он был назначен начальником 18-й пехотной дивизии, причём 6 декабря того же года был произведён в генерал-лейтенанты.
С 9 июля 1906 года Смирнов командовал 2-м Сибирским армейским корпусом, 13 апреля 1908 года произведён в генералы от инфантерии и 28 июля 1908 года возглавил 20-й армейский корпус, во главе которого и выступил на театр начавшейся Первой мировой войны. Высочайшим приказом от 25 октября 1914 года за отличия на фронте Смирнов был награждён орденом св. Георгия 4-й степени.
20 ноября 1914 года на Смирнова было возложено командование 2-й армией и 5 декабря последовал официальный приказ об утверждении его в этой должности.
В марте 1916 года Смирнов вынужден был оставить фронт из-за тяжёлой болезни и его армия, наносившая главный удар в ходе Нарочской операции, была передана под командование генерала А. Ф. Рагозы.
В марте 1917 года, после смещения генерала А. Е. Эверта, Смирнов недолго командовал Западным фронтом и 8 апреля 1917 года был отчислен в распоряжение военного министра, 22 апреля Смирнов вошёл в число членов Военного совета.
После Октябрьской революции Смирнов переехал из Петрограда в район Минеральных Вод. В сентябре 1918 года он был взят в заложники Красной Армией и 18 октября вместе с генералами Н. В. Рузским, Р. Д. Радко-Дмитриевым и другими зарублен в Пятигорске. По другим данным расстрелян большевиками в Киеве в феврале-апреле 1919 года.
Среди прочих наград Смирнов имел ордена: