LINUX.ORG.RU
ФорумTalks

Вышел free-classic-ng 0.0.2.

 , , ,


1

3

Здравствуйте, дорогие сторонники того, как free выводил кол-во используемой памяти до того, как в нём это поломали.

Для нас я сделал скрипт на Perl 5, который вычисляет кол-во используемой памяти как это было раньше во free.

Пример:

$ ./free-classic-ng.pl
Memory Total: 62.7256851196289 GB
Memory Used: 1.98384094238281 GB
Memory Free: 53.6326484680176 GB
Memory Cached: 6.98069000244141 GB
Memory Buffer: 0.128505706787109 GB
$
По дефолту выводится кол-во памяти в гигабайтах. Можно указывать опции [-k|-m|-g|-t] для переключения между единицами.

Скачать: https://saahriktu.ru/downloads/free-classic-ng-0.0.2.tar.lzma

★★★★★

Можно указывать опции [-k|-m|-g|-t] для переключения между единицами.

Маловато опций, добавь все метрические префиксы от «кекто» до «кветта» :)

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

Рановато ещё. За 20 лет кол-во оперативки в моём системнике увеличилось всего в 128 раз. Такими темпами только через 40 лет до людей начнут доходить петабайты оперативки. Там и можно будет обновить скрипт.

saahriktu ★★★★★
() автор топика

62.7256851196289 GB

Это 64231.10156249999 MB

Это 65772647.99999999 kB

Это 67351191551.99999 B

Это 538809532415.99994 b (или как там биты обозначаются).

Отсюда вопрос: как назвать величину в 0.00006 бита?

ugoday ★★★★★
()

Слишком длинное название и перл в зависимостях - не одобряю.

firkax ★★★★★
()
Ответ на: комментарий от ugoday

Отсюда вопрос: как назвать величину в 0.00006 бита?

60 микробит же.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

только через 40 лет до людей начнут доходить петабайты оперативки

Но ведь уже сейчас, на предложения воспользоваться разными софтовыми улучшалками, типа zram, zswap, uksm и т.д. и т.п., звучат возгласы «просто добавь памяти», как будто у них там гуттаперчевые возможности железа под «петабайты оперативки». )

krasnh ★★★★
()

Здравствуйте, дорогие сторонники того, как free выводил кол-во используемой памяти до того, как в нём это поломали.

Хоть бы рассказал для тёмных, что там поломали.

на Perl 5

Фу! Не Паскаль.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Хоть бы рассказал для тёмных, что там поломали.

В другой теме рассказывал: Про изменение поведения free между procps 3 и procps 4 .

В двух словах:

Классическая арифметика free: used = total - free - cached - buffers.

Теперь free выводит другое ближе к total - free.

saahriktu ★★★★★
() автор топика

Нет в тебе чувства прекрасного. Ну как может быть одновременно и classic и ng(next generation)? Ну и perl туда же. Нет бы python. А вообще classic версия должна быть на C, а ng на расте

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)

Предлагаю переименовать в free-classic-ng-reborn-rs. Ну и переписать на русте.

rupert ★★★★★
()

Не всем нужен Perl, перепиши на awk

buddhist ★★★★★
()
Ответ на: комментарий от saahriktu

Рановато ещё. За 20 лет кол-во оперативки в моём системнике увеличилось всего в 128 раз.

Лох! В моём в 1024 (128m -> 128g).

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Погрешность вычислений при работе с числами с плавающей запятой же.

Оттуда же старый мем про

0.1 + 0.2 = 0.30000000000000004

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Погрешность вычислений при работе с числами с плавающей запятой же.

Я в курсе. Вопрос в том, нахрена ты считаешь байты в IEEE754? Это ж эталонный говнобыдлокод просто!

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Скрипт получает кол-во памяти из /proc/meminfo в килобайтах, а уже это кол-во пересчитывает в нужные юзеру величины (по дефолту - гигабайты) через деление.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

а уже это кол-во пересчитывает в нужные юзеру величины (по дефолту - гигабайты) через деление.

Ага, и начинает брешить в процессе из-за ошибок округления. Как я уже писал, это просто эталонный говнобыдлокод. Не делай так, это плохо для кармы! Используй хотя бы целочисленное деление, а лучше fixed point числа.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

целочисленное деление, а лучше fixed point числа

С точностью до байта даже ядро не скажет, поэтому погрешности меньше чем 1 никому тут не интересны.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

С точностью до байта даже ядро не скажет

Как и с точностью до килобайта. Учёт памяти идёт по страницам.

поэтому погрешности меньше чем 1 никому тут не интересны.

Кто тебе сказал, что у тебя погрешность на уровне байтов, а не куда хуже? Ты проверял?

Но правда, хватит оправдывать свой говнобыдлокод. Просто сделай нормально.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Погрешность при делении float чисел есть, но она настолько незначительна, что все этим пользуются, и это нормально. Всё зависит от задачи. Утилитами типа free люди пользуются для оценки загруженности памяти. Эту оценку можно спокойно проводить и при такой погрешности.

saahriktu ★★★★★
() автор топика

