54 Commits

Author SHA1 Message Date
Michel Machado
96f9995d50 f3probe: implement block device support 2014-09-21 11:47:20 -04:00
Michel Machado
fadd9c805e f3probe: finish implemention of file device 2014-09-21 11:47:20 -04:00
Michel Machado
7f9f5972d0 f3probe: add unit test 2014-09-21 11:47:20 -04:00
Michel Machado
366e2d94bf f3probe: implement file device
NOT FINISHED
2014-09-21 11:47:19 -04:00
Michel Machado
28808f31b5 f3probe: move (missing) action to libprobe.c 2014-09-21 11:47:19 -04:00
Michel Machado
99dab5ca08 Make all applications share the same version 2014-09-21 11:47:19 -04:00
Michel Machado
b7790256f0 Skeleton of F3 probe 2014-09-21 11:43:59 -04:00
Michel Machado
2f10f2c068 Add experimental target to Makefile
f3probe, and any other future f3 application that isn't marked
as stable, will only compile with target experimental.
2014-09-21 11:43:59 -04:00
Michel Machado
55d201792c Bump next version to 4.0
Given that support for FreeBSD was added,
the next release will no longer be 3.1, but 4.0.
v4.0
2014-09-09 10:12:40 -04:00
Michel Machado
71433d3b78 Improve Makefile
- Change compiling flag -Wpedantic to -pedantic.
  Flag -Wpedantic is not available in older versions of gcc,
  what makes the life of some users unnecessarily harder.
  Not to mention that both flags work fine for F3.

- Allow make variable CC to be set externally.
  Some platforms favor other C compilers.
  For example, FreeBSD defaults to clang.

- Allow make variable CFLAGS to be extended externally.
  This helps packaging.

- Target clean to also remove *.d files.

The three first improvements were suggested by
Thomas Fischer and Uffe Jakobsen.
The discussion is available here:

https://github.com/AltraMayor/f3/issues/4
2014-09-05 07:58:08 -04:00
Uffe Jakobsen
b4e8e6c9da Fixes for FreeBSD 2014-09-02 10:30:43 -04:00
Michel Machado
397648282d f3write: account for option --end-at
This patch improves the progress percentage and estimate of
time to finish when option --end-at requires f3write to write
less than the amount of free space available.
2014-08-28 15:35:46 -04:00
Michel Machado
3263201548 Add script log-f3wr
This script runs f3write and f3read, echos their output to
the terminal, and records their output into a log file.
2014-08-28 15:11:31 -04:00
Michel Machado
9604f8b3df f3write.h2w: add support to all f3write's commands
The previous version of f3write.h2w didn't recognize
parameters --start-at= and --end-at=.

The new code of f3write.h2w also avoids overwritting
the environment variable PATH.
2014-08-22 10:26:12 -04:00
Michel Machado
1792cf1509 Prepare code for release of version 3.1 2014-08-15 17:30:38 -04:00
Michel Machado
d742672fa1 Add optional parameter --end-at=NUM to F3
This parameter allows users to execute F3 concurrently.

Moreover, users Mark and Wolfi have asked for similar parameters to
help analyzing very large flash drives.
2014-08-15 17:30:38 -04:00
Michel Machado
c98e580b94 General code review
- Comply with C99 standard.
- Adopt compiling flag -Wextra.
- Adopt compiling flag -Wpedantic.
- Drop use of PATH_MAX constant.
2014-08-12 13:56:01 -04:00
Michel Machado
01e8140ece Rewrite Makefile
This rewrite of the Makefile takes advantage of the fact that
the Makefile has been unified for all supported operating systems
to properly express source-file dependencies.
2014-08-12 13:56:01 -04:00
Michel Machado
66be2fddb9 Unify Makefile
The source now identifies the operating system with the help of
macros defined by GCC.

The macros are documented here:
http://sourceforge.net/p/predef/wiki/OperatingSystems/

This patch was inspired by a suggestion from Max Justicz.
2014-08-12 07:57:40 -04:00
Michel Machado
ba4d0a3fd8 Touch up README file 2014-08-12 07:55:52 -04:00
Michel Machado
11e2d2a3fa Add script f3write.h2w
This script calls truncate(1) after f3write runs successfully.
2014-07-15 15:58:34 -04:00
Michel Machado
b5dba24312 changelog: remove an undesirable header 2014-06-09 17:35:53 -04:00
Michel Machado
44ec7ce70e f3read: fix for Windows/Cygwin
Windows requires that the file descriptor passed to fdatasync(2)
to be writable.

