Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Dariusz Piatkowski

Pages: 1 2 [3] 4 5 ... 48
Programming / Re: OS2AHCI interface?
« on: April 15, 2020, 04:54:37 pm »
Pete, attached - Simply unzip over previous release and Delete existing PMsmartctl.INI file...

No, that did not make any difference.

I'm curious, what is this written in? I'm trying to make the changes to PMDskmon which is written in C, as is the smartmontools utility. 

I think this is WDSibyl right, so that's PASCAL, or PASCAL-like?

In the meantime I continued on with my debugging here...looks like I'm either not passing the right parameter in my DosDevIOCtl call, or (most likely) the data structure mapping the utility originally had does not account for differences between DANIS506 and OS2AHCI.

So the next step is to pull the OS2AHCI sources (gotta get SVN setup for that first) and review those first.

Programming / Re: OS2AHCI interface?
« on: April 14, 2020, 09:16:35 pm »
Hi Pete,

Alright, you brought up some good questions and re-reading my previous post I can see that my description wasn't really clear.

Let me explain how I occasionally shut OFF cpu cores here. So my machine is AMD Phenom II X6 based box. 6 cores total, but when booting with 6 the WPS locks up at the blue-screen. So I have the 6th core disabled in BIOS and that allows me to boot up just fine. Never tracked this down, may have something to do with the motherboard having built-in video chipset, along with a few other things that my OS/2 configuratoin can not use.

Anyways, I boot up with 5 cores. Now, at times I need to shut off 4 of the 5 cores. For example, ANPM when started in full 5-core SMP mode will soft-lock the WPS, only CAD gets me out, but that's a system re-boot. So to avoid that outcome I flip to 1-core mode, start ANPM and the minute the window is built I flip back to 5-core mode. Again, haven't figured this out yet, tried playing with numerous approaches such as setting the EXE to SMP-unsafe, etc. I suspect somewhere on my machine is either a DLL, or perhaps a hardware setup that's the root cause.

To do this OFF/ON flip I use setproc.exe, which is a most handy utility by Yuri Dario.

Ok, so now let me answer below...

...If I understand you correctly this happened the first time you started PMsmartctl - you had not previously run PMsmartctl and set the location of smartctl.exe ?

As long as I am in the full SMP mode, so more than a single core active this always happens. Even after I manually edited the INI file and had the correct path to the smartctl.exe file, having re-started the program I still resulted in having a frozen non-responsive window.

The only time the app actually works is when I run in the limitted 1-core mode, as described above. So basically any other time I start it again, it will only work if I'm running in that 1-core mode, all other times it goes back to the soft-lock where just the app is non responsive. I can close it down with lSwitcher's Close=>Quit and do not have to use the harsher SIGKILL.

...I do not think there is anything that is SMP unsafe in the startup code but will have a rummage through to see if I can find possible cause(s). At first glance the only thing that stands out is that I have not explicitly initialised a couple of variables...

Hmm, good to hear that it is working fine on your end. It would trully be the icing on the cake if troubleshooting this issue would allow me to also figure out why full-core SMP mode here occasinally causes the problems I see. Right now my issue is limitted to impacting just your app, it does not lock up the whole WPS as it most often does with a handful of other apps I have.

...That could make a difference if there is some "garbage" in the location used for the variable smartctlPath as that would mean the check for smartctlPath having a value would return True which would then set the smartctlFlag indicating smartctl.exe was available triggering a call to "smartctl --scan" which could cause the startup problem...

OK, so on this subject I am curious about something. Once the path to smartctl.exe is provided the app continues to do something before I hit my lock. After all, the normally grayed out PATA and SATA fields do actually un-gray and I should be able to select which device I want to pull up the information for. So in your code the lock I see must happen after this point in time, which I'm guessing happens once smartctl (perhaps?) returns some valid list of devices maybe???

...I'll have to do a little bit of re-coding and post a new build a little later for you to try. Will also have a rummage through underlying OS/2 API calls made during startup to see if there is anything known to be SMP unsafe but I do not think there is...

Since we are in the coding forum, care to share your code? i ask b/c I pulled the source for smartmontools that Dave pointed me to. There is a specific OS/2 section in there (see os_os2.cpp and os_os2.h) which I am working throught right now to understand the differences between DANIS506 and OS2AHCI, I think I may have spotted something but I'm not quite sure yet. Given that your app does successfully allow me to pick one of my AHCI devices though would imply that your code at least knows how to differentiate between them and therefore must be issuing some call to determine what device is hooked to what controller. I'd love to see that code.

