Queue.dat

From FaHWiki

Jump to: navigation, search

Contents

General

The Image:File_icon.gif queue.dat is used by the F@H client and the Cores it uses to process a Work Unit (WU), to store information on a particular WU and some information on the client itself. It is a binary file of a fixed size.


The content of the file can be viewed with Dick Howells qd (Queue Dump) tool.
There is an article available on this Wiki on how to use qd with some more information on it:
Howto use qd to debug the FAH client


As part of the qd documentation, a webpage was created which contains a hexadecimal dump of a queue.dat file, in which all the differently sized fields are made visible.


Format

The size starts with 4 bytes containing the version of the queue and another 4 bytes containing the current index. The current index is a value of 0-9 indicating which of the 10 entries in the queue is being used for the currently running WU.


Next are 10 indices of a fixed size containing the same kind of information of each WU.
Finally there 6 fields of 4 bytes containing the Performance Fraction (PF), the number of WUs the PF was calculated over, and the average Download and Upload Rate and the number of WUs they were calculated over.


At the very end of the queue.dat are 16 bytes of only zeros, which will probably be used in a future version of the queue.

The layout of a queue.dat file:
queue.dat v5.01
Size Content
4 bytes Queue Version
4 bytes Current Index
712 bytes Index 0
712 bytes Index 1
712 bytes Index 2
712 bytes Index 3
712 bytes Index 4
712 bytes Index 5
712 bytes Index 6
712 bytes Index 7
712 bytes Index 8
712 bytes Index 9
4 bytes Performance Fraction
4 bytes Performance Fraction Units
4 bytes Download Rate
4 bytes Download Rate Units
4 bytes Upload Rate
4 bytes Upload Rate Units
16 bytes All Zeros
The layout of each queue index:
Index for queue.dat v5.01
Size Content
4 bytes Status
4 bytes Padding
32 bytes Time Data
4 bytes Server IP (until v3.0)
4 bytes Upload Status
128 bytes Core URL
4 bytes Misc1a
4 bytes Core Number
4 bytes Misc1b
4 bytes Work Unit Size
16 bytes z192
2 bytes Project Number
2 bytes Run
2 bytes Clone
2 bytes Generation
8 bytes Issued
36 bytes z224
4 bytes Machine ID
4 bytes Server IP
4 bytes Server Port
64 bytes Work Unit Type
64 bytes User Name
64 bytes Team Number
8 bytes CPU ID
4 bytes Benchmark
4 bytes Misc3b
4 bytes CPU Type
4 bytes CPU Species
4 bytes OS Type
4 bytes OS Species
4 bytes Expires
8 bytes z500
4 bytes Assignment Info Present
4 bytes Assignment Timestamp
4 bytes Assignment Info
4 bytes Collection Server IP
4 bytes Download Started
16 bytes z528
4 bytes SMP Cores
140 bytes z548
16 bytes Due
4 bytes Packet Size Limit
4 bytes Upload Failures


Content Descriptions

The meaning of the values stored in the queue.dat file are not publicly documented. What is known of the meaning of each value was mostly figured out by Richard P. Howell IV, the author of the qd (Queue Dump) utility. He documented the output of his qd utility, thereby describing the meaning of each value in the queue.


Because he gave its own interpretation to each value, those values not always reflect 1-on-1 what the Folding@Home developers use that value for in the F@H client. An good example is the Status code stored in the queue.dat file. At first Dick Howell gave it own meaning to the values which he derived from the observed behavior of the F@H client. But when at a later point in time the F@H client was able to show those status codes it gave its own slightly different meaning of the value.


The descriptions of the values below are what Dick Howell gave them, most of the time those are independent of his qd utility but sometimes the description is put in the context of qd, the first publicly available queue.dat exploration tool.


Queue Version

The client stores its own queue revision level in queue.dat any time it creates a new queue.dat or updates an old one to a newer format. The format does not change every time a new client comes out, so the version number shown here may be perfectly up to date but still not show the latest client revision level. It would not be an error.


Current Index