Tom Hall reported the issue and proposed the solution.
v3.0
2014-06-03 11:31:35 -04:00
Michel Machado
7bd73cc434 Increment version to 3.0 2014-05-14 13:16:43 -04:00
Michel Machado
be1f587142 Adopt h2testw's file format
Now F3 and h2testw share the same file format.
Guenter Knauf has suggested this feature and
got the random-number generator used in h2testw from
Harald Bogeholz, the author of h2testw.

This change also addresses the issue that
the original random-number generator only fills
the first 32 bits of the 64 bits of the random numbers on
64-bit machines.
Besides the lower entropy on 64-bit machines, this issue was
making files generated on 32-bit and 64-bit machines incompatible.
Anselm Distelrath was the first to report this issue.
2014-05-14 11:44:13 -04:00
Michel Machado
1c50c85a4d Add a change log and a man page
Joao Eriberto Mota Filho contributed the change log and man page.
2014-05-14 10:34:44 -04:00
Michel Machado
a41f4a0c08 Add support for Windows/Cygwin
This commit is based on Tom Hall's patch.
2014-05-14 09:44:36 -04:00
Michel Machado
05eceb342d Fix report when .fff files are not fully read
Two things could go wrong when .fff files are not fully read:

1. The constraint "assert(*read_all || errno == EIO);"
   could fail because, according to the manual,
   feof(3) does not set errno(3), but gettimeofday(2),
   which is called after fread(3), does.

2. The tail message "NOT fully read" was never issued because
   the test was "read_all", and variable read_all was a pointer.
   Thus, the test was always true.

The not-fully-read error message now adds the output of
strerror(3) to guide the diagnose of the failure.

These bugs must be rare because they have been lurking around for
more than two years according to git's log.
They were only found due to a bug report by John Lussmyer on
September 21st, 2013.
2013-09-23 11:24:59 -04:00
Michel Machado
532bad04d6 Increment version to 2.2 v2.2 2013-02-08 15:14:28 -05:00
Michel Machado
f2a27db58c Add option parameter --start-at=NUM to F3
This parameter became important because F3 now can be used on
very large storages and one may want to resume the test process
from a failure or interruption.
2013-02-08 15:14:28 -05:00
Michel Machado
90b0bfbfcd Remove arbitrary limit on filenames
The filenames were from 0001.fff to 9999.fff.
This limit hasn't been a problem, but Anselm Distelrath reported
on February 8th, 2013 that isn't enough to test his system:
a RAID 6 with 18 hard drives of 3TB each.

Now filenames are from 1.fff to <INT_MAX>.fff.
2013-02-08 15:13:29 -05:00
Michel Machado
a642c2f3c8 Fix bug first reported by Martin Theiss
f3read finishes with following error message:

