diff --git a/prdoc/pr_6315.prdoc b/prdoc/pr_6315.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..6fc070b43b353e2ca5165c62edc94254775dbd98
--- /dev/null
+++ b/prdoc/pr_6315.prdoc
@@ -0,0 +1,8 @@
+title: Migrate pallet-election-provider-support-benchmarking benchmark to v2
+doc:
+- audience: Runtime Dev
+  description: |-
+    Migrate pallet-election-provider-support-benchmarking benchmark to v2
+crates:
+- name: pallet-election-provider-support-benchmarking
+  bump: patch
diff --git a/substrate/frame/election-provider-support/benchmarking/src/inner.rs b/substrate/frame/election-provider-support/benchmarking/src/inner.rs
index 8cca0d459eac303028045c17f52694aa9140f782..7fb8c1bdb72906b65deebd033565b440b0578e5a 100644
--- a/substrate/frame/election-provider-support/benchmarking/src/inner.rs
+++ b/substrate/frame/election-provider-support/benchmarking/src/inner.rs
@@ -20,17 +20,19 @@
 
 use alloc::vec::Vec;
 use codec::Decode;
-use frame_benchmarking::v1::benchmarks;
+use frame_benchmarking::v2::*;
 use frame_election_provider_support::{NposSolver, PhragMMS, SequentialPhragmen};
-
-pub struct Pallet<T: Config>(frame_system::Pallet<T>);
-pub trait Config: frame_system::Config {}
+use sp_runtime::Perbill;
 
 const VOTERS: [u32; 2] = [1_000, 2_000];
 const TARGETS: [u32; 2] = [500, 1_000];
 const VOTES_PER_VOTER: [u32; 2] = [5, 16];
-
 const SEED: u32 = 999;
+
+pub trait Config: frame_system::Config {}
+
+pub struct Pallet<T: Config>(frame_system::Pallet<T>);
+
 fn set_up_voters_targets<AccountId: Decode + Clone>(
 	voters_len: u32,
 	targets_len: u32,
@@ -54,36 +56,47 @@ fn set_up_voters_targets<AccountId: Decode + Clone>(
 	(voters, targets)
 }
 
-benchmarks! {
-	phragmen {
-		// number of votes in snapshot.
-		let v in (VOTERS[0]) .. VOTERS[1];
-		// number of targets in snapshot.
-		let t in (TARGETS[0]) .. TARGETS[1];
-		// number of votes per voter (ie the degree).
-		let d in (VOTES_PER_VOTER[0]) .. VOTES_PER_VOTER[1];
-
-		let (voters, targets) = set_up_voters_targets::<T::AccountId>(v, t, d as usize);
-	}: {
-		assert!(
-			SequentialPhragmen::<T::AccountId, sp_runtime::Perbill>
-				::solve(d as usize, targets, voters).is_ok()
-		);
+#[benchmarks]
+mod benchmarks {
+	use super::*;
+
+	#[benchmark]
+	fn phragmen(
+		// Number of votes in snapshot.
+		v: Linear<{ VOTERS[0] }, { VOTERS[1] }>,
+		// Number of targets in snapshot.
+		t: Linear<{ TARGETS[0] }, { TARGETS[1] }>,
+		// Number of votes per voter (ie the degree).
+		d: Linear<{ VOTES_PER_VOTER[0] }, { VOTES_PER_VOTER[1] }>,
+	) {
+		let (voters, targets) = set_up_voters_targets::<T::AccountId>(v, t, d as _);
+		let result;
+
+		#[block]
+		{
+			result = SequentialPhragmen::<T::AccountId, Perbill>::solve(d as _, targets, voters);
+		}
+
+		assert!(result.is_ok());
 	}
 
-	phragmms {
-		// number of votes in snapshot.
-		let v in (VOTERS[0]) .. VOTERS[1];
-		// number of targets in snapshot.
-		let t in (TARGETS[0]) .. TARGETS[1];
-		// number of votes per voter (ie the degree).
-		let d in (VOTES_PER_VOTER[0]) .. VOTES_PER_VOTER[1];
-
-		let (voters, targets) = set_up_voters_targets::<T::AccountId>(v, t, d as usize);
-	}: {
-		assert!(
-			PhragMMS::<T::AccountId, sp_runtime::Perbill>
-				::solve(d as usize, targets, voters).is_ok()
-		);
+	#[benchmark]
+	fn phragmms(
+		// Number of votes in snapshot.
+		v: Linear<{ VOTERS[0] }, { VOTERS[1] }>,
+		// Number of targets in snapshot.
+		t: Linear<{ TARGETS[0] }, { TARGETS[1] }>,
+		// Number of votes per voter (ie the degree).
+		d: Linear<{ VOTES_PER_VOTER[0] }, { VOTES_PER_VOTER[1] }>,
+	) {
+		let (voters, targets) = set_up_voters_targets::<T::AccountId>(v, t, d as _);
+		let result;
+
+		#[block]
+		{
+			result = PhragMMS::<T::AccountId, Perbill>::solve(d as _, targets, voters);
+		}
+
+		assert!(result.is_ok());
 	}
 }