Skip to content
Snippets Groups Projects
Commit b25abb3a authored by Morris Jette's avatar Morris Jette
Browse files

Convert burst buffer base unit from GB to MB

This will make using the Cray test environemt easier
parent 4005d93a
No related branches found
No related tags found
No related merge requests found
......@@ -169,7 +169,7 @@ buffer plugins.<br>
<i>type</i> specifies a Cray generic burst buffer resource, for example "nodes".<br>
if "type" is not specified, the number is a measure of storage space.<br>
<i>units</i> may be "N" (nodes), "GB" (gigabytes), "TB" (terabytes),
"PB" (petabytes), etc. with the default units being gigabyes for reservations
"PB" (petabytes), etc. with the default units being megabyes for reservations
of storage space.<br>
Jobs using this reservation are not restricted to these burst buffer resources,
......@@ -186,6 +186,6 @@ $ scontrol create reservation StartTime=noon duration=60 \
BurstBuffer=cray:nodes:2,generic:20GB
</pre>
<p style="text-align:center;">Last modified 25 March 2015</p>
<p style="text-align:center;">Last modified 17 July 2015</p>
<!--#include virtual="footer.txt"-->
......@@ -50,8 +50,8 @@ and it's default value is /opt/cray/dw_wlm/default/bin/dw_wlm_cli.
.TP
\fBGranularity\fR
Granularity of job space allocations in units of gigabytes.
The default value is 1 gigabyte.
Granularity of job space allocations in units of megabytes.
The default value is 1 megabyte.
This option is not used by the burst_buffer/cray plugin.
.\ Possible future enhancement
......@@ -72,7 +72,7 @@ This option is not used by the burst_buffer/cray plugin.
Maximum burst buffer allocation size for any single job.
The numeric value may have a suffix of "m" (megabytes), "g" (gigabytes),
"t" (terabytes), "p" (petabytes), or "n" (nodes).
Gigabytes is assumed if no suffix is supplied.
Megabytes is assumed if no suffix is supplied.
By default there is no job allocation size limit.
.TP
......@@ -144,7 +144,7 @@ The size is calculated by adding the burst buffer allocations for all jobs
plus any persistent buffers belonging to the user.
The numeric value may have a suffix of "m" (megabytes), "g" (gigabytes),
"t" (terabytes), "p" (petabytes), or "n" (nodes).
Gigabytes is assumed if no suffix is supplied.
Megabytes is assumed if no suffix is supplied.
By default there is no job allocation size limit.
.SH "EXAMPLE"
......
......@@ -60,7 +60,7 @@
#include "src/common/xstring.h"
/* Reformat a numeric value with an appropriate suffix.
* The units are GB */
* The units are MB */
static void _get_size_str(char *buf, size_t buf_size, uint64_t num)
{
uint64_t tmp64;
......@@ -68,16 +68,16 @@ static void _get_size_str(char *buf, size_t buf_size, uint64_t num)
if ((num == NO_VAL64) || (num == INFINITE64)) {
snprintf(buf, buf_size, "INFINITE");
} else if (num == 0) {
snprintf(buf, buf_size, "0GB");
snprintf(buf, buf_size, "0MB");
} else if ((num % (1024 * 1024)) == 0) {
tmp64 = num / (1024 * 1024);
snprintf(buf, buf_size, "%"PRIu64"PB", tmp64);
snprintf(buf, buf_size, "%"PRIu64"TB", tmp64);
} else if ((num % 1024) == 0) {
tmp64 = num / 1024;
snprintf(buf, buf_size, "%"PRIu64"TB", tmp64);
snprintf(buf, buf_size, "%"PRIu64"GB", tmp64);
} else {
tmp64 = num;
snprintf(buf, buf_size, "%"PRIu64"GB", tmp64);
snprintf(buf, buf_size, "%"PRIu64"MB", tmp64);
}
}
......
......@@ -620,7 +620,8 @@ extern void bb_pack_state(bb_state_t *state_ptr, Buf buffer,
}
/* Translate a burst buffer size specification in string form to numeric form,
* recognizing various sufficies (MB, GB, TB, PB, and Nodes). */
* recognizing various sufficies (MB, GB, TB, PB, and Nodes). Default units
* are MB. */
extern uint64_t bb_get_size_num(char *tok, uint64_t granularity)
{
char *end_ptr = NULL;
......@@ -631,13 +632,13 @@ extern uint64_t bb_get_size_num(char *tok, uint64_t granularity)
if (bb_size_i > 0) {
bb_size_u = (uint64_t) bb_size_i;
if ((end_ptr[0] == 'm') || (end_ptr[0] == 'M')) {
bb_size_u = (bb_size_u + 1023) / 1024;
} else if ((end_ptr[0] == 'g') || (end_ptr[0] == 'G')) {
;
} else if ((end_ptr[0] == 't') || (end_ptr[0] == 'T')) {
} else if ((end_ptr[0] == 'g') || (end_ptr[0] == 'G')) {
bb_size_u *= 1024;
} else if ((end_ptr[0] == 'p') || (end_ptr[0] == 'P')) {
} else if ((end_ptr[0] == 't') || (end_ptr[0] == 'T')) {
bb_size_u *= (1024 * 1024);
} else if ((end_ptr[0] == 'p') || (end_ptr[0] == 'P')) {
bb_size_u *= (1024 * 1024 * 1024);
}
}
......
......@@ -108,9 +108,6 @@ typedef struct bb_entry {
uint64_t granularity;
uint64_t quantity;
uint64_t free;
uint64_t gb_granularity;
uint64_t gb_quantity;
uint64_t gb_free;
} bb_entry_t;
typedef struct {
......@@ -481,8 +478,6 @@ static bool _test_bb_spec(struct job_record *job_ptr)
/*
* Determine the current actual burst buffer state.
* Run the program "get_sys_state" and parse stdout for details.
* job_id IN - specific job to get information about, or 0 for all jobs
*/
static void _load_state(void)
{
......@@ -505,13 +500,15 @@ first_load = false;
for (i = 0; i < num_ents; i++) {
/* ID: "bytes" */
if (strcmp(ents[i].id, "bytes") == 0) {
// if (strcmp(ents[i].id, "bytes") == 0) {
if (strcmp(ents[i].id, "dwcache") == 0) {
bb_state.bb_config.granularity
= ents[i].gb_granularity;
= ents[i].granularity;
bb_state.total_space
= ents[i].gb_quantity;
= ents[i].quantity * ents[i].granularity;
bb_state.used_space
= ents[i].gb_quantity - ents[i].gb_free;
= (ents[i].quantity - ents[i].free) *
ents[i].granularity;
xassert(bb_state.used_space >= 0);
/* Everything else is a burst buffer
......@@ -529,9 +526,9 @@ first_load = false;
bb_state.bb_config.gres_cnt;
bb_state.bb_config.gres_cnt++;
gres_ptr->avail_cnt = ents[i].quantity;
gres_ptr->granularity = ents[i].gb_granularity;
gres_ptr->granularity = ents[i].granularity;
gres_ptr->name = xstrdup(ents[i].id);
gres_ptr->used_cnt = ents[i].gb_quantity - ents[i].gb_free;
gres_ptr->used_cnt = ents[i].quantity - ents[i].free;
}
_bb_free_entry(ents, num_ents);
}
......@@ -2492,22 +2489,10 @@ _json_parse_array(json_object *jobj, char *key, int *num)
for (i = 0; i < *num; i++) {
jvalue = json_object_array_get_idx(jarray, i);
_json_parse_object(jvalue, &ents[i]);
/* Convert to GB
/* Convert to Bytes to MB
*/
if (strcmp(ents[i].units, "bytes") == 0) {
ents[i].gb_granularity
= ents[i].granularity/(1024*1024*1024);
ents[i].gb_quantity
= ents[i].quantity * ents[i].gb_granularity;
ents[i].gb_free
= ents[i].free * ents[i].gb_granularity;
} else {
/* So the caller can use all the entries
* in a loop.
*/
ents[i].gb_granularity = ents[i].granularity;
ents[i].gb_quantity = ents[i].quantity;
ents[i].gb_free = ents[i].free;
ents[i].granularity /= (1024 * 1024);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment