A method implemented by a network device for orchestrating execution of a polling thread of a software-based switching program on a heterogeneous multicore processor, wherein the heterogeneous multicore processor includes a plurality of clusters of processing cores, wherein processing cores in the same cluster of the plurality of clusters have the same processing capacity, and wherein processing cores in different clusters of the plurality of clusters have different processing capacities, the method comprising: causing the polling thread to be executed on a first processing core in a first cluster of the plurality of clusters; determining an average number of active processing cycles used by the polling thread over a period of time, wherein the active processing cycles used by the polling thread include processing cycles during which the polling thread is reading packets from an input queue, processing packets for forwarding, and placing packets into an output queue and the active processing cycles do not include idle processing cycles during which the polling thread polls an empty input queue; determining whether the average number of active processing cycle is greater than a high threshold associated with the first processing core or lower than a low threshold associated with the first processing core; and causing the polling thread to be moved to a second processing core in a second cluster of the plurality of clusters in response to a determination that the average number of active processing cycle is greater than the high threshold associated with the first processing core, wherein the second processing core runs at a higher frequency and consumes more power than the first processing core, and causing the polling thread to be moved to a second processing core in a second cluster of the plurality of clusters in response to a determination that the average number of processing cycle is lower than the low threshold associated with the first processing core, wherein the second processing core runs at a lower frequency and consumes less power than the first processing core. causing the polling thread to be executed on a first processing core in a first cluster of the plurality of clusters; determining an average number of active processing cycles used by the polling thread over a period of time, wherein the active processing cycles used by the polling thread include processing cycles during which the polling thread is reading packets from an input queue, processing packets for forwarding, and placing packets into an output queue and the active processing cycles do not include idle processing cycles during which the polling thread polls an empty input queue; determining whether the average number of active processing cycle is greater than a high threshold associated with the first processing core or lower than a low threshold associated with the first processing core; and causing the polling thread to be moved to a second processing core in a second cluster of the plurality of clusters in response to a determination that the average number of active processing cycle is greater than the high threshold associated with the first processing core, wherein the second processing core runs at a higher frequency and consumes more power than the first processing core, and causing the polling thread to be moved to a second processing core in a second cluster of the plurality of clusters in response to a determination that the average number of processing cycle is lower than the low threshold associated with the first processing core, wherein the second processing core runs at a lower frequency and consumes less power than the first processing core.