When a work unit is downloaded, it is assigned to one of the ten queue entries. The data in queue.dat at that index is used by the client to keep track of that unit's status. It is especially needed if the client is stopped and restarted, or if finished work doesn't upload on the first attempt. This index number is also used in file names in the work subdirectory. In this example, since the current index is 7, the work file names have the string "_07" in them.


The indices are assigned sequentially, starting at 1, and cycling back to 0 after 9. If work is still active at the next sequential index (most likely because it has had a lot of trouble uploading), that index will be skipped over. An active index won't be reused unless there are no inactive ones left at all.


Status

The status printed by qd is an interpretation of an integer status code for each entry, sometimes influenced by other data fields in that entry, e.g. the Upload Status. The names given to these status codes by qd are a little different from the names printed by the client with its "-queueinfo" flag. If qd is started with the "-h" flag, it will print out an explanation of its status code names.


Status codes

Here is a list of all the possible status codes that can be printed for a queue entry. When qd was first written, the client had no publicly-available names, so qd made up names according to the status of the work unit, from the perspective of the user. The following list is available if qd is started with the "-h" flag:


The status code for each queue entry may be interpreted as follows:

(0) empty
  The queue entry has never been used, or has been completely cleared.
(0) deleted
  The unit was explicitly deleted.
(0) finished
  The unit has been uploaded.  The queue entry is just history.
(0) garbage
  The queue entry is available, but its history is unintelligible.
(1) folding now
  The unit is in progress.  Presumably the core is running.
(1) queued for processing
  The unit has been downloaded but processing hasn't begun yet.
(2) ready for upload
  The core has finished the unit, but it is still in the queue.
(3) DANGER will be lost if client is restarted!
  Bug before V3b5, neglected to post status (1).
(3) abandoned
  Bug before V3b5, neglected to post status (1), and client was restarted.
(4) fetching from server
  Client presently contacting the server, or something failed in download.
  If this state persists past the current unit, the queue entry will be
  unusable, but otherwise things will go on as usual.
(?) UNKNOWN STATUS = ??
  Something other than 0 to 4.

The numbers in parentheses are the actual value used for that status code. Code (0) is called four different names depending on other data found in the queue entry.


Several months after all this was written and working as described, the guys at Stanford added the "-queueinfo" option to the client, and they gave their own names to these same codes according to the queue entry, from the perspective of the client, describing what it needs to do about it. Status code (3) really never happens any more, but here is what it calls the others.

(0) empty
  The queue index is available for reuse by a new unit.
(1) active
  The unit files are actively processing, and the core should be running.
(1) ready
  The unit files are ready for processing but are queued, and the core
  should be started to process them when earlier units are finished.
(2) finished
  The core has finished the unit, and it needs to be uploaded.
(4) fetching
  The index is allocated to a unit being fetched from a server.

The "fetching" status was not handled correctly until client version 5.0, which will free the index if it finds that status in the queue. If an earlier client was restarted and discovered the "fetching" status at one of the queue indices, it simply skipped over that index for ever afterward, never reclaiming it for further use.


It's unfortunate that the word finished is used with differing meanings. In the output from qd, "finished" means it's really all done, and the information still stored is just history. But if it's the client which says "finished", it means only that the processing has finished, and the work has not been sent back yet.


Padding

There isn't much known about this field. The qd source has a comment which says: "Pad for Windows, others as of v4.01". This probably means that these 4 bytes are filled with only zeros to pad the size of the file, so that the next bytes of non-zeros containing useful information start at the correct byte offset. Apparently only queue.dat files created by the F@H clients for Windows used this field for padding, where the Linux/FreeBSD/OpenBSD and Mac OS X clients started to behave like the Windows clients already did starting at v4.01 of the queue.dat.


Time Data

This field actually stores 2 values, the begin time and the end time.


The begin time is recorded by the client when it finishes downloading a new unit to process. It is an epoch 2000 value, based on the local machine's clock. If the clock is set accurately and the work unit is not a duplicate, the "begin" time will be only a few seconds after the "issue" time, the difference being simply the time it took to receive the unit over the Internet.


