-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Windows fio: failed to create dir (d:): 22 #870
Comments
This sounds very similar to #784. One trick is change the code to do a stat and then check the stat said it was a directory and if so there's nothing more to do and only try and do the mkdir if the stat says it failed (or wasn't a directory). |
Indeed, “d” is the root of a drive, and there is no directory-folder to be created. The error remains the same for
=D\:\
=D\:\\
=D\:\FIO (the directory is already there)
=D\:\\FIO (the directory is already there)
=D\:\FIO\ (the directory is already there)
=D\:\\FIO\ (the directory is already there)
The issue is that now I must choose between FIO with new truncate option that we need or use an older version of FIO without the truncate option. Not a good place to be.
Thank you
|
I really like that idea, and it improves the usability of the directory function a lot. |
Do you know what changed between let say from 3.12 to 3.16?
=D\:\\ or =D\:\\FIO works just fine in 3.12 given that there is a mount point for “D:\” or “D:\FIO”
The mkdir would be very nice but it would be good to get the functionality back from 3.12
Thanks
|
I'm guessing it's this commit:
You could try and run git revert on that, recompile, and see if that works for you. |
For some reason, my revert is failing. If you give me either the binaries or an executable, I will test it.
TIA
|
I've pushed a branch out, issue-870, which has the revert. Can you build and try that one? BTW, love your username, I'm a fan :-) |
You can find an installer for the build among the artifacts saved by appveyor. Choose the 64- or 32-bit build and then click on the artifacts tab: |
Thanks!
I have one 😊
… From: Jens Axboe ***@***.***>
Sent: Thursday, December 5, 2019 9:41 AM
To: axboe/fio ***@***.***>
Cc: Astolfo Rueda ***@***.***>; Author ***@***.***>
Subject: Re: [axboe/fio] Windows fio: failed to create dir (d:): 22 (#870)
I've pushed a branch out, issue-870, which has the revert. Can you build and try that one?
BTW, love your username, I'm a fan :-)
|
Nice, me too :-). Which one? |
GT Silver mkDec15 :) PCCB, Bucket Seats, carbon hood and rear spoiler, mag wheels and a dundon motorsports titanium headers and exhaust (sounds very much like OM)
What about you?
|
Nice! I've got an '18 GT3 Touring (pccb, buckets, etc), and also a '19 GT2RS. Planning on some kind of aftermarket exhaust in the spring for the GT3, undecided as of yet. The dundon headers+exhaust is a sweet combo. |
Now we are talking the GT2RS!!! I passed on the 18 GT3 so I could get the GT2RS but the dealer pulled a fast one on me and sold my car, my specs to someone else….so I got a Pista and went to another P dealer made a contract for the next GT3RS with my own specs.
FIO with the revert still not working when invoking –directory
.\fio.exe --thread --direct=1 --ioengine=windowsaio --directory=d\:\\ --filesize=410GB --rw=write --iodepth=128 --bs=1MB --nrfiles=1 --name=4-Node-NoRedirect --numjobs=8
4-Node-NoRedirect: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=128
...
fio-3.16
Starting 8 threads
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
fio: failed to create dir (d:): 22
I am sorry to be such a pain..
|
Different machine it works for files smaller than 5GB, I tried a 300TB volume (200TB free)
5GB
fio.exe --thread --direct=1 --ioengine=windowsaio --directory=d\:\\ --filesize=1MB --rw=write --iodepth=128 --bs=1MB --nrfiles=1 --name=4-Node-NoRedirect --numjobs=1 --fallocate=truncate
4-Node-NoRedirect: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=128
fio-3.16
Starting 1 thread
4-Node-NoRedirect: (groupid=0, jobs=1): err= 0: pid=13432: Thu Dec 5 12:07:03 2019
write: IOPS=83, BW=83.3MiB/s (87.4MB/s)(1024KiB/12msec)
slat (nsec): min=313363, max=313363, avg=313363.00, stdev= 0.00
clat (nsec): min=2606.2k, max=2606.2k, avg=2606161.00, stdev= 0.00
lat (nsec): min=2919.5k, max=2919.5k, avg=2919524.00, stdev= 0.00
clat percentiles (usec):
| 1.00th=[ 2606], 5.00th=[ 2606], 10.00th=[ 2606], 20.00th=[ 2606],
| 30.00th=[ 2606], 40.00th=[ 2606], 50.00th=[ 2606], 60.00th=[ 2606],
| 70.00th=[ 2606], 80.00th=[ 2606], 90.00th=[ 2606], 95.00th=[ 2606],
| 99.00th=[ 2606], 99.50th=[ 2606], 99.90th=[ 2606], 99.95th=[ 2606],
| 99.99th=[ 2606]
lat (msec) : 4=100.00%
cpu : usr=0.00%, sys=0.00%, ctx=0, majf=0, minf=0
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,1,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=128
6GB
fio.exe --thread --direct=1 --ioengine=windowsaio --directory=v\:\\ --rw=write --iodepth=128 --bs=1MB --nrfiles=1 --name=4-Node-NoRedirect --numjobs=1 --fallocate=truncate --filesize=6GB
4-Node-NoRedirect: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=128
fio-3.16
Starting 1 thread
4-Node-NoRedirect: Laying out IO file (1 file / 6144MiB)
fio: pid=9108, err=27/file:filesetup.c:106, func=ftruncate, error=File too large
4-Node-NoRedirect: (groupid=0, jobs=1): err=27 (file:filesetup.c:106, func=ftruncate, error=File too large): pid=9108: Thu Dec 5 12:10:23 2019
cpu : usr=0.00%, sys=0.00%, ctx=0, majf=0, minf=0
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,1,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=128
Run status group 0 (all jobs):
|
Well, doesn't sound like you are hurting with a Pista! Back to the issue at hand, do you have any way to build fio, or do you solely rely on pre-built binaries? Reason I ask is that we can do a git bisect if you can build on your own, if not I'll have to take a look at the repo. I don't have access to Windows, so I have a hard time testing that side of things. |
I can do builds if I can get the binaries
I like the GT2RS much better
|
Fix the wrong variable being passed into mkdir and enhance Windows mkdir emulation to be more robust against multiple slashes and dealing drive letters. This makes the following command line work on Windows fio --name=dirtest --directory='D\:\' --size=4k --bs=4k --rw=read Fixes axboe#784 and axboe#870 Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
I've made a crude PoC that might address this issue over on https://github.com/sitsofe/fio/tree/windows_mkdir . It's still got debugging and is kinda ugly but it might serve as a start... Binaries are available via CI on https://ci.appveyor.com/project/sitsofe/fio/builds/29398964 . |
On further investigation even with my hack I think we're getting double directory path concatenation. Line 1606 in fd9882f
set_name_idx() (Line 1238 in fd9882f
FIO_OS_PATH_SEPARATOR ) that tries to add a directory prefix to filenames. However we then try and add the directory prefix again to the new with-directory filename over in Line 922 in fd9882f
|
- Fix double directory prefix concatnationn that was happening after 95af8dd ("filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIO") refactored some code. - Enhance Windows mkdir emulation to be more robust against multiple slashes and dealing with drive letters. This makes the following command line work on Windows: fio --name=dirtest --directory='D\:\1' --filename='2\fio.tmp' \ --size=4k --bs=4k --rw=read Fixes axboe#784 and axboe#870 Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
OK I've pushed an experimental change to https://github.com/sitsofe/fio/tree/windows_mkdir to address that too. This might also fix #864 ... |
Thanks! I will compile and test today
|
It looks like it is working!
Thanks man!
|
It is working
Thank YOU!
|
@Gt3pccb OK I need to clean the patch up a bit more before submitting (hopefully in the next week) but can I include your name/address as a tested-by line in the commit? (FYI: I've also edited your replies in the Github web issue tracker to remove the email footer and quotes to make them a bit easier to read). |
Yes you can and am testing it now in longer runs.
Thanks!
|
@ Sitsofe, if you know my email address could you send me an email? I would like to discuss a few things offline.
TIA
|
FIO errors 4xXR2: Laying out IO file (1 file / 40960MiB) there is plenty of space on the volume |
- Fix double directory prefix concatenation that was happening after 95af8dd ("filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIO") refactored some code - Stop always using '/' and switch to using FIO_OS_PATH_SEPARATOR when concatanating directory to filename in set_name_idx() - Change the permissions directories are created with to have the execute bit so they can be entered(!) - Fix bug where filenames that were absolute unix paths would create extra directories - Remove the configure mkdir test and introduce fio_mkdir to hide mkdir platform differences - Make Windows mkdir emulation more robust against multiple slashes and dealing with drive letters This commit makes the following command line work on Windows when the D:\1 directory exists: ./fio --name=dirtest --directory='D\:\1' --filename='2\\fio.tmp' \ --size=4k --bs=4k --rw=read And the following now works on macOS/Linux when the /tmp/1 directory exists: ./fio --name=dirtest --directory='/tmp/1' --filename='2//fio.tmp' \ --size=4k --bs=4k --rw=read Fixes axboe#784 , axboe#864 and axboe#870 Tested-by: Astolfo Rueda <astolfor@microsoft.com> Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
- Fix double directory prefix concatenation that was happening after 95af8dd ("filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIO") refactored some code - Stop always using '/' and switch to using FIO_OS_PATH_SEPARATOR when concatanating directory to filename in set_name_idx() - Change the permissions directories are created with to have the execute bit so they can be entered(!) - Fix bug where filenames that were absolute unix paths would create extra directories - Remove the configure mkdir test and introduce fio_mkdir to hide mkdir platform differences - Make Windows mkdir emulation more robust against multiple slashes and dealing with drive letters This commit makes the following command line work on Windows when the D:\1 directory exists: ./fio --name=dirtest --directory='D\:\1' --filename='2\\fio.tmp' \ --size=4k --bs=4k --rw=read And the following now works on macOS/Linux when the /tmp/1 directory exists: ./fio --name=dirtest --directory='/tmp/1' --filename='2//fio.tmp' \ --size=4k --bs=4k --rw=read Fixes axboe#784 , axboe#864 and axboe#870 Tested-by: Astolfo Rueda <astolfor@microsoft.com> Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
- Fix double directory prefix concatenation that was happening after 95af8dd ("filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIO") refactored some code - Stop always using '/' and switch to using FIO_OS_PATH_SEPARATOR when concatenating the directory value to the filename in set_name_idx() - Change the permissions directories are created with to have the execute bit so they can be entered(!) - Fix bug where filenames that were absolute unix paths would prevent the creation of intermediate directories - Remove the configure mkdir test and introduce fio_mkdir to hide mkdir platform differences - Make Windows mkdir emulation more robust against multiple slashes after the drive letter and when dealing dealing with with paths containing drive letters in general This commit makes the following work on Windows: ./fio --thread --name=doubleslashtest \ --filename='C\:\\Windows\Temp\fio.tmp' --size=4k --bs=4k --rw=read The next example now works when D:\1\ exists but D:\1\2\ doesn't: ./fio --thread --name=mkdirtest --directory='D\:\1' \ --filename='2\fio.tmp' --size=4k --bs=4k --rw=read The following now works on macOS/Linux when /tmp/1/ exists but /tmp/1/2/ doesn't: ./fio --name=mkdirtest --directory='/tmp/1' \ --filename='2/fio.tmp' --size=4k --bs=4k --rw=read Fixes axboe#784 , axboe#864 and axboe#870 Tested-by: Astolfo Rueda <astolfor@microsoft.com> Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
@Gt3pccb I don't think your latest error is related to this issue and I'm going to guess you can't hit it when you make a file that is 31GBytes or less in size... Can you spin off separately? |
- Fix double directory prefix concatenation that was happening after 95af8dd ("filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIO") refactored some code - Stop always using '/' and switch to using FIO_OS_PATH_SEPARATOR when concatenating the directory value to the filename in set_name_idx() - Change the permissions directories are created with to have the execute bit so they can be entered(!) - Fix bug where filenames that were absolute unix paths would prevent the creation of intermediate directories - Remove the configure mkdir test and introduce fio_mkdir to hide mkdir platform differences - Make Windows mkdir emulation more robust against multiple slashes after the drive letter and when dealing dealing with with paths containing drive letters in general This commit makes the following work on Windows: ./fio --thread --name=doubleslashtest \ --filename='C\:\\Windows\Temp\fio.tmp' --size=4k --bs=4k --rw=read The next example now works when D:\1\ exists but D:\1\2\ doesn't: ./fio --thread --name=mkdirtest --directory='D\:\1' \ --filename='2\fio.tmp' --size=4k --bs=4k --rw=read The following now works on macOS/Linux when /tmp/1/ exists but /tmp/1/2/ doesn't: ./fio --name=mkdirtest --directory='/tmp/1' \ --filename='2/fio.tmp' --size=4k --bs=4k --rw=read Fixes axboe#784 , axboe#864 and axboe#870 Tested-by: Astolfo Rueda <astolfor@microsoft.com> Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
I think the main part of the original issue is fixed by 5e52534 ... |
@Gt3pccb just to be clear - has the original issue in the description been resolved with master of fio? If so could you close this issue? Thanks! |
Closing due to lack of reply from @Gt3pccb. If this issue is still happening with the latest fio (see https://github.com/axboe/fio/releases to find out which version that is) please reopen. Thanks! |
I am having this issue with FIO compiled from the latest branch because we need the fix for first allocations.
This command used to work used fine and FIO is being run as Admin and permissions are everyone full
--directory=d\:\
PS D:> FIO --thread --direct=1 --ioengine=windowsaio --filesize=500GB --rw=write --iodepth=256 --bs=1MB --nrfiles=1 --name=XR2-4-Node --numjobs=1
--directory=d\:\
XR2-4-Node: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=windowsaio, iodepth=256
fio-3.16
Starting 1 thread
fio: failed to create dir (d:): 22
Run status group 0 (all jobs):
Any help would be great!
The text was updated successfully, but these errors were encountered: