3.0.15

From Msim

(Difference between revisions)
Jump to: navigation, search
m
Line 3: Line 3:
Release Date: <br>
Release Date: <br>
<br>
<br>
 +
 +
== Fetch (SMT) Bug ==
 +
If a thread fetched an instruction that missed into either the TLB or I-Cache, fetch was suspended for that thread. It was possible, in SMT, that other threads could then evict the instruction that was missed. When the thread resumes, it would miss again.<br>
 +
Additionally, the flags set to indicate these misses were never used.<br>
 +
The fetch logic has been reorganized, no longer do we "continue;" when there is an I-cache/I-TLB miss. The adjustment to fetch_issue_delay ensures that no further instructions will be fetched. At the time we insert the instruction into the IFQ, we increment fetched_cycle by (lat - 1). This does not affect normal instructions but ensures that the miss delay is taken into account for this instruction.
== Syscalls ==
== Syscalls ==
 +
 +
=== osf_sys_kill ===
 +
Partial support for negative pids. Does not propagate kills but does kill the initial child.
 +
 +
=== osf_sys_getrlimit ===
 +
Returns static maximum values as defined in syscall.c
 +
 +
=== osf_sys_setrlimit ===
 +
Does not allow setting, maximum values are not changable by the thread.
 +
 +
=== osf_sys_getsysinfo ===
 +
Additional requests are now handled: GSI_PROC_TYPE, GSI_CPU_INFO, GSI_PLATFORM_NAME (buffer overflow not handled correctly, name truncated instead), GSI_PHYSMEM, GSI_MAX_CPU, GSI_CPUS_IN_BOX, GSI_TIMER_MAX.
 +
 +
=== osf_sys_usleep_thread ===
 +
This is now partially supported. useconds is multiplied by 1000 and added to a variable number (starts at 200, incremented by 1 each time any thread uses it, modulo 1000). In fast-forward mode, the thread is skipped for that many cycles. This is not implemented in full-simulation since pipeline scheduling should prevent usleep/load_conditional/store_conditional problems.
 +
 +
=== osf_sys_lseek ===
osf_sys_lseek does not return -1 when called on stdin, stdout or stderr on Tru64. Empirically, it appears to output the total number of characters printed for the current session.<br>
osf_sys_lseek does not return -1 when called on stdin, stdout or stderr on Tru64. Empirically, it appears to output the total number of characters printed for the current session.<br>
  #include <sys/types.h>
  #include <sys/types.h>
  #include <unistd.h>
  #include <unistd.h>
  #include <iostream>
  #include <iostream>
-
 
+
  int main()
  int main()
  {
  {
-
cout << "Weeee!" << endl;
+
        cout << "Weeee!" << endl;
-
for(int i=0;i<10;i++)
+
        for(int i=0;i<10;i++)
-
{
+
        {
-
off_t sval = lseek(i,0,1);
+
                off_t sval = lseek(i,0,1);
-
cout << i << ":  " << sval << endl;
+
                cout << i << ":  " << sval << endl;
-
}
+
        }
-
 
+
        return 0;
-
return 0;
+
  }
  }
On a new session:
On a new session:
Line 47: Line 68:
  8:  -1
  8:  -1
  9:  -1
  9:  -1
-
The difference is consistent (typing into the command prompt and deleting it will increase this counter). This will be handled by returning an ever increasing number by M-Sim.
+
The difference is consistent (typing into the command prompt and deleting it will increase this counter).

Revision as of 23:41, 17 February 2010

This page refers to the changes made in the 3.0.15 release of M-sim.

Release Date:

Contents

Fetch (SMT) Bug

If a thread fetched an instruction that missed into either the TLB or I-Cache, fetch was suspended for that thread. It was possible, in SMT, that other threads could then evict the instruction that was missed. When the thread resumes, it would miss again.
Additionally, the flags set to indicate these misses were never used.
The fetch logic has been reorganized, no longer do we "continue;" when there is an I-cache/I-TLB miss. The adjustment to fetch_issue_delay ensures that no further instructions will be fetched. At the time we insert the instruction into the IFQ, we increment fetched_cycle by (lat - 1). This does not affect normal instructions but ensures that the miss delay is taken into account for this instruction.

Syscalls

osf_sys_kill

Partial support for negative pids. Does not propagate kills but does kill the initial child.

osf_sys_getrlimit

Returns static maximum values as defined in syscall.c

osf_sys_setrlimit

Does not allow setting, maximum values are not changable by the thread.

osf_sys_getsysinfo

Additional requests are now handled: GSI_PROC_TYPE, GSI_CPU_INFO, GSI_PLATFORM_NAME (buffer overflow not handled correctly, name truncated instead), GSI_PHYSMEM, GSI_MAX_CPU, GSI_CPUS_IN_BOX, GSI_TIMER_MAX.

osf_sys_usleep_thread

This is now partially supported. useconds is multiplied by 1000 and added to a variable number (starts at 200, incremented by 1 each time any thread uses it, modulo 1000). In fast-forward mode, the thread is skipped for that many cycles. This is not implemented in full-simulation since pipeline scheduling should prevent usleep/load_conditional/store_conditional problems.

osf_sys_lseek

osf_sys_lseek does not return -1 when called on stdin, stdout or stderr on Tru64. Empirically, it appears to output the total number of characters printed for the current session.

#include <sys/types.h>
#include <unistd.h>
#include <iostream>

int main()
{
       cout << "Weeee!" << endl;
       for(int i=0;i<10;i++)
       {
               off_t sval = lseek(i,0,1);
               cout << i << ":  " << sval << endl;
       }
       return 0;
}

On a new session:

jloew@tru64:~/syscall$ ./a.out
Weeee!
0:  722
1:  730
2:  738
3:  -1
4:  -1
5:  -1
6:  -1
7:  -1
8:  -1
9:  -1

Second execution:

jloew@tru64:~/syscall$ ./a.out
Weeee!
0:  864
1:  872
2:  880
3:  -1
4:  -1
5:  -1
6:  -1
7:  -1
8:  -1
9:  -1

The difference is consistent (typing into the command prompt and deleting it will increase this counter).

Personal tools