The end time is recorded by the client when the core returns with an indication that the processing has finished and the results file should be uploaded to the server. It is an epoch 2000 value, based on the local machine's clock, just like the "begin" time.


Server IP (until v3.0)

This is the IP address of the data server from which the work unit was downloaded. It is also the address to which the unit must eventually be uploaded if it is still active.


The Server IP for Folding@Home clients before v3.0 the value was stored at 040 bytes from the start of each queue index. Starting at byte 264 of each index is the Server IP for client v3.0 and later. The v3.0 and later clients also store the port number.


See also: Work Server


Upload Status

The Upload Status is not separately printed by qd, in stead it is used to determine the Status of the Work Unit.


If the Status is 0, indicating that the "queue index is available for reuse by a new unit", the Upload Status is used by qd to print "deleted" if the Upload Status is 0, or "finished" if the Upload Status is 1.


It's a flag indication if the WU has been uploaded or not.


Core URL

This full URL is actually constructed by qd (and the client) from the directory URL and the core number, both of which are stored in queue.dat. It can be used to verify that the server knows the correct client OS type, and also to determine which core is required for this work unit. At present, Core_65 is Tinker (Folding), Core_78 is Gromacs (Folding), Core_79 is double-precision SSE2 Gromacs (Folding), Core_82 is PMD Amber (Folding), Core_96 is QMD (Folding), and Core_ca used to be SPG (Genome). A newer core, Core_a0 is Gromacs 33 (Folding). See also: Cores


Misc1a

These numbers are present in queue.dat, but it isn't known for sure what they are. Most likely they are related to the revision levels of the client which are suitable for this work unit.


The other numbers are Misc1b and Misc3b


Core Number

This full URL is actually constructed by qd (and the client) from the directory URL and the core number, both of which are stored in queue.dat. It can be used to verify that the server knows the correct client OS type, and also to determine which core is required for this work unit. At present, Core_65 is Tinker (Folding), Core_78 is Gromacs (Folding), Core_79 is double-precision SSE2 Gromacs (Folding), Core_80 is SREM Gromacs (Folding), Core_82 is PMD Amber (Folding), Core_96 is QMD (Folding), and Core_ca used to be SPG (Genome). A newer core, Core_a0 is Gromacs 33 (Folding). See also: Cores


The core version can be found in the core log file, which is deleted if the unit uploads on the very first try, so on some systems which have permanent connections to the Internet, the core version will only rarely be available at indices other than the current one.


Misc1b

These numbers are present in queue.dat, but it isn't known for sure what they are. Most likely they are related to the revision levels of the client which are suitable for this work unit.


The other numbers are Misc1a and Misc3b


Work Unit Size

This is used as one of the checks for a proper work unit download. It is the size in bytes of the wudata_<XX>.dat file.


z192

These fields are present in queue.dat and usually only contain zeros.


Some fields, like z192, z224 and z7152 are most likely reserved for future use. Whereas other fields are mostly likely padding, or sometimes contain unknown values, e.g. z500 and z528.

grep "unknown stuff" qd.c
/* There is still sometimes unknown stuff in bytes 500-507 and 528 */


Project Number

This is the number of the project which the work unit is part of.


Run

If the unit is not using Core_ca (the Genome core), these numbers (Run, Clone & Generation), along with the project number, uniquely identify the work unit. If it is necessary to notify Stanford of the work unit ID, those four numbers (project, run, clone, generation) should always be given.


Clone

If the unit is not using Core_ca (the Genome core), these numbers (Run, Clone & Generation), along with the project number, uniquely identify the work unit. If it is necessary to notify Stanford of the work unit ID, those four numbers (project, run, clone, generation) should always be given.


Generation

If the unit is not using Core_ca (the Genome core), these numbers (Run, Clone & Generation), along with the project number, uniquely identify the work unit. If it is necessary to notify Stanford of the work unit ID, those four numbers (project, run, clone, generation) should always be given.


