Skip navigation

Standard Performance Evaluation Corporation

 
 

Errata

Last updated: Apr 30, 2013


Custom MIX_FILE capability

If using the custom MIX_FILE capability, you should apply the following code changes to sfs_c_man.c in order to enable the functionality:

--- sfs_c_man.c 
+++ sfs_c_man.c.new     
@@ -1688,7 +1688,7 @@
        while (fgets(line, LINELEN, mix_fp) != NULL) {
            if (line[0] == '#')                 /* Comment line */
                continue;
-           got = sscanf(line, "%s %f.1", op_name, &mix_pcnt);
+           got = sscanf(line, "%s %lf", op_name, &mix_pcnt);
            if (got != 2) {
                (void) fprintf(stderr,
                            "%s: bad mix format - can't find op values: %s\n",
@@ -1725,7 +1725,7 @@
         }
        if (mix_pcnt != 100.0) {
            (void) fprintf(stderr,
-                           "%s: WARNING total mix percentage %f.1 != 100\n",
+                           "%s: WARNING total mix percentage %.1lf != 100\n",
                                sfs_Myname, mix_pcnt);
            (void) fflush(stderr);
        }
	

First NFS OP is over UDP, should be TCP.

The only change required is in rpc/clnt_simple.c
Change the code that currently reads:

 
  if ((crp->client = sfs_cudp_create(&server_addr,
      (uint32_t)prognum, (uint32_t)versnum,
      timeout, &crp->socket)) == NULL)
         return ((int) rpc_createerr.cf_stat);
	
to now read:
 
/*
  if ((crp->client = sfs_cudp_create(&server_addr,
      (uint32_t)prognum, (uint32_t)versnum,
      timeout, &crp->socket)) == NULL)
         return ((int) rpc_createerr.cf_stat);
*/
  if ((crp->client = sfs_ctcp_create(&server_addr,
      (uint32_t)prognum, (uint32_t)versnum,
      &crp->socket, UDPMSGSIZE,UDPMSGSIZE)) == NULL)
         return ((int) rpc_createerr.cf_stat);
	

Getting Windows 2008 Server exporting NFS to work with SFS2008

.
  1. nfsshare = -o anon rw root
  2. On the NFS share properties, change the default values of anonymous UID and GID for that share from -2 to whatever account they'll be running SPEC on UNIX side as (for example, UID/GID 0)
  3. Use our undocumented registry key that'll change the default anonymous user account to whatever local account they want.
    1. Create a REG_SZ at HKLM\System\CCS\Services\NfsServer\Parameters -> "UnmappedUnixUserUsername"
    2. Set that to any valid local Windows account (it needs to be of form domain\account). For example, "localhost\Administrator"
  4. Restart NFS Server

Op_access() behavior

In sfs_3_ops.c the function op_access() incorrectly updates the file's attributes with that of its directory. This causes later append-write operations to potentially over-write instead of append. An analysis of the behavior with and without this anomaly was done and the results indicate no significant differences in latency or throughput. The decision was made to leave this behavior as it stands so that the workload remains unchanged for all users of the benchmark.

To enable client hostnames up to 64 characters long

In sfs_c_def.h you will find: #define HOSTNAME_LEN 31 /* length of client's hostname */ change to: #define HOSTNAME_LEN 64 /* length of client's hostname */ Do not exceed 64 as issues beyond sfs2008 will come into play.

Documentation corrections

SPEC SFS2008 User's Guide, page 18, section 3.2.1, item 2.

Currently reads:

2. BIOD_MAX_READS and BIOD_MAX_WRITES: SPECsfs2008 emulates the read-ahead and write-behind behavior of NFS block I/O daemons. These allow a client to have multiple read and write requests outstanding at a given time. BIOD_MAX_READS and BIOD_MAX_WRITES configure how many read or write operations SPECsfs will transmit before stopping and waiting for replies. You can set these to any value from 0 to 32, inclusive. (NFS testing only)

should read:

2. BIOD_MAX_READS and BIOD_MAX_WRITES: SPECsfs2008 emulates the read-ahead and write-behind behavior of NFS block I/O daemons. These allow a client to have multiple read and write requests outstanding at a given time. BIOD_MAX_READS and BIOD_MAX_WRITES configure how many read or write operations SPECsfs will transmit before stopping and waiting for replies. You can set these to any value from 2 to 32, inclusive. (NFS testing only)

SPEC SFS2008 Run and reporting rules, page 25, section 5.6.7 BIOD_MAX_WRITES

Currently reads:

The number of outstanding or async writes that the benchmark will generate per benchmark process. The minimum number is 0 and the maximum number is 32. (Only applicable when running the NFS workload.)

Should read:

The number of outstanding or async writes that the benchmark will generate per benchmark process. The minimum number is 2 and the maximum number is 32. (Only applicable when running the NFS workload.)

SPEC SFS2008 Run and reporting rules, page 25, section 5.6.8 BIOD_MAX_READS

Currently reads:

The number of outstanding or async reads that the benchmark will generate per benchmark process. The minimum number is 0 and the maximum number is 32. (Only applicable when running the NFS workload.)

Should read:

The number of outstanding or async reads that the benchmark will generate per benchmark process. The minimum number is 2 and the maximum number is 32. (Only applicable when running the NFS workload.)

User's Guide page 17

In the SFS2008 User's guide on page 17, it states that the MNT_POINTS option may contain a file name, and if so, it is located in the "manager" directory. This is incorrect. The location of the mount point file is in the directory specified by the WORK_DIR variable in the sfs_rc file.

Rounding error may result in producing a lower number of total calls in the summary file than should have been reported

A rounding error can happen on very fast systems that can result in producing a lower number of total calls, in the summary file, than should have been reported. Namely, the result becomes a zero. This defect has never been seen in any publication, but it was found when testing on a new system, as the vendor was preparing for a submission. This defect can be corrected with the following modification to sfs_c_pnt.c as follows:

In sfs_c_pnt.c at line 1384 the original line reads:
total_calls ? ((total_msec % total_calls) * 100 / total_calls) : 0);
May be modified to read:
total_calls ? (uint32_t)((total_msec % total_calls) * 100ULL / total_calls) : 0);

This modification is performance neutral, and is permitted to be used in submissions.