...Out of interest will PMsmartctl run with 4 cores enabled on your system?...

It runs, but goes into that non-responsive mode (I call soft-lock). Othewrise, only 1-core mode allows me to actually use it normally.

Programming / Re: OS2AHCI interface?
« on: April 14, 2020, 05:20:04 pm »
Hey Pete,

Hi All

I have just quickly tested the smartmontools-7_0-1 package (from and, so far, it seems that PMsmartctl is happy to use that release...

I just tried your app here, it comes up fine, but once it does the window is non-responsive. It is in the foreground, no information is populated, it is waiting for me to tell it where to find smartctl but I can not actually push the Browse button.

So I manually updated the INI file, this now has the app showing me active radio buttons for PATA hd0 and SATA ahci0-ahci2, but I sitll can not click anywhere in the window itself.

Hmm...strange I thought, but hey, running in SMP mode here and it's not like that hasn't been a problem here and there. So I shut off 4 of the 5 CPU cores, re-started the app and indeed things work!!! So I would guess for some reason the app is not SMP-safe...

Otherwise it looks pretty nice, looking fwd to more testing Pete!

Programming / Re: OS2AHCI interface?
« on: April 14, 2020, 04:20:22 am »
Hey you guys!

Awesome conversation.

So let me shed a bit more light on what I had in mind. Way waaaayyy back when, I was heavily using the HPFS386 fs, I wrote some small stuff that basically allowed me to pull a bunch of cache details. I basically wanted to learn more about the fs internals and wasn't happy with the 'cache386 /stats:d' output.

Now fast fwd a bit and currently I'm using JFS, but I've moved on to the OS2AHCI driver, v2.07.

This means that any previous disk monitoring utilities that relied on DANIS506$ to be present are no longer working.

I currently use smartmontools RPM package, which works quite fine and supports both IDE and AHCI devices:

Code: [Select]
Name        : smartmontools
Arch        : pentium4
Epoch       : 1
Version     : 7.0
Release     : 1.oc00
Size        : 1.0 M
Repo        : installed

So from that perspective I will stick with this and won't be going back to the release.

However, to convert the PMDskMon utility to AHCI mode I need to understand what needs to be changed from the current DANIS506 interface. I wish I could find where the source for the RPM release of smartmontools is, because that clearly has a working AHCI interface. But given the lack of this information I'm taking a stab at removing all S.M.A.R.T. data collection functionality from the PMDskMon utility itself first to see if simply re-pointing it to OS2AHCI$ might work.

If this fails my next step is to look at the Netlabs project page for OS2AHCI which can be found here =>, I will do a SVN source pull and will take a look at the driver details (for what it's worth, as I expect much of this to be over my head lol).

Eventually I'd like to actually write a new utility that really exposes all the pertinent details a storage device has. There are numerous such non-OS/2 utilities out there, so some good interfaces to pick from. More importantly I would like this to also have some of the fs specific stuff in there, so things that pertain to JFS cache for example, etc. This is a very long-term plan though, so I'm happy to see that we already have some alternatives created by our very own!!!  ;)

Programming / OS2AHCI interface?
« on: April 13, 2020, 03:20:08 pm »
Having recently made the move from DANIS506 to AHCI I've lost some of the IDE reporting functionality that was provided through little utilities like DiskMon, or even SmartMon.

So I thought I'd take a stab at building the AHCI versions of these, first one up being DiskMon since that provides a real-time snapshot of drive's throughput and temperature metrics, and I thought it would be a good excercise to try out my current GCC environment.

Alright, so here is the thing, I know I need to 're-point' the interface to the OS2AHCI, namely something like this:

Code: [Select]
  rc = DosOpen ("\\DEV\\IBMS506$", &hDevice, &ActionTaken, 0,  FILE_SYSTEM,
  if (rc) exit (rc);

needs to read more along the lines of this:

Code: [Select]
  rc = DosOpen ("\\DEV\\OS2AHCI$", &hDevice, &ActionTaken, 0,  FILE_SYSTEM,
  if (rc) exit (rc);

But i'm guessing it's nowhere near as simple as that. I mean I did make the change, the program succeesfully built and attempting to run it locked up the machine...LOL, I was expecting that. Strangely where it locked up was on a temperature fetch, and that may be more due to the fact that DiskMon is using the SMART reporting functionality of SmartMon (or so say the comments). I'm sure it's more complicated, but that is at least my starting point.

OK, so back to the post subject line: where do I obtain the definition of OS2AHCI interface?

I guess the only thing I can compare it to are the code samples that are included with the DANIS506 stuff, and those are very clear. I found nothing on the AOS pages on this, but before I log a ticket or post to the Testers' List I thought I'd ask here first.


Storage / Re: How to force a folder 'refresh' from REXX?
« on: April 11, 2020, 10:46:54 pm »

I assume 'MENUITEMSELECTED=503' references the 'Folder Refresh' function? If so, what's the best place for me to check to understand all these?
It took a while, but I've found it in REXX Tips & Tricks:

Code: [Select]
start view /s rxtt36 "IDs for the setup string MENUITEMSELECTED"

Yup, got it, I was able to find it, excellent pointer, thank you again!

Storage / Re: How to force a folder 'refresh' from REXX?
« on: April 11, 2020, 10:43:18 pm »
Hi Remy,
...Don't create any rexx and just use the provide tool under ArcaOS.

See here:

Good suggestion, but it is not quite the problem I am seeing. During re-boot all is good...but as the NAS located folder is updated at the source (NAS) the changes take a long time, or sometimes never get reflected on the OS/2 side of things (so WPS). This is the reason why I want to force the folder refresh to happen on on-going basis.

Your link did give me some other ideas though, the suggestion made there is to use OO.EXE to issue a listing of folder contents (where output goes to nul), thus forcing a refresh of the folder. Since I am already using OO.EXE that may keep things more consistent.

The thing is that the results I'm getting are somewhat incosistent, namely, I can point to that NAS folder through it's objectid or through the actual filesystem name:
Code: [Select]
[G:\util\misc]oo /I 0x36C68
36C68  ----  XFolder  "V:\PUBLIC\SYSLOG"

[G:\util\misc]oo /I 0x3C7E6
3C7E6  ----  XFolder  "V:\PUBLIC\SYSLOG\202004"

[G:\util\misc]oo /I v:\public\syslog\202004
3C7E6  ----  XFolder  "V:\PUBLIC\SYSLOG\202004"

[G:\util\misc]oo /L v:\public\syslog\202004
0 objects in V:\PUBLIC\SYSLOG\202004

The attempt to list the contents "/L" shows 0 objects...but I certainly have files there:

Code: [Select]
[G:\]dir V:\PUBLIC\SYSLOG\202004

The volume label in drive V is NETDRIVE.
Directory of V:\PUBLIC\SYSLOG\202004

 4-09-20   6:15a     <DIR>           0  .
 4-09-20   6:15a     <DIR>           0  ..
 4-07-20  11:58p     60644           0
 4-05-20   6:43p     33464           0
 4-03-20  10:52p     84015           0
 4-02-20  10:50p      7451           0
 4-09-20   6:15a      2351           0
 4-08-20  11:57p     72364           0
 4-08-20  10:47p      7053           0
 4-10-20  11:52p      2644           0
 4-06-20  11:34p     57043           0
 4-02-20  10:30p     82303           0
 4-09-20  11:24p     63599           0
 4-10-20  11:59p     56475           0
 4-05-20  11:59p     57198           0
 4-02-20  11:00p      2351           0
 4-04-20  10:57p     71024           0
 4-11-20   1:52p      3860           0
 4-01-20   9:58p      3468           0
 4-11-20   4:27p     56320           0
 4-01-20  10:48p     64493           0
       21 file(s)     788120 bytes used
                   2308202 M bytes free

Assuming that '/L' only shows non-file objects in folder (as the OO.EXE) help explains I thought I would test on the parent folder (V:\PUBLIC\SYSLOG) which certainly will show the data specific log folder (202004), still that returns 0 as well.

I will try this out though, maybe enough to force a refresh.

Storage / Re: How to force a folder 'refresh' from REXX?
« on: April 11, 2020, 06:35:49 pm »
Hi Andreas,

Code: [Select]

CALL RxFuncAdd 'SysLoadFuncs', 'REXXUTIL', 'SysLoadFuncs'
CALL SysLoadFuncs

Dir = STRIP( ARG( 1))
IF LEFT( Dir) = '"' THEN
   PARSE VAR Dir '"'Dir'"'

CALL SysSetObjectData Dir, 'MENUITEMSELECTED=503;'


Thank you.

There is a small correction to the above, where you want to check for the presence of " character you need to pass number of places to the LEFT function, therefore what works here is:

Code: [Select]
IF LEFT( Dir,1) = '"' THEN

I assume 'MENUITEMSELECTED=503' references the 'Folder Refresh' function? If so, what's the best place for me to check to understand all these? I have the "OS/2 REXX from Bark to Byte" book here, so now that you've pointed me  to the SysSetObjectData call I am able to go a bit further with this...

Storage / How to force a folder 'refresh' from REXX?
« on: April 11, 2020, 04:30:43 pm »
I want to be able to run an on-demand (scheduled most likely) forced refresh of a particular folder, is there a call in REXX that would allow me to do so?

Basically I'm thinking the equivalent of 'RMB=>Refresh Now'.

Reason being: the built-in logic of XWP refresh causes frequent traps here (not hard trap, but soft trap) where XWP folders stop populating, this always requires either a Desktop re-start, or a complete re-boot. Since shutting this feature OFF I have been able to maintain pretty good WPS stability and rarely have the need today to force a re-boot.

However, there are certain folders, like my NAS LOG directory (where I'm sending all the various system LOGs) which of course are being populated very frequently and which my machine has a hard time detecting on a timely basis. Result being that from CLI I can see LOG udpates having been done, but through WPS these updated entries do not show up.

My thinking therefore is to schedule a forced refresh, run every 5 mins (I will play around with this) so that such particular folders are always up-to-date.

The NAS box access is through NetDrive and is a Samba share, I am currently using RL Walsh's OO.EXE to set the default folder view on several NAS folders to XVIEW, but as best as I can tell there is no option there for me to do a folder refresh.


So here is my combo:
1) MSI 880G-E45 motherboard

How much RAM is available below 4Gb border ?

Theseus tells me: "RAM available to OS/2 = CFF0B000 bytes (3327.043M)", I think this is a good amount of RAM, by the time WPS comes up and all my stuff starts up I usually have about 2970M left with about 210M of free shared memory (this is really the biggest problem actually as it routinely gets exhausted after a couple of days of steady FF use).

Hardware / Re: PCIe - SATA3 card choices?
« on: April 07, 2020, 05:27:15 pm »
Hey Doug!

The latest available (with Arca Noae subscription) is v2.07. The "port #3 interrupt error status: 0x40000001; restarting port" is not an indication of a flaky driver. It is an indication of cheap hardware, that takes it's time initializing. Ignore that. It only happens at boot time.

When I had the DVD drive hooked up to the AHCI port I saw these messages getting posted to the log. In other words, executing multiple 'copy os2ahci$ ahci.log' caused new warnings to show up. Anyways, as I stated earlier on in this thread the issue is resolved by moving the DVD off of the AHCI port.

So at first I figured OK, 1 = SATA1, 2 = SATA2 and 3 = SATA3, although given where the standard is today I'm not quite sure how to interpret 0 =...???

0 is exactly what it says "fastest" that the hardware is capable of. If your machine supports SATA2, that is probably as fast as it will go...An SSD introduces a bunch of variables, that can affect device speed especially when writing (search for the SSD Wiki)...

So as I previously posted, the problem I have here is that the AHCI controller results are poorer than the comparable IDE results. That appears to be at least partially driven by different optimization/settings the AHCI driver settles on. In this case the default '0 = maximum' setting is clearly slower than the matching DANIS506 settings on that very same device. Which means that the device/bus interface itself is capable of higher throughput BUT with AHCI drivers it is unable to achieve this result.

...Os2ahci has two parameters, that I use. One is /n (NCQ), which is useful when the drive needs to move heads to get to data. I don't have a SSD, but I would expect that this setting would not be appropriate for an SSD...

I do in fact use that on my SSD, the reason being that with SSDs in particular this allows the SSD controller to figure out the best command distribution for the various read/write requests. Without the NCQ being enabled this is strictly driven by the sequential nature of the commands being passed to the SSD from the OS, and in that case our poor ol' OS knows nothing about SSD capabilities.

So instead of building NEW stuff how about just defining a 'best-fit' combination of hardware we can all source today (may not be brand spankin' NEW off the shelf components, but still can be found in the channel) instead?

My point being the following: my current hardware is pretty robust. After all, I have a working SMP config here, out of the box audio, NIC and USB (non 3.x). Dual-head 1920x1200 display supported through SNAP drivers. SDD support with both IDE and AHCI drivers (AHCI switch just having happened recently, like a week ago).

What would I like to improve? Sure, the standard stuff, modern CPU, UEFI support, etc., but that's not the focus of the thread.

So here is my combo:
1) MSI 880G-E45 motherboard

ALTERNATIVE => MSI 890FXA-GD65, which has SATA3 support out-of-the-box

2) CPU - AMD Phenom II X6 1100T
Easy to find on eBay, etc.

3) RAM - 8 Gig
4 regular OS/2 use

SSD => Samsung 850 Evo
HDD => WD Raptor and Caviar Blue (nothing fancy here, although the Raptor was a screaming BEAST way back when, 10k RPM still kicks butt...LOL)

SNAP => 1920x1200 support for multi-head displays, only coveat is that SNAP will only drive 1 panel through DVI, the 2nd panel has to go through RGB converter

Now I would tell you that is under $500 USD modern day spend, heck, shop around smartly and this could be under $300.

Hardware / Re: PCIe - SATA3 card choices?
« on: April 06, 2020, 10:45:08 pm »
Hey Pete,

...Which build of os2ahci.add are you using? - the "port #3 interrupt error status: 0x40000001; restarting port" is indicative of the flaky v2.03 driver supplied with ArcaOS5.0.1/5.0.2...

2.07 from the AOS d/l section.

Hardware / Re: PCIe - SATA3 card choices?
« on: April 06, 2020, 03:22:10 pm »
David, everyone...

... might as well try different 'Link Speed' settings and see if anything crops up...

So, here is literally the quote from the OS2AHCI driver doc file:

Code: [Select]
/LS                    Set link speed (default = 0):
                         0 = maximum,
                         1 = limit to generation 1
                         2 = limit to generation 2
                         3 = limit to generation 3

So at first I figured OK, 1 = SATA1, 2 = SATA2 and 3 = SATA3, although given where the standard is today I'm not quite sure how to interpret 0 =...???

Given that my motherboard is SATA2 capable only I enabled /LS:2, that resulted in a tiny throughput increase to get me to 158MB/s. I then tried both /LS:1 (which gave me 90MB/s) and /LS:3 (which gave me about 100MB/s).

So much for that theory. Keep in mind, each change required a re-boot, so things are pretty clean coming back up, unless there is some other register setting somewhere that a soft re-boot does not clear, could be...

Meanwhile, the DANIS506 section I'm comparing it to is this:

Code: [Select]
1) Register access delay:
0 : 1000 ns  (default, fixed for all non-PCI systems)
1 :  500 ns
2 :  250 ns
3 : no delay (works on most systems, check out yourself)