Issued

This time stamp is placed on the work unit by the work server when it assigns the unit. It is an epoch 1970 value, based on the server's clock. The servers lately have been accurately synchronized with NTP. If a unit, for any reason, gets lost so it isn't either completely finished or ready for upload when the next unit is requested, the server will often notice the previous assignment and send the same unit again, with the original issue time stamp.


z224

These fields are present in queue.dat and usually only contain zeros.


Some fields, like z192, z224 and z7152 are most likely reserved for future use. Whereas other fields are mostly likely padding, or sometimes contain unknown values, e.g. z500 and z528.

grep "unknown stuff" qd.c
/* There is still sometimes unknown stuff in bytes 500-507 and 528 */


Machine ID

This is the MachineID as configured when the unit started. When the MachineID and UserID are added together and sent to the server with an uploaded unit, the client uses the MachineID which is current at that time.


Server IP

This is the IP address of the data server from which the work unit was downloaded. It is also the address to which the unit must eventually be uploaded if it is still active.


The Server IP for Folding@Home clients before v3.0 the value was stored at 040 bytes from the start of each queue index. Starting at byte 264 of each index is the Server IP for client v3.0 and later. The v3.0 and later clients also store the port number.


See also: Work Server


Server Port

This is the port number of the data server from which the work unit was downloaded.


The Server IP for Folding@Home clients before v3.0 the value was stored at 040 bytes from the start of each queue index. Starting at byte 264 of each index is the Server IP for client v3.0 and later. The v3.0 and later clients also store the port number.


Work Unit Type

This actually isn't a work unit type at all, but simply a text message which the data server can insert in a downloaded unit. It usually just says "Folding@Home", and sometimes nothing at all.


User Name

This is the UserName as configured when the unit started. The UserName actually sent to the server when the unit is uploaded is what is current at that time.


Team Number

This is the TeamNumber as configured when the unit started. The TeamNumber actually sent to the server when the unit is uploaded is what is current at that time.


CPU ID

This ID is used by the server to identify the user's machine, and to validate the work unit when it is returned. The number stored in queue.dat, is really the sum of the assigned UserID and the configured MachineID, as it was when the unit started. The ID actually sent to the server when the unit is uploaded is what is current at that time on the machine which does the upload. Ideally, it should match the ID to which the unit is assigned, to within the allowed configurable range of the MachineID, or the uploaded unit might be rejected. Recent experiments with transferring work among machines have shown the servers usually to be more permissive, but relying on this would probably be a bad idea.


Benchmark

When the client starts, it calculates this benchmark number. It is a measure of floating point processing power, but it is also strongly affected by any other programs which happen to be running on the machine at the time. It's normal for the benchmark number to vary over a wide range.


Misc3b

These numbers are present in queue.dat, but it isn't known for sure what they are. Most likely they are related to the revision levels of the client which are suitable for this work unit. This particular number has a comment in the qd source code which says: "Misc3b (unused as of v3.24) (LE)".


The other numbers are Misc1a and Misc1b


CPU Type

The CPU and OS types are detected by the client and sent to the servers when requesting assignments. They can influence what sort of work will be assigned, and which core URL is given to the client. Each of these types is reported as a pair of numbers, the first of which is a basic type defined by Cosm (See also Cosm), and the second of which is a subtype determined by the client. The most detail is available for Windows systems running on Intel CPUs. The numbers are sometimes stored in little-endian order in queue.dat, and sometimes in big-endian order, with no clearly consistent pattern.


The full set of numbers are: CPU Type, CPU Species, OS Type and OS Species.


The types defined by Cosm are documented at: Cosm API - Defines and Types


CPU Species

The CPU and OS types are detected by the client and sent to the servers when requesting assignments. They can influence what sort of work will be assigned, and which core URL is given to the client. Each of these types is reported as a pair of numbers, the first of which is a basic type defined by Cosm, and the second of which is a subtype determined by the client. The most detail is available for Windows systems running on Intel CPUs. The numbers are sometimes stored in little-endian order in queue.dat, and sometimes in big-endian order, with no clearly consistent pattern.


