You can specify the resources a slave should offer using the --resources
flag. If unspecified, the slave determines ("guesses") appropriate values.
For memory it will call os::memory() as Alexander stated and, assuming
memory is at least 2 GB then it will leave 1 GB for the system and offer
the rest, i.e., memory - 1 GB. If memory is less than 2 GB it will offer
50%.

The relevant code from slave/containerizer/containerizer.cpp is:

  if (!strings::contains(flags.resources.get(""), "mem")) {
    // No memory specified so probe OS or resort to DEFAULT_MEM.
    Bytes mem;
    Try<os::Memory> mem_ = os::memory();
    if (mem_.isError()) {
      LOG(WARNING) << "Failed to auto-detect the size of main memory: '"
                    << mem_.error()
                    << "' ; defaulting to DEFAULT_MEM";
      mem = DEFAULT_MEM;
    } else {
      Bytes total = mem_.get().total;
      if (total >= Gigabytes(2)) {
        mem = total - Gigabytes(1); // Leave 1GB free.
      } else {
        mem = Bytes(total.bytes() / 2); // Use 50% of the memory.
      }
    }

On Thu, May 21, 2015 at 7:35 AM, Alexander Gallego <[email protected]>
wrote:

> Basically all the info you need is in os.hpp in the stout lib of mesos.
>
> Effectively, the cpus are just a syscall:
>
> sysconf(_SC_NPROCESSORS_ONLN);
>
>
> The memory on the other hand is calculated:
>
>
> # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 3, 23)
>   memory.total = Bytes(info.totalram * info.mem_unit);
>   memory.free = Bytes(info.freeram * info.mem_unit);
> # else
>   memory.total = Bytes(info.totalram);
>   memory.free = Bytes(info.freeram);
> # endif
>
>
>
>
>
> On Thu, May 21, 2015 at 6:51 AM, Aaron Carey <[email protected]> wrote:
>
>>  I've managed to increase the disksize by playing with some docker
>> options,
>>
>> Anyone have any idea about the memory?
>>
>> Thanks,
>> Aaron
>>
>>  ------------------------------
>> *From:* Aaron Carey [[email protected]]
>> *Sent:* 21 May 2015 11:19
>> *To:* [email protected]
>> *Subject:* How slaves calculate resources
>>
>>   Hi,
>>
>> I was just trying to figure out how Mesos slaves report the amount of
>> resources available to them on the host?
>>
>> We have some slaves running on AWS t2.medium machines (2cpu, 4Gb RAM)
>> with 32GB disks.
>>
>> The slaves are running inside docker containers.
>>
>> They report 2 cpus (correct), 2.5GB RAM and 4.9GB disk.
>>
>> Any ideas why this is different from what I can see on the machine? (both
>> on the host and within the slave docker container)?
>>
>> Thanks,
>> Aaron
>>
>
>
>
> --
>
>
>
>
>
> Sincerely,
> Alexander Gallego
> Co Founder & CTO
>

Reply via email to