I might toss a ticket in for this but I honestly would not expect anything out of it.

Hardware / Re: PCIe - SATA3 card choices?
« on: April 06, 2020, 12:17:53 am »
Hi David,

Try turning OFF NCQ on the SSD drive. I get better SSD drive performance on my machine that way....

Thanks for the suggestion. I did try this approach, but the results actually stayed the same, and these roughly match the throughput I was seeing with DANIS506 drivers with only about 15% improvement overall.

I tried a few other things, such as re-routing the SSD to another port on that AHCI adapter, that did not impact the results.

I then went back to some of my old testing results and noticed a following remark I had made in the SysBench output logs:

"Throughput went up with the use of Dani /PF:3 timing controller settings"

Code: [Select]
Disk I/O disk 1-2: 238473 MB - Samsung SSD 850 EVO 250GB
   Avg. data access time :       --.---    milliseconds
   Cache/Bus xfer rate   :      125.379    Megabytes/second
   Track 0 xfer rate fwd :      228.815    Megabytes/second
   Middle trk rate fwds. :      231.438    Megabytes/second
   Last track rate bwds. :      217.636    Megabytes/second
   Average Transfer rate :      225.963    Megabytes/second
   Disk use CPU load     :        2.830    percent
   Total                 :       --.---    Disk I/O-marks

Code: [Select]
Disk I/O disk 1-2: 238473 MB - Samsung SSD 850 EVO 250GB
   Avg. data access time :       --.---    milliseconds
   Cache/Bus xfer rate   :      162.474    Megabytes/second
   Track 0 xfer rate fwd :      231.584    Megabytes/second
   Middle trk rate fwds. :      231.628    Megabytes/second
   Last track rate bwds. :      218.996    Megabytes/second
   Average Transfer rate :      227.403    Megabytes/second
   Disk use CPU load     :        2.920    percent
   Total                 :       --.---    Disk I/O-marks

So it is interesting to note that with the IDE DANIS506 driver's reduced timing mode the cache/bux xfer improved by some 29%.

I do not see any such specifications in the OS2AHCI driver though, although there is a reference there to 'Link Speed' and by default this is set to 'maximum'. little explanation in the drivers docs, or the wiki...can't hurt to test it out though I suppose.

Pages: 1 2 [3] 4 5 ... 48