The full set of numbers are: CPU Type, CPU Species, OS Type and OS Species.


OS Type

The CPU and OS types are detected by the client and sent to the servers when requesting assignments. They can influence what sort of work will be assigned, and which core URL is given to the client. Each of these types is reported as a pair of numbers, the first of which is a basic type defined by Cosm (See also Cosm), and the second of which is a subtype determined by the client. The most detail is available for Windows systems running on Intel CPUs. The numbers are sometimes stored in little-endian order in queue.dat, and sometimes in big-endian order, with no clearly consistent pattern.


The full set of numbers are: CPU Type, CPU Species, OS Type and OS Species.


The types defined by Cosm are documented at: Cosm API - Defines and Types


OS Species

The CPU and OS types are detected by the client and sent to the servers when requesting assignments. They can influence what sort of work will be assigned, and which core URL is given to the client. Each of these types is reported as a pair of numbers, the first of which is a basic type defined by Cosm, and the second of which is a subtype determined by the client. The most detail is available for Windows systems running on Intel CPUs. The numbers are sometimes stored in little-endian order in queue.dat, and sometimes in big-endian order, with no clearly consistent pattern.


The full set of numbers are: CPU Type, CPU Species, OS Type and OS Species.


Expires

This value stored in queue.dat is the allowed time to return in seconds for the particular WU.


z500

These fields are present in queue.dat and usually only contain zeros.


Some fields, like z192, z224 and z7152 are most likely reserved for future use. Whereas other fields are mostly likely padding, or sometimes contain unknown values, e.g. z500, z528 and z548.

