transparent huge pages witch hunt

Охота на ведьм THP

Во множестве различных ресурсов, имеющих мало-мальское отношение к системному администрированию Linux, можно встретить безаппеляционное «transparent huge pages нужно отключить». Это есть в рекомендациях (и хрен бы с ними, рекомендациями, — есть даже в скриптах!) Percona, это есть на сайте Redis: “…

  • Make sure to disable Linux kernel feature transparent huge pages, it will affect greatly both memory usage and latency in a negative way. This is accomplished with the following command: echo never > /sys/kernel/mm/transparent_hugepage/enabled.

…” — don’t do this, they’re wrong. Use “madvise” instead

Однако же у этой опции 3 значения. Среди них — madvise. Практически везде, где вам рекомендуют «отключите» — лучше ставить madvise. Потому, что если в вашей системе запущен какой-то софт, разработчики которого считают, что с THP он будет работать лучше, они используют специальный параметр для системного вызова madvise(). Софт, разработчики которого страдают от THP, madvise() с «нам нужны THP», естественно, использовать не будут. Для них, результат будет таким же, disabled.

btrfs send/receive gotcha: R/O snapshots only!

Засада с btrfs send/receive: поддерживается только R/O

Вспомнив, что по аналогии с ZFS, для Btrfs существует возможность send/receive snapshots, и попытавшись этим воспользоваться, выяснил, что это работает только для R/O snapshots, а не абы каких.

WTF is TXT_DB error number 2 error?

Что за фигня “TXT_DB error number 2 error”?

При настройке ключей-сертификатов (easyrsa openvpn) есть неплохие шансы увидеть невразумительную диагностику:

TXT_DB error number 2

Оставив без отдельного комментария внушительную кривизну как OpenVPN, так и OpenSSL, приведу решение:

если в файле index.txt.attr есть строка unique_subject = yes, замените на no.

Beware of LVM-2’s lvs nasty output habbits

Если вам когда-нибудь потребуется получить список LVM-томов без их атрибутов (размеров и пр.), обратившись к документации за нужными ключами, вы запишете что-то в таком духе:

sudo lvs --noheadings -o lv_name ИмяГруппы

К сожалению, этот тривиальнейший вариант не без граблей: если имена LVM-томов разной длины, то короткие будут дополнены пробелами.

GNU grep strikes again — annotate your output

Если вам приходилось когда-нибудь добавлять метки в текстовый поток, то, вероятно, вы оцените опцию «--label» grep. Скорее всего, пригодится она вам вкупе с «-H»:

cat /etc/hosts | grep -H --label=MyLabelHere .

Пример применения:

sudo vzlist -H1 | \
  xargs -rI: sh -c \
    'sudo vzctl exec : ip ad | grep -H --label=: . ' | \
      fgrep "inet " | fgrep -v 127.0.0.1 | \
        sort -k2 -u

— набор команд позволяет получить все интересные (loopback — неинтересен) IP, назначенные выполняющимся OpenVZ VEs.

MySQL slave’s binlog cluttering if Memory Engine used

Недавно был замечен любопытный полу-фича-полу-баг (на тот момент, когда был замечен — выглядело, скорее, как баг): в binlog’ах MySQL slave были операции удаления (натурально DELETE) из некоторых таблиц. Расследование показало, что это всё-таки не баг, но фича: при (пере-)запуске slave-сервера, для каждой из таблиц с типом движка memory, действительно выполняются операции DELETE. Это указано в офиц. документации, хотя, из неё, никак не следует, что это будет происходить на slave.

Put a Mac to sleep with command line

Sleep in 15 minutes (= 900 sec) since you run the command (note you don’t have to use sudo):

sleep 900 && pmset sleepnow

or you can go with that approach:

sudo systemsetup -setcomputersleep Never
…
sudo systemsetup -setcomputersleep 60

I never tried the latest one but keep in mind it’s told to use minutes, so “60” would be an hour

seq xargs printf generator snippet

Вариант для параллельной обработки data set’а:

seq 0 2 255 | xargs printf "%02x\n" | xargs …
seq 1 2 255 | xargs printf "%02x\n" | xargs …

Вместо 2 можно просто определить «шаговую» переменную и получить нужное кол-во «серий»

Вообще, xargs — очень мощный инструмент, и, по-сути, способ функционального программирования в SHELL. Ловлю себя на мысли, что мне порой не хватает поддержки нескольких «переменных» там

mysql upgrade check list: innodb_fast_shutdown

В чек-лист обновления MySQL: «The InnoDB shutdown mode. If the value is 0, InnoDB does a slow shutdown, a full purge and a change buffer merge before shutting down.

Use the slow shutdown technique before upgrading or downgrading between MySQL major releases, so that all data files are fully prepared in case the upgrade process updates the file format

Boot-camping your new bought Mac: DNS

Наверное, есть люди, которые просто покупают новый Macbook, и его настройки «из коробки» вполне им подходят. Если вы — UNIX-инженер, то на это, впрочем, не так уж много шансов. Что же может потребоваться? — Очевидно, если вы имеете дело с IT — либо hardware, либо software! Будем считать, что с hardware Apple справилась, поэтому, очевидно, вам нужен home brew. Кроме того, если networking для вас — не пустой звук, вам будет нужен Firewall — по-умолчанию он выключен, да и настроен не лучшим образом, если его даже и найти где включить. Что ж, до firewall-а мы ещё доберёмся, а в этой части Mac-настроек, я хочу задокументировать установку локального DNS-resolver’а. Зачем нужен свой DNS-resolver? — Этот вопрос мне приходилось слышать даже от коллег. Общий ответ на него, у меня, таков: «DNS слишком критичный сервис, чтобы оставлять его кому-либо ещё». Если вдаваться в причины, то может получиться такой список:

  • ваш канал в Internet может оказаться с ощутимой задержкой — в таком случае, кэширование DNS-ответов локально, существенно сократит время ожидания открытия WEB-страниц (да и не только их)
  • DNS-resolver может работать некорректно — например, вам могут выдавать спец. landing-сайты, если запрошенного домена не существует. Он может игнорировать или переопределять TTL записей
  • Вы не можете инвалидировать кэш DNS-сервера, который не под вашим управлением. Если вы внесли исправление в DNS-записи, а они уже были закэшированы, поможет вам только время. Запасайтесь терпением, и «не делайте так больше»

Поэтому, в общем-то, вопрос устанавливать локальный resolver для меня давно не стоит — очевидно, он нужен. На выбор есть несколько вариантов, и я выбираю Pdnsd. Он есть в home brew, так что установка тривиальна. Но дальше потребуется прикрутить его системно. Для этого пригодится вот такой plist:

Read more