Reply 20 of 37, by Gelip
0xDEADBEEF wrote on Yesterday, 06:59:1.0.0.2 has been released on github.
Enjoy.
Yeaa! Now driver is OK:
- size only 23.7 KB
- detect name NVMe disk
- correct version number 1.0.0.2 in nvme2k.sys file information
Thx 😀
0xDEADBEEF wrote on Yesterday, 06:59:1.0.0.2 has been released on github.
Enjoy.
Yeaa! Now driver is OK:
Thx 😀
0xDEADBEEF wrote on Yesterday, 06:54:Wow! The win9x driver is really cool.
Please send back merge requests if possible!Look at my baby grow! 🤣!
I am in testing and bugs hunting now (near to the end I suppose). And when I can say that I can not add or change even one line of code I will contact you for merging source base. And I'm insulating 9x specific code from beginning by conditional compilation so I think it will not be too hard .
0xDEADBEEF wrote on Yesterday, 06:59:SIV now
thinks it isreports it as a UDMA100 device.
SIV reports it as a UDMA100 device as that is what the NVMe2K driver reports it as when SIV does an IDE_COMMAND_IDENTIFY.
SIV reports Bus SCSI as NVMe2K reports SCSI rather than NVMe, I just noticed that NVMe2K fails to set the TRIM Data Set Management bit (word 169 bit 0) and maybe DIPM Support + DZAT Support.
Also note that SMART Read Thresholds failed, it usually works.
Once/if NVMe2K correctly supports IOCTL_STORAGE_QUERY_PROPERTY StorageAdapterProtocolSpecific Property PropertyStandardQuery or IOCTL_SCSI_MINIPORT IOCTL_NVME_PASS_THROUGH SIV V5.84 Beta-09 and later should report NVMe on W2K and later. I plan to update SIV to also do this on Windows NT V4.00/V3.51 if needed.
It would be helpful to get a trace from an NT4 system similar to as below which is from one of my W2K systems.
SIV32L V5.84 Beta-09 with [".\SIV32L.exe" -dbgsdm]SIV32L OPEN 0.000 Intel SSDSC2BF180A4H pciide |_|\\.\SIVDRIVER\Device\Ide\IdeDeviceP0T0L0-2SIV32L SATA 0.059 S0.0.0 Intel SSDSC2BF180A4H (CVDA535200F718 pciide (ATA) Attributes 30°CSIV32L SATA 0.059 S0.0.0 Intel SSDSC2BF180A4H (CVDA535200F718 pciide (ATA) cur 30 ces 0 typ 12SIV32L OPEN 0.000 SK Hynix HFM128GD JTNG-8310A nvme2k [=]\\?\scsi#disk&ven_hfm128gd&prod_jtng-8310a&rev_8000#5&22f455c&0&000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}SIV32L SATA 0.000 S5.0.0 SK Hynix HFM128GDJTNG-8310A (FJ09N70 nvme2k (ATA) Attributes 40°CSIV32L SATA 0.000 S5.0.0 SK Hynix HFM128GDJTNG-8310A (FJ09N70 nvme2k (ATA) cur 40 ces 0 typ 12SIV32L NVMe 0.000 S5.0.0 SK Hynix HFM128GDJTNG-8310A (FJ09N70 nvme2k (ATA) NEQ IOCTL_STORAGE_QUERY_PROPERTY sts 87 The parameter is incorrect.SIV32L NVMe 0.000 S5.0.0 SK Hynix HFM128GDJTNG-8310A (FJ09N70 nvme2k (ATA) @ \\.\SCSI5: IOCTL_NVME_PASS_THROUGH sts 1117 The request could not be performed because of an I/O device error.SIV32L NVMe 0.000 S5.0.0 SK Hynix HFM128GDJTNG-8310A (FJ09N70 nvme2k (NEP) IOCTL_SCSI_PASS_THROUGH sts 1117 The request could not be performed because of an I/O device error.SIV32L OPEN 0.000 Intel SS DPED1D280GA nvme2k [=]\\?\scsi#disk&ven_intel_ss&prod_dped1d280ga&rev_e201#5&3b6d00ef&0&000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}SIV32L SATA 0.000 S4.0.0 Intel SSDPED1D280GA (PHMB736001DA280 nvme2k (ATA) Attributes 42°CSIV32L SATA 0.000 S4.0.0 Intel SSDPED1D280GA (PHMB736001DA280 nvme2k (ATA) cur 42 ces 0 typ 12SIV32L NVMe 0.000 S4.0.0 Intel SSDPED1D280GA (PHMB736001DA280 nvme2k (ATA) NEQ IOCTL_STORAGE_QUERY_PROPERTY sts 87 The parameter is incorrect.SIV32L NVMe 0.000 S4.0.0 Intel SSDPED1D280GA (PHMB736001DA280 nvme2k (ATA) @ \\.\SCSI4: IOCTL_NVME_PASS_THROUGH sts 1117 The request could not be performed because of an I/O device error.SIV32L NVMe 0.000 S4.0.0 Intel SSDPED1D280GA (PHMB736001DA280 nvme2k (NEP) IOCTL_SCSI_PASS_THROUGH sts 1117 The request could not be performed because of an I/O device error.SIV32L SATA 0.031 S0.0.0 Intel SSDSC2BF180A4H (CVDA535200F718 pciide (ATA) Attributes 30°CSIV32L SATA 0.000 S4.0.0 Intel SSDPED1D280GA (PHMB736001DA280 nvme2k (ATA) Attributes 43°CSIV32L SATA 0.000 S5.0.0 SK Hynix HFM128GDJTNG-8310A (FJ09N70 nvme2k (ATA) Attributes 40°C
yeah, smart threshold fails sort of by design. not implemented yet because frankly i have no idea what made up data to put there 😉 its on my todo list.
NVME_PASS_THROUGH is interesting. I wonder how that works. but not sure we would ever receive it in nvme2k when running on windows 2000 or similar since upper layers wouldnt let us. when running SIV on win2k with nvme2k I do not see any unhandled IOCTLs coming to nvme2k.
Also, right now scsi pass through and scsi pass through direct are not implemented either. I will look at them when I will have some time.
we dont report trim because we dont have unmap command implemented either. i am open to the idea but there is no way to test it. older os will never send trim/unmap commands and and the driver will not work with any newer os that would support the UNMAP command.
SweetLow wrote on Yesterday, 10:51:0xDEADBEEF wrote on Yesterday, 06:54:Wow! The win9x driver is really cool.
Please send back merge requests if possible!Look at my baby grow! 🤣!
I am in testing and bugs hunting now (near to the end I suppose). And when I can say that I can not add or change even one line of code I will contact you for merging source base. And I'm insulating 9x specific code from beginning by conditional compilation so I think it will not be too hard .
awesome! do you have to change a lot of stuff to get win9x working? i see the inf file is a completely different beast.
LSS10999 wrote on 2025-11-12, 04:53:Just did a check with Dependency Walker on WinNT 3.51 and it seems as of v1.0.0.1 the nvme2k driver has no dependency issues against NT 3.51's SCSIPORT.SYS, so it can be used.
Though this can't say for sure whether it works there. I may consider try this on my X99 system when I have time, as UniATA failed there with my SATA disks in both IDE and AHCI modes, even after using patched SCSIDISK.SYS.
Just tested this on my X99 system and NT 3.51. Unfortunately it doesn't work as expected.
OMORES' NT4 version simply gave me INACCESSIBLE_BOOT_DEVICE error. The newly released v1.0.0.2 doesn't immediately fail with error, but it was very slow and eventually hung after managed to show the first dot (.). I'm using the MPS MultiProcessor HAL as it does work on this board, and can enable as many CPU core as permitted by the RegisteredProcessors registry entry. Haven't tested with (single-core) Standard PC HAL yet.
I also tried installing Win98SE on it, but was not successful, either. Even after applying all patches (rloew's and PATCH9X), it hangs right after running "win.com". I did copy disk drivers such as AHCI.PDR and NVME2K.MPD (as well as corresponding INF files) before trying to boot Win98SE, though I cannot verify anything as the boot process hangs long before they are involved. The system was installed without ACPI (/p i) as a good portion of devices would not show up in Device Manager if installed with ACPI enabled (which is the default).
On the other hand, on my board, NVMe disks perform considerably slower than SATA disks (in AHCI mode) while in DOS. I wonder if this has anything to do with CSM implementation. SATA disks work best in AHCI mode and file operations are blazing fast, yet with NVMe disks everything feels a bit sluggish. A notable example would be, when running PATCHMEM, it took several seconds extracting VXDs from VMM32 on NVMe whereas on SATA it's done almost immediately.
LSS10999 wrote on Yesterday, 16:51:UniATA failed there with my SATA disks in both IDE and AHCI modes, even after using patched SCSIDISK.SYS.
Are you using latest UniATA 0.47b version?
0xDEADBEEF wrote on Yesterday, 15:30:when running SIV on win2k with nvme2k I do not see any unhandled IOCTLs coming to nvme2k.
Which version of SIV? What does SIV32X -DBGSDM > SIV_DBGOUT.log report?
As I said you need SIV V5.84 Beta-09 or later, I have now release SIV V5.84 so use that.
http://sweetlow.orgfree.com/download/nvme9x.zip
1. Finally fixed controller shutdown bug (in the end it is generic problem, not Windows 9x)
2. Code analysis of previous bug highlighted one more interesting bug - slowdown of submitting commands (read/write including). Aida64, 412 vs 456 MB/s, reading 2M blocks on my Samsung MZVLQ256 (PCI-E gen3 & 2 lanes). Fixed.
3. MaximumTransferLength is 256K now
0xDEADBEEF wrote on Yesterday, 15:32:do you have to change a lot of stuff to get win9x working? i see the inf file is a completely different beast.
>do you have to change a lot of stuff to get win9x working?
No. Changes are well localized into nvme2k.* & utils.* And as I said - code is pretty good and readable 🆙
>i see the inf file is a completely different beast
It is just your file cleared from NT stuff and few lines needed for Win9x added.
By the way, why are these lines in .INF?
HKR, "Parameters\Device", "MaximumSGList", 0x00010001, 0x00000200
HKR, "Parameters\Device", "NumberOfRequests", 0x00010001, 0x00000020
; Enable tagged command queuing
HKR, "Parameters\Device", "MaxQueueDepth", 0x00010001, 0x00000020
They never read in driver code AFAIK or may be I missing something?
Gelip wrote on Yesterday, 18:38:LSS10999 wrote on Yesterday, 16:51:UniATA failed there with my SATA disks in both IDE and AHCI modes, even after using patched SCSIDISK.SYS.
Are you using latest UniATA 0.47b version?
A correction... I needed to use fixed SCSIPORT.SYS as well as SCSIDISK.SYS. The former addressed an issue that it would skip enumerating subsequent functions if it encounters one that does not exist, so in some newer chipsets the SATA controller may not be picked up.
The official v0.47b binary will not work as it imported some symbols not present in NT 3.51. I'm using a build that I compiled myself.
I also added/enabled X99 related entries for UniATA as for some reasons that was missed/commented out IIRC. Sadly that made no difference.
Also, IIRC even with Standard PC HAL I could not boot the system on SATA disk with UniATA. Haven't tested this with NVMe yet, but it kind of defeats the purpose when the board like most Intel chipsets do work with the MPS HAL for being able to use more CPU cores...
EDIT: I just tested the Standard PC HAL there. It performs even worse (the HDD led hardly ever blinks compared to MPS MultiProcessor HAL). I guess the board's UEFI CSM doesn't really handle NVMe disks as well as AHCI SATA disks, considering the comparably abysmal I/O performance I noticed while in DOS. I don't know if there's any other AHCI driver than UniATA for older OSes, that might work on NT 3.51 without giving me the dreaded INACCESSIBLE_BOOT_DEVICE error...
PS: I did read these ru-board posts and there were mentions about "fixed" CSM implementation... not sure if my board needs one, but the board's UEFI BIOS was too delicate to be modded. I could at best enable the hidden Advanced menu, but any further modding would result in the board failing to POST.
A side note: on my board, rloew's AHCI.PDR driver for Win9x could trigger I/O errors (Disk I/O error BSOD warning about possible data loss) that will register on the disk's SMART table, which Windows will then consider the disk having developed bad sectors forcing surface scans that I have to disable it from MSDOS.SYS. My board doesn't really need a disk driver for AHCI SATA, however, as even in MS-DOS compatibility mode (without any driver installed), I/O performance is very good, just that I won't be able to use animated cursors. It's for this reason I decided to give NVME9X a try as well, but it seems the board simply can't boot Win98SE installed on a NVME partition regardless.
LSS10999 wrote on Yesterday, 16:51:OMORES' NT4 version simply gave me INACCESSIBLE_BOOT_DEVICE error. The newly released v1.0.0.2 doesn't immediately fail with error, but it was very slow and eventually hung after managed to show the first dot (.). I'm using the MPS MultiProcessor HAL as it does work on this board, and can enable as many CPU core as permitted by the RegisteredProcessors registry entry. Haven't tested with (single-core) Standard PC HAL yet.
UPDATE: NVMe2K v1.0.0.2 does boot on my X99 system's NT3.51 instance, with the MPS MultiProcessor HAL. However, the boot time is way... too... long...
Takes about 5-10 minutes to show the first dot, and 10-15 minutes after that it reached 4 dots.
I did not count the time after it reached 4 dots, as I left home to do some other stuffs at that point. When I get back home about 3 hours later I saw the system has booted successfully. UniATA indeed cannot work and it failed to start, so I'm disabling that for now.
Logging in and opening the File Manager looks fine. Control Panel applets are being loaded at decent speed. Opening the Display applet so I can install VBEMP took a while to render.
Copying a file from one disk to another took a long while. Looks like reading is fine but writing is the problem.
EDIT: Now I'm not really clear what's going on. Sometimes disk operations finish without delay, yet other times disk operations take quite a few seconds to complete, be it read or write. Anyway, the fact that NVME2K driver does work is good enough news for now.
EDIT 2: After some further testing it seems the overall boot time on that system with NVME2K driver is about 40-50 minutes, certainly less than an hour.
@LSS10999
In WinNT 4.0 SP6, SATA and NVMe drives work OK. SATA disk performance on UniATA 0.47b driver is the same in both IDE and AHCI modes:
Gelip wrote on Today, 09:31:@LSS10999
In WinNT 4.0 SP6, SATA and NVMe drives work OK. SATA disk performance on UniATA 0.47b driver is the same in both IDE and AHCI modes:
AFAICT the NVMe disks work fine and steady on other OSes (such as Linux, WinXP, Win7). I'm not noticing any performance degradations there. It's just with legacy environments (DOS, as well as NT 3.51) the performance are being awful, even worse than SATA disks.
SATA disks work best with AHCI mode on this board. With IDE mode I'm capped at 300MB/s speed while in DOS, whereas with AHCI mode I can easily reach rated speed (~550MB/s).
With NVME2K I can at least boot NT 3.51 (whereas with UniATA I could not) but right now it takes too long to boot, and the disk performance is unstable. I'm not sure if the issue lies with NVME2K or NT 3.51's SCSI subsystem.
LSS10999 wrote on Today, 08:29:EDIT 2: After some further testing it seems the overall boot time on that system with NVME2K driver is about 40-50 minutes.
That seems way too long, when I boot NT 3.51 SP5 on my Gigabyte 965P-DS3 which has a Intel Core 2 Quad Q9550 (Yorkfield) @ 2.83GHz as I recall the boot time is much the same as for NT 4.00 SP6. The disk is an Intel SSDSC2BF180A5L SSD running in EIDE mode.
Have you checked if there is anything in the system event log, I wonder if lots of read/write timeouts or similar are happening.
Out of interest which CPU is it and how many CPUs show up? On my system all 4 show up and 32 are registered, see the SIV [Windows] panel.
Does SIV V5.84 report the NVMe drive SMART information? Look at Menu->Devices->SMART then press the [UDMA 100] button.
Note: the V4.00 is a result of newshell2 being installed and I generated the screen shot from the SIV save files on a W10 system.
red-ray wrote on Today, 12:31:LSS10999 wrote on Today, 08:29:EDIT 2: After some further testing it seems the overall boot time on that system with NVME2K driver is about 40-50 minutes.
That seems way too long, when I boot NT 3.51 SP5 on my Gigabyte 965P-DS3 which has a Intel Core 2 Quad Q9550 (Yorkfield) @ 2.83GHz as I recall the boot time is much the same as for NT 4.00 SP6. The disk is an Intel SSDSC2BF180A5L SSD running in EIDE mode.
Yeah it's really that long. Taking as much as 50 mins to boot. The fact that NVME2K works on this system is already a good enough improvement. UniATA never worked, be it IDE or AHCI mode, on SATA disks.
Shutdown/Reboot, however, is okay. The time it takes to shutdown/reboot the system is fairly normal, and the process looks clean.
red-ray wrote on Today, 12:31:Have you checked if there is anything in the system event log, I wonder if lots of read/write timeouts or similar are happening.
No errors observed in the event log. The disks' performance is indeed unstable during use after taking so long to boot, but I'm not seeing any critical error yet.
red-ray wrote on Today, 12:31:Out of interest which CPU is it and how many CPUs show up? On my system all 4 show up and 32 are registered, see the SIV [Windows] panel.
Xeon E5-2699v4 (22 cores). Right now booting with RegisteredProcessors set to 8 works (so I can use 8 cores). Just backed up the current system state in case further tests with higher core counts fail.
Back then when I tested more cores on VirtualBox the maximum cores I could use is 8. Not sure about real HW, but this is the max mentioned by BearWindows here.
wrote:SMP, HyperThreading, Multicore systems are supported or any other, compatible with MPS 1.1, MPS 1.4 specifications
In SMP systems - maximum 8 (after kernel MPS patch 😀 - 32) CPUs are supported.
The kernel patch is not publicly available. Need to personally ask BearWindows about that.
red-ray wrote on Today, 12:31:Does SIV V5.84 report the NVMe drive SMART information? Look at Menu->Devices->SMART then press the [UDMA 100] button. […]
Does SIV V5.84 report the NVMe drive SMART information? Look at Menu->Devices->SMART then press the [UDMA 100] button.
Note: the V4.00 is a result of newshell2 being installed and I generated the screen shot from the SIV save files on a W10 system.
Sorry, I haven't tried SIV yet.
LSS10999 wrote on Today, 13:37:red-ray wrote on Today, 12:31:Out of interest which CPU is it and how many CPUs show up? On my system all 4 show up and 32 are registered, see the SIV [Windows] panel.
Xeon E5-2699v4 (22 cores). Right now booting with RegisteredProcessors set to 8 works (so I can use 8 cores). Just backed up the current system state in case further tests with higher core counts fail.
I didn't do anything special to get 32 registered, maybe the 3.51 that came with my MSDN is 32 and most versions are 8.
Nice CPU, when you get round to running SIV it would be good if you generated Menu->File->Save Local files so I can see how well SIV does at reporting it when many of the CPUs are absent from Windows. SIV32 only sees 32 of my 36 Intel Core i9 Extreme 9980XE (Skylake-X) CPUs and get's it correct so it should be OK.
For stock NT 3.51 use the ASCII SIV32O.exe, if newshell2 is installed use the Unicode SIV32N.exe.
red-ray wrote on 35 minutes ago:I didn't do anything special to get 32 registered, maybe the 3.51 that came with my MSDN is 32 and most versions are 8. […]
LSS10999 wrote on Today, 13:37:red-ray wrote on Today, 12:31:Out of interest which CPU is it and how many CPUs show up? On my system all 4 show up and 32 are registered, see the SIV [Windows] panel.
Xeon E5-2699v4 (22 cores). Right now booting with RegisteredProcessors set to 8 works (so I can use 8 cores). Just backed up the current system state in case further tests with higher core counts fail.
I didn't do anything special to get 32 registered, maybe the 3.51 that came with my MSDN is 32 and most versions are 8.
Nice CPU, when you get round to running SIV it would be good if you generated Menu->File->Save Local files so I can see how well SIV does at reporting it when many of the CPUs are absent from Windows. SIV32 only sees 32 of my 36 Intel Core i9 Extreme 9980XE (Skylake-X) CPUs and get's it correct so it should be OK.
For stock NT 3.51 use the ASCII SIV32O.exe, if newshell2 is installed use the Unicode SIV32N.exe.
Sadly, it seems very likely that more than 8 cores are not going to work. Set RegisteredProcessors to 24 (which is above my CPU's core count of 22) and the system stuck at startup before showing the amount of processors (cores) and memory. Fortunately with Win2K's NTLDR (which can boot NT 3.51) I can revert the change via "Last Known Good Configuration". However, considering it taking too long to boot each time, I can't make too many attempts.
Still... I'm not sure what might be causing the slow startup. The HDD LED blinks intermittently from what I could see, possibly indicating the disk I/O operations were not consistent (being blocked by something).
NOTE: By RegisteredProcessors I mean the DWORD value entry in HKLM\System\CurrentControlSet\Control\Session Manager. NT3.51 Server will create it with value set to 4, while Workstation will not create it, defaulting to 2. Does this entry exist in your NT 3.51 instance, and is it set to 32? On the other hand, if you have less than 8 actual CPU cores, NT 3.51 will certainly boot fine however high this value has been set.