From: Andreas Dilger Date: Fri, 30 Jun 2023 19:41:23 +0000 (-0600) Subject: LU-16937 utils: avoid lctl shmget() if not needed X-Git-Tag: 2.15.57~56 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=1e9ca8bbf444a7a18505199d8e3da05fd731685e;p=fs%2Flustre-release.git LU-16937 utils: avoid lctl shmget() if not needed lctl is dynamically allocating an IPC shared memory segment during every startup, even though it is only needed for a small number of uncommon debug commands: shmget(IPC_PRIVATE, 65680, 0600) = 196641 shmat(196641, NULL, 0) = 0x7f752b1c5000 shmctl(196641, IPC_RMID, NULL) = 0 This setup can be moved to sub-commands that actually need it. Signed-off-by: Andreas Dilger Change-Id: I41c790ce7cba2d9c48c1ec06eb23eb94aa548242 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/51526 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Arshad Hussain Reviewed-by: Timothy Day Reviewed-by: Oleg Drokin --- diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index e1e1513..b7c808a 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -305,6 +305,9 @@ static int shmem_setup(void) int rc; int shmid; + if (shared_data) + return 0; + /* Create new segment */ shmid = shmget(IPC_PRIVATE, sizeof(*shared_data), 0600); if (shmid == -1) { @@ -655,6 +658,10 @@ int jt_opt_threads(int argc, char **argv) argv[0], threads, argv[3], cmdstr); } + rc = shmem_setup(); + if (rc) + return rc; + shmem_reset(threads); sigemptyset(&sigset); @@ -1178,6 +1185,10 @@ int jt_obd_md_common(int argc, char **argv, int cmd) } #ifdef MAX_THREADS + rc = shmem_setup(); + if (rc) + return rc; + if (thread) { shmem_lock(); /* threads interleave */ @@ -1408,6 +1419,10 @@ int jt_obd_create(int argc, char **argv) next_time.tv_sec -= verbose; ostid_set_seq_echo(&data.ioc_obdo1.o_oi); + rc = shmem_setup(); + if (rc) + return rc; + for (i = 1, next_count = verbose; i <= count && shmem_running(); i++) { /* * base_id is 1 so we don't need to worry about it being @@ -1562,6 +1577,10 @@ int jt_obd_test_setattr(int argc, char **argv) (uintmax_t)objid, ctime(&start.tv_sec)); ostid_set_seq_echo(&data.ioc_obdo1.o_oi); + rc = shmem_setup(); + if (rc) + return rc; + for (i = 1, next_count = verbose; i <= count && shmem_running(); i++) { if (objid > OBIF_MAX_OID) { fprintf(stderr, "errr: %s: invalid objid '%llu'\n", @@ -1654,6 +1673,10 @@ int jt_obd_destroy(int argc, char **argv) next_time.tv_sec -= verbose; ostid_set_seq_echo(&data.ioc_obdo1.o_oi); + rc = shmem_setup(); + if (rc) + return rc; + for (i = 1, next_count = verbose; i <= count && shmem_running(); i++, id++) { if (id > OBIF_MAX_OID) { @@ -1846,6 +1869,10 @@ int jt_obd_test_getattr(int argc, char **argv) (uintmax_t)objid, ctime(&start.tv_sec)); ostid_set_seq_echo(&data.ioc_obdo1.o_oi); + rc = shmem_setup(); + if (rc) + return rc; + for (i = 1, next_count = verbose; i <= count && shmem_running(); i++) { if (objid > OBIF_MAX_OID) { fprintf(stderr, "errr: %s: invalid objid '%llu'\n", @@ -2035,6 +2062,10 @@ int jt_obd_test_brw(int argc, char **argv) stride = len; #ifdef MAX_THREADS + rc = shmem_setup(); + if (rc) + return rc; + if (thread) { shmem_lock(); if (nthr_per_obj != 0) { @@ -3145,9 +3176,6 @@ static void signal_server(int sig) int obd_initialize(int argc, char **argv) { - if (shmem_setup() != 0) - return -1; - register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH); return 0;