Размером воркспейса принято называть счётчик зелёной зоны
const maxSysMem = 1024 * 1024 * 1024 * 16;
let sysMem = memory * 0.25;
if (sysMem > maxSysMem) {
sysMem = maxSysMem;
}
const workspaceSize = (memory - sysMem) / 2;
Где memory
это значение, которое в соответствующем поле memory, мы указываем в файле manifest.json
В данном случае в переменной memory
вносится занчение объема памяти более 64Gb. 1/4 от 64 равно 16Gb. Из формулы выше Далее значение sysMem
сотсавит 16Gb. Тогда формула для расчета memory
примет вид:
memory = workspaceSize x 2 + 16Gb
Пример: Задать зеленую зону в 40Gb
memory = 40 x 2 + 16 = 96
переводим полученное значение в байты
memory = 96 x 10243 = 103079215104
В данном случае значение memory
составит менее 64Gb и в дальнейших расчетах sysMem
принимает значение 1/4 от memory
workspaceSize = (memory - 1/4 memory) / 2
workspaceSize = (3/4 memory) / 2
workspaceSize x 2 = 3/4 memory
memory = workspaceSize X 2 x 4/3 = workspaceSize X 8/3
Пример: Задать зеленую зону в 10Gb
Для рассчетов лучше 10Gb сначала перевести в байты, а потом вычислить 8/3
memory = (10 x 10243) x 8/3 = 28633115306,66667
Так как дробь неправильная имеем на выходе значение с дробным остатком который мы не можем задать как значение memory
Далее отбрасываем дробный остаток и начинаем перебирать целую часть числа вычисляя workspaceSize
пока в результате не получим целое число
28633115307 x 3 / 8 = 10 737 418 240,125
28633115308 x 3 / 8 = 10 737 418 240,5
28633115309 x 3 / 8 = 10 737 418 240,875
28633115310 x 3 / 8 = 10 737 418 241,25
28633115311 x 3 / 8 = 10 737 418 241,625
28633115312 x 3 / 8 = 10 737 418 242
И на 6 ой попытке мы нашли ответ
memory
= 28633115312
В настоящее время при обновлении воркспейсов на новую версию возможно появление ошибки связанной с несоответствия типов int и float
Для ее устранения аналогично берем в файлеmanifest.json
значениеmemory
и подбираем его новое значение что бы при умножении на 3 и делении на 8 размер воркспейса был целым числом.
Пример зелёной зоны