On 13 Mar 2013, at 15:04, "Mark Pizzolato - Info Comm" <Mark at
infocomm.com> wrote:
On Wednesday, March 13, 2013 at 11:51 AM, Cory Smelosky wrote:
Speaking of SIMH on Solaris and similar...is SIMH capable of SET CPU IDLE in
zones on SPARC? It looks like 3.9-0 can't.
Well, I think I answered this yesterday on this list. I'll restate what I wrote
here:
Thank you. I think the answer got lost when my mail server was bouncing all emails. ;)
Idling for any simulator requires that the host system's clock tick be <= the size
of the simulated system's clock tick. VAX systems have a clock tick of 10ms.
Idling for simulated VAX systems works best if the host clock tick is 1ms.
Windows systems have a user mode programmatically settable clock tick size (a facility
useful for some media playback capabilities). On Windows systems simh will set the
host's clock tick to 1ms while a simulator is running.
We haven't seen programmatically settable host clock tick sizes on other platforms.
In general, other platforms have a tick size which can be changed in some system specific
way (which might require building a kernel with a desired tick size) or not changeable
at all. This issue comes up often enough that adding how to make these system specific
adjustments would be a useful addition to the simh FAQ. Any feedback on this subject
will be welcome.
Ahhh.
"Solaris timing uses a real-time clock that can generate interrupts at a resolution
bound by the processor speed. For scheduling purposes, it fires every 10 milliseconds. As
in Linux, this is a clock "tick." Note that 2.6 Linux uses a 1000-tick/second
clock, as opposed to the 100-tick/second clock used by Solaris and by previous versions of
Linux. User-level programs on Solaris can program the real time clock to fire at
nanosecond granularity, rounded up by processor time--much finer than the clock tick
granularity of ten or one milliseconds. However, the program interface to use the
high-resolution timers is not visible in the DDI/DKI. See clock_settime(3rt) for
user-level details andusr/src/uts/common/os/cyclic.c for details on high-resolution
timing in Solaris.
Also note that in Solaris, you can change the value of hz or clock ticks/second by
setting hires_tick to 1 and hires_hz to the desired time in the /etc/system file.
The default is 1000 ticks per second. Here's an example:
set hires_tick=1
set hires_hz=10000 <~--- 10000 ticks per second"
Looks like Solaris can set it in user mode, too.
Recent simh code will display what it has determined to be the host's clock size if
simh believes the host's clock tick is too small to support idling when you attempt to
enable idling.
Recent simh code can always display host system's tick size with the 'EXAMINE
TIMER OS_SLEEP_MIN_MS' command.
The latest simh code is available from
https://github.com/simh/simh/archive/master.zip.
Gregg Levine wrote:
Idle on some items that are not Linux or FreeBSD or NetBSD may not
work because of how they interpret the timer. Same goes for trying to
get the idle function to work on Windows.
I haven't heard from anyone who's had issues getting idling to work on Windows.
If you know of such a case, I would be interested to explore what may be happening in this
case.
Thanks.
- Mark Pizzolato