Re: [PATCH] cyclictest: Delay setting of main_affinity_mask after creating threads.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Sebastian,


On 6/15/22 13:38, Sebastian Andrzej Siewior wrote:
Assuming the current affinity mask of the task is 0x31 (CPUs 0, 4, 5).
Starting cyclictest with '-S' option will fork the following threads:
- monitor, mask 0x31
- measure thread 1, mask 0x01
- measure thread 2, mask 0x10
- measure thread 3, mask 0x20

works as expected. Using the options '-S --mainaffinity=0' leads to:
- monitor, mask 0x01
- measure thread 1, mask 0x01
- measure thread 2, mask 0x01
- measure thread 3, mask 0x01

because the mask of the main thread has been reset early to 0x01 and
does not allow a CPU mask outside of this mask while setting the
affinity for the new threads.

Delay setting the affinity of the main/ monitor thread after the
measuring threads have been deployed. This leads to the following

Since starting the threads represents some work that can disturb
the threads, shouldn't the main thread be migrated to the
'mainaffinity' mask early as it is right now ?

I think it would be better to:
1. Save the initial mask of the main thread somewhere
2. Set the affinity of the main thread
3. Use the initial mask when setting the affinity of the threads

Regards,
Pierre

state:
- monitor, mask 0x01
- measure thread 1, mask 0x01
- measure thread 2, mask 0x10
- measure thread 3, mask 0x20

Signed-off-by: Sebastian Andrzej Savior <bigeasy@xxxxxxxxxxxxx>
---
  src/cyclictest/cyclictest.c | 9 +++++----
  1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index be8285a072b4e..cbf8d00293ec6 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
@@ -1816,10 +1816,7 @@ int main(int argc, char **argv)
  		printf("Online CPUs = %d\n", online_cpus);
  	}
- /* Restrict the main pid to the affinity specified by the user */
-	if (main_affinity_mask != NULL) {
-		set_main_thread_affinity(main_affinity_mask);
-	} else if (affinity_mask != NULL) {
+	if (affinity_mask != NULL) {
  		set_main_thread_affinity(affinity_mask);
  		if (verbose)
  			printf("Using %u cpus.\n",
@@ -2094,6 +2091,10 @@ int main(int argc, char **argv)
  			fatal("failed to create thread %d: %s\n", i, strerror(status));
}
+	/* Restrict the main pid to the affinity specified by the user */
+	if (main_affinity_mask != NULL)
+		set_main_thread_affinity(main_affinity_mask);
+
  	if (use_fifo) {
  		status = pthread_create(&fifo_threadid, NULL, fifothread, NULL);
  		if (status)



[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux