Вижу, что вы физику хорошо знаете, респект. Только в статье написано, что там насос жидкость "прокачивает", так что это скорее принудительная циркуляция, чем конвекция. Но за внимательность спасибо!
А, понял. То есть вся сложность в том, что серверные платы рассчитаны на поток воздуха спереди-назад, а в ванне жидкость идёт снизу вверх. Поэтому их и приходится класть "мордой вниз", чтобы поток шел по тем же каналам. А десктопные вообще не подходят, потому что там сокет и память расположены горизонтально, и поток просто не будет их нормально обдувать. Логично, спасибо за ответ!
О, спасибо за разбор! Честно, я как-то не подумал про userland-proxy. Получается, если его отключить ради производительности, то мой скрипт на /proc просто ослепнет.
Про docker ps и docker inspect — согласен, это надежнее. А вот про nmap снаружи — это прям золотые слова. Никакой локальный скрипт не покажет, что реально торчит в интернет, если на роутере или в облаке есть свои фаерволы. Буду знать, спасибо!
Да, признаюсь, грешок есть. Иногда прогоняю свои мысли через нейросеть, чтобы звучало ровнее. Но ты прав, на Хабре это выглядит неестественно. Постараюсь писать проще, как есть, без этих "спасибо за уточнение"
Кстати, я тут расписал всё это в статье (сейчас на модерации). Там подробнее про чистку, замеры загрузки и тесты. Как одобрят — кину ссылку, если кому интересно будет почитать.
Согласен, память — это первое, что спасает старый ноут. Но в этом ThinkPad L510 (на чипсете GM45) уже стоят максимальные 4 ГБ, больше он физически не увидит (а если ставить 32-битную систему, то и вовсе 3 ГБ). Так что тут я уже уперся в потолок материнской платы.
А если бы там было 2 ГБ, то, конечно, докупить плашку на 4 ГБ (DDR3) было бы самым быстрым и дешевым апгрейдом. Но, увы, школьный бюджет и ограничения железа
PS: Спасибо, что подтолкнул проверить спецификации! Я посмотрел, и тут действительно есть нюанс. Для модификаций L510 с Core i3/i5 в документации Lenovo указано до 8 ГБ, но для версий с Core 2 Duo (как у меня) производители памяти (Kingston) пишут максимум 4 ГБ из-за ограничений чипсета GM45. Так что в моем случае "докинуть" память не выйдет — упёрся в потолок материнки. Но если бы там стоял i3, то две планки по 4 ГБ были бы отличным апгрейдом!
Спасибо за подробный разбор! Про принцип работы сторонних дефрагментаторов (скидывают в конец, потом собирают заново) я как-то не задумывался, а ведь действительно, на старом HDD это лишний износ.
За часть про SSD отдельный респект. Про Secure Erase раз в пару лет я слышал, но всегда было страшно это делать (кажется, что убьешь диск навсегда). А вы на практике часто так делаете? И если да, то как потом данные восстанавливаете — через обычный бэкап или есть какой-то секрет?
Спасибо за уточнение! Вы абсолютно правы, отключать SysMain целиком — это "топорный" метод, который рубит и полезное сжатие ОЗУ. Просто в моем случае на школьном HDD 2008 года служба загружала диск на 100% при старте, поэтому я выбрал самый радикальный путь, чтобы ноут вообще начал загружаться.
Про Disable-MMAgent не знал, это действительно более грамотный подход: оставить сжатие памяти, но убрать prefetching. На следующем "подопытном" ноутбуке (или если буду переустанавливать этот) обязательно попробую именно ваши команды. А Get-MMAgent после ребута показывает, что ApplicationPreLaunch отключен, а MemoryCompression остается True?
Спасибо за совет! Честно говоря, стандартной дефрагментацией я побоялся трогать, потому что на старых HDD она может идти сутками и убить остатки ресурса. Defraggler пробовал, но на 1809 (LTSC) он иногда капризничает с правами. А вот идея с отключением гибернации перед дефрагментацией — это прям в точку, надо будет попробовать на следующем таком ноуте. А сколько по времени у вас обычно уходит на дефрагментацию 320-гигового диска сторонним софтом?
PS: Насчет SSD — согласен на 100%! Если бы это был мой личный ноут, я бы уже давно поставил туда SSD. Но тут ситуация: это техника школы, бюджет не выделяли, а задача стояла «оживить бесплатно». Так что выжимаем максимум из того, что есть. Но если школа выделит деньги, я первый в очереди на установку! 😄
Очень классный разбор про userland-proxy. Я всегда думал, что если у Docker выключен userland-proxy, то порты все равно будут слушаться, но не было времени разобраться. Получается, что если я отключу userland-proxy в daemon.json, то listeners.py перестанет видеть опубликованные порты (потому что их будет слушать не docker-proxy, а NAT), и мне придется смотреть docker ps? А как вы на практике это решаете — парсите docker ps или всё-таки смотрите правила iptables?
Классный разбор! Больше всего зацепил момент про расположение материнских плат. Я как-то не задумывался, что в ванне поток жидкости идет вертикально снизу вверх, а не горизонтально, как воздух в стойке. То есть обычные серверы с горизонтальными слотами памяти в иммерсии будут греться неравномерно? Приходится искать специальные "вертикальные" платы или переделывать охлаждение?
Понял, спасибо за подробное объяснение! Действительно, after() — это единственный безопасный способ обновить UI из фонового потока, чтобы не было race condition с tkinter. Буду знать, полезный опыт для своих проектов
Очень крутая архитектура! Отдельный респект за то, что разбил систему на изолированные компоненты по HTTP/WebSocket, а не запихал всё в один поток — с локальными LLM иначе интерфейс точно бы фризило. У меня вопрос по GUI: вы использовали CustomTkinter, а как решили проблему с обновлением интерфейса из фоновых потоков? Запускали все сетевые запросы через asyncio в отдельном лупе, а в UI передавали данные через after()?
Спасибо за обзор, очень полезно! Отдельно хочу отметить systemd-analyze security. Я сталкивался с тем, что на старых серверах этот инструмент выдает высокий exposure level из-за того, что в юнит-файлах просто не прописаны директивы вроде PrivateTmp или ProtectSystem. А на практике вы пробовали закрывать эти параметры для системных сервисов? Не ломается ли после этого их работа? (Иногда ProtectSystem=strict отрезает доступ к нужным логам, и сервис падает)
А, так вот почему цикл вечный! Логично, UDP же не гарантирует доставку, поэтому проще «кричать» в сеть, пока не дойдет. Спасибо за разъяснение, буду знать
Интересный подход с nc напрямую к розетке, без облаков. А насколько стабильно держится TCP-соединение? У меня был опыт с Wi-Fi устройствами (правда, не Gauss), так они иногда отваливались от сети, если роутер перезагружался. Приходилось ли вам добавлять какие-то проверки ping перед отправкой команды, или она и так годами работает без сбоев?
Вижу, что вы физику хорошо знаете, респект. Только в статье написано, что там насос жидкость "прокачивает", так что это скорее принудительная циркуляция, чем конвекция. Но за внимательность спасибо!
А, понял. То есть вся сложность в том, что серверные платы рассчитаны на поток воздуха спереди-назад, а в ванне жидкость идёт снизу вверх. Поэтому их и приходится класть "мордой вниз", чтобы поток шел по тем же каналам. А десктопные вообще не подходят, потому что там сокет и память расположены горизонтально, и поток просто не будет их нормально обдувать. Логично, спасибо за ответ!
О, спасибо за разбор! Честно, я как-то не подумал про
userland-proxy. Получается, если его отключить ради производительности, то мой скрипт на/procпросто ослепнет.Про
docker psиdocker inspect— согласен, это надежнее. А вот проnmapснаружи — это прям золотые слова. Никакой локальный скрипт не покажет, что реально торчит в интернет, если на роутере или в облаке есть свои фаерволы. Буду знать, спасибо!Да, признаюсь, грешок есть. Иногда прогоняю свои мысли через нейросеть, чтобы звучало ровнее. Но ты прав, на Хабре это выглядит неестественно. Постараюсь писать проще, как есть, без этих "спасибо за уточнение"
Кстати, я тут расписал всё это в статье (сейчас на модерации). Там подробнее про чистку, замеры загрузки и тесты. Как одобрят — кину ссылку, если кому интересно будет почитать.
Согласен, память — это первое, что спасает старый ноут. Но в этом ThinkPad L510 (на чипсете GM45) уже стоят максимальные 4 ГБ, больше он физически не увидит (а если ставить 32-битную систему, то и вовсе 3 ГБ). Так что тут я уже уперся в потолок материнской платы.
А если бы там было 2 ГБ, то, конечно, докупить плашку на 4 ГБ (DDR3) было бы самым быстрым и дешевым апгрейдом. Но, увы, школьный бюджет и ограничения железа
PS: Спасибо, что подтолкнул проверить спецификации! Я посмотрел, и тут действительно есть нюанс. Для модификаций L510 с Core i3/i5 в документации Lenovo указано до 8 ГБ, но для версий с Core 2 Duo (как у меня) производители памяти (Kingston) пишут максимум 4 ГБ из-за ограничений чипсета GM45. Так что в моем случае "докинуть" память не выйдет — упёрся в потолок материнки. Но если бы там стоял i3, то две планки по 4 ГБ были бы отличным апгрейдом!
Спасибо за подробный разбор! Про принцип работы сторонних дефрагментаторов (скидывают в конец, потом собирают заново) я как-то не задумывался, а ведь действительно, на старом HDD это лишний износ.
За часть про SSD отдельный респект. Про
Secure Eraseраз в пару лет я слышал, но всегда было страшно это делать (кажется, что убьешь диск навсегда). А вы на практике часто так делаете? И если да, то как потом данные восстанавливаете — через обычный бэкап или есть какой-то секрет?Спасибо за уточнение! Вы абсолютно правы, отключать SysMain целиком — это "топорный" метод, который рубит и полезное сжатие ОЗУ. Просто в моем случае на школьном HDD 2008 года служба загружала диск на 100% при старте, поэтому я выбрал самый радикальный путь, чтобы ноут вообще начал загружаться.
Про
Disable-MMAgentне знал, это действительно более грамотный подход: оставить сжатие памяти, но убрать prefetching. На следующем "подопытном" ноутбуке (или если буду переустанавливать этот) обязательно попробую именно ваши команды. АGet-MMAgentпосле ребута показывает, что ApplicationPreLaunch отключен, а MemoryCompression остается True?Спасибо за совет! Честно говоря, стандартной дефрагментацией я побоялся трогать, потому что на старых HDD она может идти сутками и убить остатки ресурса. Defraggler пробовал, но на 1809 (LTSC) он иногда капризничает с правами. А вот идея с отключением гибернации перед дефрагментацией — это прям в точку, надо будет попробовать на следующем таком ноуте. А сколько по времени у вас обычно уходит на дефрагментацию 320-гигового диска сторонним софтом?
PS: Насчет SSD — согласен на 100%! Если бы это был мой личный ноут, я бы уже давно поставил туда SSD. Но тут ситуация: это техника школы, бюджет не выделяли, а задача стояла «оживить бесплатно». Так что выжимаем максимум из того, что есть. Но если школа выделит деньги, я первый в очереди на установку! 😄
Очень классный разбор про
userland-proxy. Я всегда думал, что если у Docker выключен userland-proxy, то порты все равно будут слушаться, но не было времени разобраться. Получается, что если я отключуuserland-proxyвdaemon.json, тоlisteners.pyперестанет видеть опубликованные порты (потому что их будет слушать не docker-proxy, а NAT), и мне придется смотретьdocker ps? А как вы на практике это решаете — парситеdocker psили всё-таки смотрите правила iptables?Классный разбор! Больше всего зацепил момент про расположение материнских плат. Я как-то не задумывался, что в ванне поток жидкости идет вертикально снизу вверх, а не горизонтально, как воздух в стойке. То есть обычные серверы с горизонтальными слотами памяти в иммерсии будут греться неравномерно? Приходится искать специальные "вертикальные" платы или переделывать охлаждение?
Понял, спасибо за подробное объяснение! Действительно,
after()— это единственный безопасный способ обновить UI из фонового потока, чтобы не было race condition сtkinter. Буду знать, полезный опыт для своих проектовОчень крутая архитектура! Отдельный респект за то, что разбил систему на изолированные компоненты по HTTP/WebSocket, а не запихал всё в один поток — с локальными LLM иначе интерфейс точно бы фризило. У меня вопрос по GUI: вы использовали
CustomTkinter, а как решили проблему с обновлением интерфейса из фоновых потоков? Запускали все сетевые запросы черезasyncioв отдельном лупе, а в UI передавали данные черезafter()?Спасибо за обзор, очень полезно! Отдельно хочу отметить
systemd-analyze security. Я сталкивался с тем, что на старых серверах этот инструмент выдает высокий exposure level из-за того, что в юнит-файлах просто не прописаны директивы вродеPrivateTmpилиProtectSystem. А на практике вы пробовали закрывать эти параметры для системных сервисов? Не ломается ли после этого их работа? (ИногдаProtectSystem=strictотрезает доступ к нужным логам, и сервис падает)А, так вот почему цикл вечный! Логично, UDP же не гарантирует доставку, поэтому проще «кричать» в сеть, пока не дойдет. Спасибо за разъяснение, буду знать
Интересный подход с
ncнапрямую к розетке, без облаков. А насколько стабильно держится TCP-соединение? У меня был опыт с Wi-Fi устройствами (правда, не Gauss), так они иногда отваливались от сети, если роутер перезагружался. Приходилось ли вам добавлять какие-то проверкиpingперед отправкой команды, или она и так годами работает без сбоев?