From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Stancek Date: Tue, 15 Mar 2016 10:56:09 -0400 (EDT) Subject: [LTP] [PATCH v2] syscalls/readahead02: use bdi max readahead limit In-Reply-To: <20160315145217.GB27377@rei.lan> References: <20160315145217.GB27377@rei.lan> Message-ID: <1529501478.9901798.1458053769595.JavaMail.zimbra@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it ----- Original Message ----- > From: "Cyril Hrubis" > To: "Jan Stancek" > Cc: ltp@lists.linux.it, klamm@yandex-team.ru > Sent: Tuesday, 15 March, 2016 3:52:17 PM > Subject: Re: [LTP] [PATCH v2] syscalls/readahead02: use bdi max readahead limit > > Hi! > > +static long get_device_readahead(const char *fname) > > +{ > > + FILE *f; > > + struct stat st; > > + unsigned long ra_kb = 0; > > + char buf[256]; > > + > > + if (stat(fname, &st) == -1) > > + return -1; > > + snprintf(buf, sizeof(buf), "/sys/dev/block/%d:%d/queue/read_ahead_kb", > > + major(st.st_dev), minor(st.st_dev)); > > + f = fopen(buf, "r"); > > + if (!f) > > + return -1; > > + > > + if (fscanf(f, "%lu", &ra_kb) != 1) { > > + fclose(f); > > + return -1; > > + } > > + > > + fclose(f); > > Any reason why we don't do SAFE_FILE_SCANF() instead of fopen(), > fscanf(), fclose() here? We call tst_brkm(TBROK, ...) when this call > returs -1 in the read_testfile() anyway... True. I was planning to ignore failure, since this sys file doesn't exist on older kernels, but with added kvercmp this is no longer the case. I'll replace it with SAFE_FILE_SCANF. Regards, Jan > > > + return ra_kb * 1024; > > +} > > + > > /* read_testfile - mmap testfile and read every page. > > * This functions measures how many I/O and time it takes to fully > > * read contents of test file. > > @@ -206,16 +230,26 @@ static void read_testfile(int do_readahead, const > > char *fname, size_t fsize, > > unsigned long time_start_usec, time_end_usec; > > off_t offset; > > struct timeval now; > > + long readahead_size; > > + > > + if ((tst_kvercmp(4, 4, 0)) >= 0) { > > + readahead_size = get_device_readahead(fname); > > + if (readahead_size == -1) > > + tst_brkm(TBROK, cleanup, "get_device_readahead"); > > + } else { > > + /* default to 2M, which should work on kernels prior to 4.4 */ > > + readahead_size = 2 * 1024 * 1024; > > + } > > + tst_resm(TINFO, "max readahead size is: %ld", readahead_size); > > > > fd = open(fname, O_RDONLY); > > if (fd < 0) > > tst_brkm(TBROK | TERRNO, cleanup, "Failed to open %s", fname); > > > > if (do_readahead) { > > - /* read ahead in chunks, 2MB is maximum since 3.15-rc1 */ > > - for (i = 0; i < fsize; i += 2*1024*1024) { > > + for (i = 0; i < fsize; i += readahead_size) { > > TEST(ltp_syscall(__NR_readahead, fd, > > - (off64_t) i, 2*1024*1024)); > > + (off64_t) i, readahead_size)); > > if (TEST_RETURN != 0) > > break; > > } > > -- > > 1.8.3.1 > > > > > > -- > > Mailing list info: https://lists.linux.it/listinfo/ltp > > -- > Cyril Hrubis > chrubis@suse.cz >