grep "unknown stuff" qd.c
/* There is still sometimes unknown stuff in bytes 500-507, 528 and 548


Assignment Info Present

This value is either 0x00 (0) or 0x01 (1). It is a flag to indicate if there is Assignment Info present. It can be stored in either Little-Endian or Big-Endian.


The three related fields are: Assignment Info Present, Assignment Timestamp and Assignment Info.


See also: Assignment Server and Work Server


Assignment Timestamp

This time stamp and data word are sent to the client by the assignment server along with the IP address of the work server and other information. The data word is a checksum derived from the IP address and the time stamp. The client sends all three words to the work server as validation of the assignment. These values can be stored in queue.dat in either little-endian or big-endian byte order. It is unknown why it can be either way.


The three related fields are: Assignment Info Present, Assignment Timestamp and Assignment Info.


See also: Assignment Server and Work Server


Assignment Info

The time stamp and data word are sent to the client by the assignment server along with the IP address of the work server and other information. The data word is a checksum derived from the IP address and the time stamp. The client sends all three words to the work server as validation of the assignment. These values can be stored in queue.dat in either little-endian or big-endian byte order. It is unknown why it can be either way.


The three related fields are: Assignment Info Present, Assignment Timestamp and Assignment Info.


See also: Assignment Server and Work Server


Collection Server IP

This is the collection server IP address, which is not always present. If it is given, it identifies an alternate server to which the results can be returned if there are too many errors attempting to upload to the actual work server. If work is returned to the collection server, credit for it will occasionally be delayed in the Stanford statistics, but this is better than having the work deleted by the client if its deadline expires before the server can be reached successfully.


See also: Collection Server


Download Started

This field is usually absent if a collection server address is given for this unit. It seems to be a date roughly corresponding to the end of the download, from the work server's perspective. It is an epoch 2000 value, most likely based on the server's clock.


z528

These fields are present in queue.dat and usually only contain zeros.


Some fields, like z192, z224 and z7152 are most likely reserved for future use. Whereas other fields are mostly likely padding, or sometimes contain unknown values, e.g. z500, z528 and z548.

grep "unknown stuff" qd.c
/* There is still sometimes unknown stuff in bytes 500-507, 528 and 548


SMP Cores

Number of SMP cores (as of v5.91)


The SMP cores are the number of cores which the SMP client detects at startup.
This is appears to only be stored by the F@H client v5.91 and up.


The SMP client will startup with some messages like:

$ ./fah5 -local -verbosity 9
Using local directory for configuration

Note: Please read the license agreement (fah5 -license). Further
use of this software requires that you have read and accepted this agreement.

Using local directory for work files
2 cores detected


--- Opening Log file [March 4 00:56:00]
[...] 

"SMP cores" refers to the column on Stanfords serverstat page.


z548

These fields are present in queue.dat and usually only contain zeros.


Some fields, like z192, z224 and z7152 are most likely reserved for future use. Whereas other fields are mostly likely padding, or sometimes contain unknown values, e.g. z500, z528 and z548.

grep "unknown stuff" qd.c
/* There is still sometimes unknown stuff in bytes 500-507, 528 and 548


Due

This time is calculated by the client when it downloads a unit. It is determined by adding the "begin" time to the expiration period, if this expiration data is sent as part of the work unit. Genome units had no deadlines, nor do a few Folding units designated for machines which are either slow or only infrequently connected to the Internet. All other Folding units do, but not all work units have the expiration period fields filled in. The stored time is an epoch 2000 value, based on the local machine's clock.


There are actually two sorts of deadline associated with a work unit. This one, which is the only one known to the client, is what the Stanford project summary web page calls the "Final Deadline", after which time the client may delete the unit and no credit will be given even if it is completed and returned. The other deadline, shown on the project summary as "Preferred", indicates when the unit will be considered late enough that the server might send another copy of it to someone else, which means that a unit returned after that time might have little scientific value.


NOTE that if the machine clock runs, or is set, forward to a time past the "due" date, the client might think the unit is past due, and delete it.


Packet Size Limit

This is a packet size limit, used to determine how much memory should be allocated when returning results. Its default size seems to be about five megabytes, but if "large units" are selected, the client will set the value to ten times that size. If the actual results file is bigger than the packet limit, the client will be unable to return it to the server.


Upload Failures

The client uses this field to decide when to try sending results to the collection server instead of to the actual work server. It is the value of the number of times an upload for this WU has already failed.


Performance Fraction

This value is calculated by the client as a benchmark of the system's ability to complete work units quickly. It is a sliding window average of the fraction of the deadline time remaining when a unit is completed, weighted over the recorded number of units. The number of units is capped at four, exactly as it is for the network download and upload rates.


Performance Fraction Units

This field stores the number of WUs the Performance Fraction is weighted over.


Download Rate

This rate is measured by the client as a benchmark of system network performance. It is a sliding window average weighted over the recorded number of units. This number is capped by the client at four, so the average tends to track more recent performance. It doesn't mean that only the last four units are averaged, but rather that the stored value is weighted four times greater than the value from a new unit, so in fact it determines the characteristic rate at which the effects of older units decay.


Download Rate Units

This field stores the number of WUs the Download Rate is weighted over.


Upload Rate

This rate is measured by the client as a benchmark of system network performance. It is a sliding window average weighted over the recorded number of units. This number is capped by the client at four, so the average tends to track more recent performance. It doesn't mean that only the last four units are averaged, but rather that the stored value is weighted four times greater than the value from a new unit, so in fact it determines the characteristic rate at which the effects of older units decay.


Upload Rate Units

This field stores the number of WUs the Upload Rate is weighted over.


All Zeros

These fields are present in queue.dat and usually only contain zeros.


Some fields, like z192, z224 and z7152 are most likely reserved for future use. Whereas other fields are mostly likely padding, or sometimes contain unknown values, e.g. z500 and z528.

grep "unknown stuff" qd.c
/* There is still sometimes unknown stuff in bytes 500-507 and 528 */


Structure

The structure of the queue.dat defined in the qd.c source code:

/* Structure of <queue.dat> file */

typedef unsigned int u32;
typedef unsigned short u16;