f3read: utils.c:39: number_from_filename: Assertion `is_my_file(filename)' failed.
2012-09-30 17:38:49 -04:00
Michel Machado
891e739b94 Minor code refinements
These refinements doesn't add or change a feature.
2012-09-28 10:54:05 -04:00
Michel Machado
c24c098c3c Report version and copyright in help message
This was added mainly to help users to identify
the version they have installed.
v2.1
2012-03-07 11:29:40 -05:00
Michel Machado
f7d57f76e0 Made f3write remove old F3 files in order
Messages like "Removing old file 0001.fff ..." were issued in
a file system dependent order.

This is a cosmetic change that takes advantage of
the function ls_my_files previously created for f3read.
2011-12-26 17:26:08 -02:00
Michel Machado
246f528e0a Refined flow control algorithm of f3write
The original algorithm had a slow reaction when there was
a large variation on the flow capacity.

The new algorithm even removed the need for the call to sync(2)
at beginning.
2011-12-26 17:25:47 -02:00
Michel Machado
d350745fc2 Verify that "all" F3 files are present
If an F3 file (i.e. *.fff) but the last one is missing,
f3read will report the missing file with a warning similar to this one:

Missing file 0001.fff

AND the following warning will be presented at the end of the report:

WARNING: Not all F3 files are available

Kenneth Arnold suggested this feature in an e-mail:
"I also noticed that if one of the files is completely missing, f3read
will still report no errors. The chance that this will happen on its
own without messing something else up is too small to worry about,
except possibly in the case that the device was actually read-only and
no files actually got created. In that case, f3read succeeds with 0
sectors OK and 0 sectors lost."

The last F3 file, if missing, is not reported because
it can be confusing.
The following example gives an idea of the problem:
a memory card wasn't empty when f3write was called and
the last F3 file created was 0010.fff with exactly 1GB;
here none F3 file is missing.
Then, some non-F3 files were removed, and f3read is called.
f3read would report a missing file even when non-F3 files were
removed!
The problem gets a little bit uglier if 0010.fff in the example
is less that 1GB, or the file system doesn't let f3write to
fill it up for a few bytes (this should be very rare, but
there's no guarantee that it cannot happen).

Finally, the implementation of this feature has a positive
side effect: f3read processes F3 files in ascending order,
that is, 0001.fff, 0002.fff, ..., NNNN.fff.
Before the order was file system dependent.

Magic numbers related to the number of digits in the F3 files'
names were eliminated.
2011-12-23 22:16:19 -02:00
Michel Machado
9a70cbbbf1 Added a rough approximation of posix_fadvise for Macs
Kenneth Arnold suggested using fcntl(fd, F_NOCACHE, 1)
to emulate posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED), and
careful reading of Mac's fcntl(2)[1] led me to approximate
POSIX_FADV_SEQUENTIAL with F_RDAHEAD.

[1] http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/fcntl.2.html
2011-12-23 17:21:33 -02:00
Michel Machado
3d603ab29e Added a very simple Makefile v2.0 2011-12-20 18:08:51 -05:00
Michel Machado
cbadb0c91c Reviewed code 2011-12-20 14:02:17 -05:00
Michel Machado
0510a6c08d Added support for Macs 2011-12-20 11:21:42 -05:00
Michel Machado
7c0be994e1 f3write now reports proper progress
In the previous version of f3write, fdatasync(2) was used to
show the progress printouts smoothly.
However, it slows down a lot the execution, and hurts
the writing speed measurement.

This new version finds out what is the writing speed of
the memory card being tested using an algorithm that reseables
TCP's congestion control algorithm, and keeps writing at that
speed; this allows smooth progress printouts.

f3write is even faster now!
2011-12-17 18:22:50 -05:00
Michel Machado
597aa0fb3c Added progress printout in f3read 2011-12-17 17:05:12 -05:00
Michel Machado
c03cbf4b4a Advising the kernel
* f3read
	As long as the kernel honors our advice, f3read doesn't
	ever read data from the system cache instead of reading
	from the memory card, and reading speed measurement  is
	improved.

* f3write
	Progress printout goes smoothly now.
2011-12-17 17:05:03 -05:00
Michel Machado
91083d787c Improved precision of speed measurements 2011-12-17 16:59:55 -05:00
Michel Machado
0135a9bfeb Improved user feedback
- Improved format of f3read's output, example:

$ ./f3read /media/F085-0201/
                     SECTORS      ok/corrupted/changed/overwritten
Validating file 0001.fff ... 2097152/        0/      0/      0
Validating file 0002.fff ... 1904000/        0/      0/      0

  Data OK: 1.91 GB (4001152 sectors)
Data LOST: 0.00 Byte (0 sectors)
	       Corrupted: 0.00 Byte (0 sectors)
	Slightly changed: 0.00 Byte (0 sectors)
	     Overwritten: 0.00 Byte (0 sectors)
Reading speed: 15.14 MB/s

- Added progress report per file to f3write.

Both suggestions were given by Michael D. Setzer II.
2011-12-17 15:52:17 -05:00
Michel Machado
d2a1a289fd Formated code following Linux's coding style
See file Documentation/CodingStyle in Linux's source code
for a reference of the style.

Used "indent -kr -i8" to help out.

Added a .gitignore to the repository.
2011-12-14 19:09:20 -05:00
Michel Machado
71cd829b9f Fixed block size bug
Nobody has reported this "bug", neither have I seen it coming out,
but I'm fixing it anyway.
It's based on Kenneth Arnold's fork of F3, which is available here:
https://github.com/kcarnold/f3

I also added a few lines in README.
2011-12-14 17:59:52 -05:00
Michel Machado
8bd4f358da Copied code from GNU Library C to improve portability
This version should compile and run on Apples, but since
I don't have one, I haven't tested it.
2011-12-14 15:48:15 -05:00
Michel Machado
572af0870e Version 1.1.3
Fixed some warning issued by GCC when compiling f3read.c on 64bits machines.
Nicolai Abruzzese was the first one to report this issue.
The outputs that he obtained were as follows:

f3read.c: In function 'report':
f3read.c:126: warning: format '%llu' expects type 'long long unsigned int', but argument 5 has type 'uint64_t'
f3read.c: In function 'iterate_path':
f3read.c:166: warning: format '%llu' expects type 'long long unsigned int', but argument 2 has type 'uint64_t'
f3read.c:166: warning: format '%llu' expects type 'long long unsigned int', but argument 3 has type 'uint64_t'
f3read.c:166: warning: format '%llu' expects type 'long long unsigned int', but argument 4 has type 'uint64_t'
f3read.c:166: warning: format '%llu' expects type 'long long unsigned int', but argument 5 has type 'uint64_t'
v1.1.3
2011-12-14 15:37:12 -05:00