saahriktu, ваши рассказы в разделе «Художественные произведения» на вашем сайте, это просто чума! Находка, надо же такое выдумывать!…

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Согласен.


Один мужик шёл по одному городу. Кругом были дома, люди и машины. Дома из песка, а машины из прессованного
пепла. И они ездили по дорогам из стекла. Стёкла трескались, но их регулярно меняли. Потому, что стекло было
очень дешёвым. Из прессованного воздуха.
...

urxvt ★★★★★
()
Ответ на: комментарий от saahriktu

Погрешность при делении float чисел есть, но она настолько незначительна, что все этим пользуются, и это нормально.

Кто все? За счёт денег в IEEE754 бьют по щщам с ноги, например.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

А тут не деньги, а RAM, причём не с точностью до байта, которой нет даже у ядра.

Вот взял и сделал версию с целочисленным делением. Теперь объясните мне: чем

Memory Total: 62 GB
Memory Used: 4 GB
Memory Free: 55 GB
Memory Cached: 3 GB
Memory Buffer: 0 GB
точнее чем
Memory Total: 62.7256851196289 GB
Memory Used: 3.40106964111328 GB
Memory Free: 55.8500022888184 GB
Memory Cached: 3.01894760131836 GB
Memory Buffer: 0.455665588378906 GB
?

На мой взгляд, второй вариант как раз таки точнее и больше подходит для оценки использования памяти.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от somemong

Мне не обязательно. Просто чем точнее - тем лучше. И я как раз спорю с человеком, который как раз это и утверждает. Просто у нас разные представления о точности отображения данных о памяти.

В его представлении точность гарантируют только целые числа. А я подхожу с точки зрения математики, т.е. чем больше цифр после запятой точнее - тем лучше.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Лучше в виде таблицы, например:

 085 $ free --mega
               total        used        free      shared  buff/cache   available
Mem:            8204        1230        5187         171        2272        6974
Swap:           4294           0        4294

 086 $ ./Desktop/free -m

Total   : 7824,016
Free    : 4197,98
Used    : 1414,46875
Cached  : 2013,406
Buffers : 198,1602
Units   : Mb

 087 $ ./Desktop/free -m | ft

  Total    Free    Used  Cached Buffers Units
  -----    ----    ----  ------ ------- -----
7824,02 4190,13 1416,24 2019,48  198,17 Mb

dmitry237 ★★★★
()
Ответ на: комментарий от somemong

Ты лучше расскажи, зачем тебе точность в 15 знаков после запятой

Во-во, читать это жутко неудобно, двух знаков после запятой хватит всем! 😄

skyman ★★★
()
Ответ на: комментарий от saahriktu

А я подхожу с точки зрения математики, т.е. чем больше цифр после запятой точнее - тем лучше.

Объясни мне с точки зрения математики, что такое 0.6289 байта и откуда они взялись, если ты делил количество килобайт (целое число) на степень двойки (тоже целое число).

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

А все вот эти знаки после запятой нужны?

Camel ★★★★★
()
Ответ на: комментарий от saahriktu

Просто чем точнее - тем лучше.

В ядерной физике - да, там «десятые знаки» влияют на то, получит ли теория Нобелевку или пойдет в стол. Но нет смысла считать биты, когда ОЗУ измеряется в десятках… или даже тысячах гигабайт.

somemong
()
Ответ на: комментарий от hateyoufeel

Объясни мне с точки зрения математики, что такое 0.6289 байта

Это погрешность вычислений. С точки зрения математики важнее другой вопрос: ряд правильных цифр после запятой увеличивает эту математическую точность, а их отбрасывание эту точность уменьшает.

Т.е. спор про 15-ю цифру после запятой относительно точности менее важен чем про ряд цифр после запятой до неё, который эту точность увеличивает.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

ряд правильных цифр после запятой увеличивает эту математическую точность

Так а с чего ты взял, что у тебя эти цифры правильные? У тебя, судя по всему, ересь начинается уже с третьего-четвёртого знака.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Это погрешность вычислений. С точки зрения математики важнее другой вопрос: ряд правильных цифр после запятой увеличивает эту математическую точность, а их отбрасывание эту точность уменьшает.

Не путай «верные цифры» и «значащие цифры»: ошибки вычислений ©.

quickquest ★★★★★
()

Сделай чтоб изначально размер был в байтах, а при использовании опции -h включались приставки.

u5er ★★
()
Ответ на: комментарий от hateyoufeel

Проверил по

Memory Total: 62.7256851196289 GB
, например.

Как минимум, 9 цифр после запятой тут нужны, иначе при срезании цифр и переводе в байты (и округлении до целых, разумеется) данные начинают расходиться с «free -b».

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от dmitry237

Исходные данные уже неточные, в целых KB.

Суть в том, что округление до целых резко увеличивает эту неточность. А float point арифметика хоть и увеличивает погрешность, но не так как при срезании цифр после запятой.

Это как если погрешность от float point арифметики размером с хомячка, а погрешность от целочисленной арифметики размером с Годзиллу.

saahriktu ★★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)