struct qf
{	u32		version;	/* 0000 Queue (client) version (v2.17 and above) */
	u32		current;	/* 0004 Current index number */
	struct qs
	{	u32	stat;		/* 000 Status */
		char	z004[4];	/* 004 Pad for Windows, others as of v4.01 */
		u32	tdata[8];	/* 008 Time data (epoch 0000 1jan00 UTC) */
		u32	svr1;		/* 040 Server IP address (until v3.0) */
		u32	ustat;		/* 044 Upload status */
		char	url[128];	/* 048 Web address for core downloads */
		u32	m176;		/* 176 Misc1a */
		u32	core;		/* 180 Core_xx number (hex) */
		u32	m184;		/* 184 Misc1b */
		u32	dsiz;		/* 188 wudata_xx.dat file size */
		char	z192[16];
		union
		{	struct
			{	char	proj[2];	/* 208 Project number (LE) */
				char	run[2];		/* 210 Run (LE) */
				char	clone[2];	/* 212 Clone (LE) */
				char	gen[2];		/* 214 Generation (LE) */
				char	issue[2][4];	/* 216 WU issue time (LE) */
			}	f;			/* Folding@home data */
			struct
			{	char	proj[2];	/* 208 Project number (LE) */
				u16	miscg1;		/* 210 Miscg1 */
				char	issue[2][4];	/* 212 WU issue time (LE) */
				u16	miscg2;		/* 220 Miscg2 */
				u16	miscg3;		/* 222 Miscg3 */
			}	g;			/* Genome@home data */
		}	wuid;		/* 208 Work unit ID information */
		char	z224[36];
		char	mid[4];		/* 260 Machine ID (LE) */
		u32	svr2;		/* 264 Server IP address */
		u32	port;		/* 268 Server port number */
		char	type[64];	/* 272 Work unit type */
		char	uname[64];	/* 336 User Name */
		char	teamn[64];	/* 400 Team Number */
		char	uid[8];		/* 464 Stored ID for unit (UserID + MachineID) (LE or BE, usually BE) */
		char	bench[4];	/* 472 Benchmark (as of v3.24) (LE) */
		char	m476[4];	/* 476 Misc3b (unused as of v3.24) (LE) */
		u32	cpu_type;	/* 480 CPU type (LE or BE, sometimes 0) */
		u32	os_type;	/* 484 OS type (LE or BE, sometimes 0) */
		u32	cpu_spec;	/* 488 CPU species (LE or BE, sometimes 0) */
		u32	os_spec;	/* 492 OS species (LE or BE, sometimes 0) */
		u32	expire;		/* 496 Allowed time to return (seconds) */
		char	z500[8];
		char	aiflag[4];	/* 508 Assignment info present flag (LE or BE) */
		char	aitime[4];	/* 512 Assignment timestamp (LE or BE) */
		char	aidata[4];	/* 516 Assignment info (LE or BE) */
		char	csip[4];	/* 520 Collection server IP address (as of v5.00) (LE) */
		char	dstart[4];	/* 524 Download started time (as of v5.00) (BE) */
		char	z528[16];
		char    cores[4];	/* 544 Number of SMP cores (as of v5.91) (BE) */
		char    z548[140];
		u32	due[4];		/* 688 WU expiration time */
		u32	plimit;		/* 704 Packet size limit (as of v5.00) */
		u32	uploads;	/* 708 Number of upload failures (as of v5.00) */
	}		entry[10];	/* 0008 Array of ten queue entries */
	u32		pfract;		/* 7128 Performance fraction (as of v3.24) */
	u32		punits;		/* 7132 Performance fraction unit weight (as of v3.24) */
	u32		drate;		/* 7136 Download rate sliding average (as of v4.00) */
	u32		dunits;		/* 7140 Download rate unit weight (as of v4.00) */
	u32		urate;		/* 7144 Upload rate sliding average (as of v4.00) */
	u32		uunits;		/* 7148 Upload rate unit weight (as of v4.00) */
	char		z7152[16];	/* 7152 (as of v5.00) ...all zeros after queue conversion... */
} qbuf;

/* There is still sometimes unknown stuff in bytes 500-507 and 528 */


Links

Personal tools