В Linux можно настроить oom score так (поставив значение в -999), которое по сути означает то же самое, что и P_PROTECTED. Никто не мешает.
Ну и еще в Linux есть PSI. Я понимаю, что нужно писать код и вообще разбираться, но "поймать" разные градации состояния, когда с памятью становится туго в целом несложно - через PSI можно ловить их еще на подлете. И нормальная IDE вполне может это делать, запуская автосохранение в таком случае.
На OpenWRT очень многие приложения запускаются и завершаются постоянно, потому что базовая система буквально состоит из мелких утилит, и любое брожение по Web-интерфейсу постоянно их дергает в фоне (это я уж не говорю, что веб там на основе CGI, то есть каждый новый http-запрос - это новый процесс).
Linux запускают не только на персоналках, и не только на x86. Посмотрите на OpenWRT, оно на версии 6.x с удовольствием работает на таких устройствах. И там может даже быть запущен transmission.
Так в итоге правильное решение было найдено: MGLRU + 1000 ms TTL. В таком варианте оно как минимум делает не хуже всем, а в подавляющем большинстве случаев - лучше. И причем оно основано не на второстепенных метриках навроде "осталось свободной памяти" или "эмперически прибъем 50 мегабайт", а на основной и самой заметной - "система буксует уже 1000 мс".
А все потому, что автор патча не решает проблему, а купирует симптомы, на что ему много раз было указано, мягко и не очень.
Решение из патча и правда применимо в определенных случаях, но оно выглядит очень похожим на "поскольку malloc может вернуть NULL, давайте сразу при старте исполняемого файла выделим кусок в 50 мегабайт, авось больше NULL мы не увидим". В этом примере ровно та же проблема - а почему вообще 50, как это подобрать? А если мало? А если слишком много и память простаивать будет?
Один из вопросов к автору патча в LKML так и остался неотвеченным с его стороны. В патче добавляются три числа-параметра. Как подобрать для них разумные значения? Просто взять из головы 50 Мб слишком топорно, особенно если у тебя на самой железке всего 64 Мбайт.
В Германии вообще принято следовать правилам, и это принимает парадоксальные формы (для тех, кто не знаком с менталитетом). Если на сайте написать явно "запрещаем взламывать сайт или использовать его неочевидным образом", то и защиту приделывать не нужно - если его кто-то "взломает", то к нему просто можно с маски-шоу заходить и на 10 лет в кутузку - он же НАРУШИЛ ПРАВИЛО и опасный хакир.
И это не шутка, год назад проскакивали скриншоты из devtools с сайта Берлинской миграционки, где просто через alert просили не использовать API сайта для создания ботов, потому что это плохо и нарушает правила пользования (и никакой другой защиты, разумеется, не было сделано).
Также и с машиной. Она не ваша? Значит просто не добавляйте ее к себе в приложение, у вас же нет на это разрешения от владельца. И дело в шляпе.
>> Китайские компании обязаны поддерживать, помогать и сотрудничать с национальной разведкой КНР в соответствии с местным законодательством, следует из письма законодателей.
А можно показать более-менее серьезную страну, где таких правил нет?
Производитель заложил прибыль именно в жизненный цикл устройства, то есть "покупка железки + средний срок ее службы с активной подпиской". В таком случае можно сделать цену железки ниже себестоимости, чтобы перенести часть прибыли на потом. И все потому, что склонировать железку куда проще, чем сервисы.
Легко - берешь и делаешь с китайцами копеечную копию колонки, заливаешь на нее ПО слитое с одной-единственной официально купленной я.колонки и... да все равно на самом деле, что там у юзера будет, и что он купит яндекс.плюс, поскольку твой копеечный кал был дешевле ты его все равно сбагришь на авито.
В итоге чтобы хоть как-то сделать для китайцев эти упражнения невыгодными приходится продавать колонки дешевле себестоимости, а все остальное добирать плюсом и рекламой. Вот потому ее и нельзя отрезать, и все больше и больше "обязательных" облачных сервисов, без которых железка почти неработоспособна.
У нас уже есть полиция, следствие, прокуратура, следственный комитет, суд, фсин, и все они разделены как раз чтобы обязанности поделить. На точно нужны еще посредники в процессе? А если да, то сколько еще?
Тогда просто регистрировать нарушения не будут, как в той же Барселоне или Калифорнии за кражу 100 долларов в кошельке даже от просмотра ТВ не оторвуться.
Поднимите руку те, кто в 16 лет вводил свой реальный возраст на сайтах, а не +10 лет, скажем.
Впрочем изначально понятно, что все эти спрашивания возрастов - это чтобы исполнить дурацко написанные законы и прикрыть зад, а не решать проблемы доступа.
Только недавно посещал вместе с дедом глухую мордовскую деревню, откуда происходят родственники по отцу и в очередной раз вспомнил во всех красках, как там жили и вкалывали (чисто ради выживания) люди начиная со средних веков до середины 20 века (да там и сейчас кроме электрического освещения и тракторов с ДВС в целом ничего нового не появилось).
Нет уж, спасибо, лучше я в современном мире поживу.
Но тем не менее это объявление вообще ни разу ни эквивалентно const char *str_bytes = "abcdefg"; Как минимум:
гарантируется что в строке только ascii и его можно итерировать побайтно подразумевая "посимвольно"
объявлено четкое время жизни, а не просто "пришел const char*, угадай где он лежит и сколько можно им пользоваться"
не получится просто и легко приведением типа превратить его во что угодно, нужно открывать unsafe, который сразу орет всем "внимание, на нас хотят напасть"
То есть да, Rust выглядит куда более зубодробительно, но проясняет в разы больше деталей в моменте.
Есть еще классная утилита nltrace (https://github.com/socketpair/nltrace), которая запускается как strace, но выводит на консоль всю работу netlink в красивом виде.
Вы пошли совсем в религию, забывая о фактах.
В Linux можно настроить oom score так (поставив значение в -999), которое по сути означает то же самое, что и P_PROTECTED. Никто не мешает.
Ну и еще в Linux есть PSI. Я понимаю, что нужно писать код и вообще разбираться, но "поймать" разные градации состояния, когда с памятью становится туго в целом несложно - через PSI можно ловить их еще на подлете. И нормальная IDE вполне может это делать, запуская автосохранение в таком случае.
На OpenWRT очень многие приложения запускаются и завершаются постоянно, потому что базовая система буквально состоит из мелких утилит, и любое брожение по Web-интерфейсу постоянно их дергает в фоне (это я уж не говорю, что веб там на основе CGI, то есть каждый новый http-запрос - это новый процесс).
Linux запускают не только на персоналках, и не только на x86. Посмотрите на OpenWRT, оно на версии 6.x с удовольствием работает на таких устройствах. И там может даже быть запущен transmission.
Так в итоге правильное решение было найдено: MGLRU + 1000 ms TTL. В таком варианте оно как минимум делает не хуже всем, а в подавляющем большинстве случаев - лучше. И причем оно основано не на второстепенных метриках навроде "осталось свободной памяти" или "эмперически прибъем 50 мегабайт", а на основной и самой заметной - "система буксует уже 1000 мс".
А все потому, что автор патча не решает проблему, а купирует симптомы, на что ему много раз было указано, мягко и не очень.
Решение из патча и правда применимо в определенных случаях, но оно выглядит очень похожим на "поскольку malloc может вернуть NULL, давайте сразу при старте исполняемого файла выделим кусок в 50 мегабайт, авось больше NULL мы не увидим". В этом примере ровно та же проблема - а почему вообще 50, как это подобрать? А если мало? А если слишком много и память простаивать будет?
Один из вопросов к автору патча в LKML так и остался неотвеченным с его стороны. В патче добавляются три числа-параметра. Как подобрать для них разумные значения? Просто взять из головы 50 Мб слишком топорно, особенно если у тебя на самой железке всего 64 Мбайт.
В Германии вообще принято следовать правилам, и это принимает парадоксальные формы (для тех, кто не знаком с менталитетом). Если на сайте написать явно "запрещаем взламывать сайт или использовать его неочевидным образом", то и защиту приделывать не нужно - если его кто-то "взломает", то к нему просто можно с маски-шоу заходить и на 10 лет в кутузку - он же НАРУШИЛ ПРАВИЛО и опасный хакир.
И это не шутка, год назад проскакивали скриншоты из devtools с сайта Берлинской миграционки, где просто через alert просили не использовать API сайта для создания ботов, потому что это плохо и нарушает правила пользования (и никакой другой защиты, разумеется, не было сделано).
Также и с машиной. Она не ваша? Значит просто не добавляйте ее к себе в приложение, у вас же нет на это разрешения от владельца. И дело в шляпе.
>> Китайские компании обязаны поддерживать, помогать и сотрудничать с национальной разведкой КНР в соответствии с местным законодательством, следует из письма законодателей.
А можно показать более-менее серьезную страну, где таких правил нет?
Не обманывайте себя, производитель очень хорошо подумал. И хочет на хлеб и яхты заработать - себе, а не только китайцам.
Производитель заложил прибыль именно в жизненный цикл устройства, то есть "покупка железки + средний срок ее службы с активной подпиской". В таком случае можно сделать цену железки ниже себестоимости, чтобы перенести часть прибыли на потом. И все потому, что склонировать железку куда проще, чем сервисы.
Легко - берешь и делаешь с китайцами копеечную копию колонки, заливаешь на нее ПО слитое с одной-единственной официально купленной я.колонки и... да все равно на самом деле, что там у юзера будет, и что он купит яндекс.плюс, поскольку твой копеечный кал был дешевле ты его все равно сбагришь на авито.
В итоге чтобы хоть как-то сделать для китайцев эти упражнения невыгодными приходится продавать колонки дешевле себестоимости, а все остальное добирать плюсом и рекламой. Вот потому ее и нельзя отрезать, и все больше и больше "обязательных" облачных сервисов, без которых железка почти неработоспособна.
А что может сделать пользователь разумного с внутренностями ПО?
Если он такой молодец, что может разработать альтернативное ПО, которое будет работать автономно или с его собственными серверами - флаг в руки.
Здесь же вопрос скорее в защите сервисов Яндекса от потока китайских клонов, которые паразитируют на инфраструктуре.
У нас уже есть полиция, следствие, прокуратура, следственный комитет, суд, фсин, и все они разделены как раз чтобы обязанности поделить. На точно нужны еще посредники в процессе? А если да, то сколько еще?
Тогда просто регистрировать нарушения не будут, как в той же Барселоне или Калифорнии за кражу 100 долларов в кошельке даже от просмотра ТВ не оторвуться.
Основное могущество было сформировано в это же время, но не через Лунную программу, а через слом Бреттон-Вудской системы.
Поднимите руку те, кто в 16 лет вводил свой реальный возраст на сайтах, а не +10 лет, скажем.
Впрочем изначально понятно, что все эти спрашивания возрастов - это чтобы исполнить дурацко написанные законы и прикрыть зад, а не решать проблемы доступа.
>> А люди как пахали так и пашем.
Только недавно посещал вместе с дедом глухую мордовскую деревню, откуда происходят родственники по отцу и в очередной раз вспомнил во всех красках, как там жили и вкалывали (чисто ради выживания) люди начиная со средних веков до середины 20 века (да там и сейчас кроме электрического освещения и тракторов с ДВС в целом ничего нового не появилось).
Нет уж, спасибо, лучше я в современном мире поживу.
Уже несколько лет в каждой теме от вас идут напоминания что вы работаете только за колодезную воду да черствый хлеб с помойки.
Самому не надоело?
Но тем не менее это объявление вообще ни разу ни эквивалентно
const char *str_bytes = "abcdefg";
Как минимум:
гарантируется что в строке только ascii и его можно итерировать побайтно подразумевая "посимвольно"
объявлено четкое время жизни, а не просто "пришел const char*, угадай где он лежит и сколько можно им пользоваться"
не получится просто и легко приведением типа превратить его во что угодно, нужно открывать unsafe, который сразу орет всем "внимание, на нас хотят напасть"
То есть да, Rust выглядит куда более зубодробительно, но проясняет в разы больше деталей в моменте.
Есть еще классная утилита nltrace (https://github.com/socketpair/nltrace), которая запускается как strace, но выводит на консоль всю работу netlink в красивом виде.
Например так:
Скрытый текст
$ sudo ./nltrace ipset -L
netlink send(3):
Setting msg proto to 12
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 28
.type = 1537 <0x601>
.flags = 1
.seq = 1738840167
.port = 0
[PAYLOAD] 12 octets
02 00 00 00 05 00 01 00 07 00 00 00 ............
--------------------------- END NETLINK MESSAGE ---------------------------
netlink recv(3):
Setting msg proto to 12
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 36
.type = 1537 <0x601>
.flags = 0 <>
.seq = 1738840167
.port = 963725
[PAYLOAD] 20 octets
02 00 00 00 05 00 01 00 07 00 00 00 05 00 0a 00 ................
06 00 00 00 ....
--------------------------- END NETLINK MESSAGE ---------------------------
netlink send(3):
Setting msg proto to 12
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 28
.type = 1543 <0x607>
.flags = 773
.seq = 1738840168
.port = 0
[PAYLOAD] 12 octets
02 00 00 00 05 00 01 00 07 00 00 00 ............
--------------------------- END NETLINK MESSAGE ---------------------------
netlink recv(3):
Setting msg proto to 12
-------------------------- BEGIN NETLINK MESSAGE ---------------------------
[NETLINK HEADER] 16 octets
.nlmsg_len = 20
.type = 3
.flags = 2
.seq = 1738840168
.port = 963725
[PAYLOAD] 4 octets
00 00 00 00 ....
--------------------------- END NETLINK MESSAGE ---------------------------
Destroying descriptor fd 3