[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xl: allow scaling suffix on memory sizes in mem-set and mem-max



On 05/17/2010 06:45 PM, Yang Hongyang wrote:
> Hi jeremy,
>
> On 05/18/2010 08:41 AM, Jeremy Fitzhardinge wrote:
>   
>> Allow mem-set and mem-max to take 'b', 'k', 'm', 'g' and 't' as scaling
>> suffixes for bytes, kilobytes, mega, etc.  An unadorned number is still
>> treated as kilobytes so no existing users should be affected.
>>
>> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
>>
>> diff -r baccadfd9418 tools/libxl/xl_cmdimpl.c
>> --- a/tools/libxl/xl_cmdimpl.c       Fri May 14 08:05:05 2010 +0100
>> +++ b/tools/libxl/xl_cmdimpl.c       Mon May 17 17:37:56 2010 -0700
>> @@ -1200,16 +1200,40 @@
>>      }
>>  }
>>  
>> +static long long int parse_mem_size_kb(char *mem)
>>     
> I think here should use 'uint64_t' which is 'unsigned long long'
> instead of 'long long int'. 
>   

I want it to be signed so I can use -1 as an error indicator.  And I
want it to be "long long int" rather than int64_t so that the format
specifier for printf is unambiguous (since int64_t can be just "long" on
a 64-bit machine).

    J

>   
>> +{
>> +    char *endptr;
>> +    long long int bytes;
>> +    long long int scale = 1024;
>> +
>> +    bytes = strtoll(mem, &endptr, 10);
>> +
>> +    if (strlen(endptr) > 1)
>> +    return -1;
>> +
>> +    switch (*endptr) {
>> +    case '\0':                                              break;
>> +    case 'b':       scale = 1;                              break;
>> +    case 'k':       scale = 1024ll;                         break;
>> +    case 'm':       scale = 1024ll * 1024;                  break;
>> +    case 'g':       scale = 1024ll * 1024 * 1024;           break;
>> +    case 't':       scale = 1024ll * 1024 * 1024 * 1024;    break;
>> +    default:
>> +    return -1;
>> +    }
>> +
>> +    return (bytes * scale) / 1024;
>> +}
>> +
>>  int set_memory_max(char *p, char *mem)
>>  {
>> -    char *endptr;
>> -    uint32_t memorykb;
>> +    long long int memorykb;
>>      int rc;
>>  
>>      find_domain(p);
>>  
>> -    memorykb = strtoul(mem, &endptr, 10);
>> -    if (*endptr != '\0') {
>> +    memorykb = parse_mem_size_kb(mem);
>> +    if (memorykb == -1) {
>>          fprintf(stderr, "invalid memory size: %s\n", mem);
>>          exit(3);
>>      }
>> @@ -1255,17 +1279,18 @@
>>  
>>  void set_memory_target(char *p, char *mem)
>>  {
>> -    char *endptr;
>> -    uint32_t memorykb;
>> +    long long int memorykb;
>>  
>>      find_domain(p);
>>  
>> -    memorykb = strtoul(mem, &endptr, 10);
>> -    if (*endptr != '\0') {
>> -        fprintf(stderr, "invalid memory size: %s\n", mem);
>> -        exit(3);
>> +    memorykb = parse_mem_size_kb(mem);
>> +
>> +    if (memorykb == -1)  {
>> +    fprintf(stderr, "invalid memory size: %s\n", mem);
>> +    exit(3);
>>      }
>> -    printf("setting domid %d memory to : %d\n", domid, memorykb);
>> +
>> +    printf("setting domid %d memory to : %lld\n", domid, memorykb);
>>      libxl_set_memory_target(&ctx, domid, memorykb, /* enforce */ 1);
>>  }
>>  
>> diff -r baccadfd9418 tools/libxl/xl_cmdtable.c
>> --- a/tools/libxl/xl_cmdtable.c      Fri May 14 08:05:05 2010 +0100
>> +++ b/tools/libxl/xl_cmdtable.c      Mon May 17 17:37:56 2010 -0700
>> @@ -110,12 +110,12 @@
>>      },
>>      { "mem-max",
>>        &main_memmax,
>> -      "Set the maximum amount reservation for a domain",
>> +      "Set the maximum amount reservation for a domain.  Units default to 
>> kilobytes, but can be suffixed with 'b' (bytes), 'k' (KB), 'm' (MB), 'g' 
>> (GB) or 't' (TB)",
>>        "<Domain> <MemKB>",
>>      },
>>      { "mem-set",
>>        &main_memset,
>> -      "Set the current memory usage for a domain",
>> +      "Set the current memory usage for a domain.  Units default to 
>> kilobytes, but can be suffixed with 'b' (bytes), 'k' (KB), 'm' (MB), 'g' 
>> (GB) or 't' (TB)",
>>        "<Domain> <MemKB>",
>>      },
>>      { "button-press",
>>
>>
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-devel
>>
>>
>>     
>
>   


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.