четверг, 28 февраля 2013 г.

Отключение ядер процессора в Linux

Отключить ядро или несколько ядер процессора можно так:

$ echo 0 | sudo tee  /sys/devices/system/cpu/cpu1/online
$ dmesg
....
[ 2026.821631] CPU0 attaching NULL sched-domain.
[ 2026.821641] CPU1 attaching NULL sched-domain.
[ 2026.869148] CPU0 attaching NULL sched-domain. [ 2026.875937] CPU 1 is now offline
[ 2026.875945] SMP alternatives: switching to UP code

Чтобы включить ядро обратно, нужно:

$ echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
$ dmesg
....
[ 2097.441078] SMP alternatives: switching to SMP code
[ 2097.642192] Booting processor 1 APIC 0x1 ip 0x6000
[ 2027.140078] Initializing CPU#1
[ 2027.140078] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
[ 2027.140078] CPU: L2 Cache: 512K (64 bytes/line)
[ 2027.140078] CPU 1/0x1 -> Node 0
[ 2097.656021] CPU1: [ 2027.140078] kvm-clock: cpu 1, msr 0:1915701, secondary cpu clock [ 2097.656021] AMD QEMU Virtual CPU version 1.1.2 stepping 03 [ 2097.656021] CPU0 attaching NULL sched-domain. [ 2197.128013] CPU0 attaching sched-domain: [ 2197.128013] domain 0: span 0-1 level CPU [ 2197.128013] groups: group ffff88000180fd00 cpus 0 group ffff88000190fd00 cpus 1 [ 2197.128013] CPU1 attaching sched-domain: [ 2197.128013] domain 0: span 0-1 level CPU [ 2197.128013] groups: group ffff88000190fd00 cpus 1 group ffff88000180fd00 cpus 0

Эти изменения будут действовать, пока систему не перезагрузят. Чтобы уменьшить количество ядер перманентно нужно передать ядру параметр maxcpus=N, где N - количество ядер, которые нужно подключить в системе при загрузке.

понедельник, 25 февраля 2013 г.

Сохранение всех core файлов в одном месте

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

Создаю отдельный том (чтобы избежать переполнения файловой системы)

$ sudo lvcreate -n cores -L 2G VolGroup00
$ sudo mkfs -t ext3 /dev/VolGroup00/cores
$ sudo mkdir -p /var/local/cores
$ echo '/dev/VolGroup0/cores  /var/local/cores  ext3  defaults,nosuid,nodev   0   2' | sudo tee -a /etc/fstab
$ sudo mount /var/local/cores

Теперь нужно указать ядру сохранять core файлы в новую директорию

$ echo 'kernel.core_pattern=/var/local/cores/core.%e.%p.%t' | sudo tee /etc/sysctl.d/core.conf
$ sudo sysctl -p /etc/sysctl.d/core.conf

Полный список шаблонов есть в man 5 core:
%%  a single % character
%p  PID of dumped process
%u  (numeric) real UID of dumped process
%g  (numeric) real GID of dumped process
%s  number of signal causing dump
%t  time of dump, expressed as seconds since the Epoch,  1970-01-01 00:00:00 +0000 (UTC)
%h  hostname (same as nodename returned by uname(2))
%e  executable filename (without path prefix)
%c  core  file  size soft resource limit of crashing process (since Linux 2.6.24)
Теперь проверяем, будут ли сохраняться файлы в нужном месте. Открываем новый терминал и выполняем команды:

$ ulimit -c unlimited
$ kill -SIGSEGV $$

Терминал должен закрыться, а в /var/local/cores появиться новый файл

$ ls -l /var/local/cores/core.*
-rw------- 1 andrey andrey 1482752 Фев 25 13:47 /var/local/cores/core.zsh.7388.1361789269

суббота, 23 февраля 2013 г.

Восстановление Zalman ZM-VE200 SE после сбоя файловой системы

Дело было вечером, делать было нечего - решил попробовать эмуляцию других типов образов, кроме ISO. На диске у меня два раздела: один сравнительно небольшой, отформатированный в NTFS (для образов и обмена файлами с Windows) и второй раздел, занимающий остальное пространство, отформатированный в Ext3 (для себя любимого).

Вот на NTFS я и решил создать образ жесткого диска image.dsk. Чтобы не дожидаться, пока копируются нули, я создал разреженный файл (sparse file) благо NTFS их поддерживает. Забегая вперед скажу, что это и стало роковым шагом в тот вечер.

пятница, 22 февраля 2013 г.

Впечатляющие достижения HTML5 и WebGL


В дополнение к портированию Sauerbraten: Cube 2 на HTML5 и WebGL (демо) Mozilla и разработчики 3D движка Unigine выпустили еще одну демку. Смотрится замечательно, хотя немного и притормаживает на моей Nvidia GeForce GT440.

Я не нашел способа включить отображение FPS, поэтому трудно сказать насколько быстро работает эта демка.

При создании этой демки используется Emscripten, позволяющий компилировать C++ код в JavaScript.

четверг, 21 февраля 2013 г.

Предоставление доступа по известному ip адресу или через HTTP авторизацию

Если стоит задача разрешить доступ для некоторых клиентов (с известными ip адресами), а у остальных запрашивать HTTP авторизацию, то для Apache это можно сделать так:

Order Allow,Deny
Allow from x.x.x.x
Allow from y.y.y.y

AuthType basic
AuthName "Limited access. Login first!"
AuthUserFile /path/to/valid/.htpasswd
Require valid-user
Satisfy any

В этом случае если посетитель имеет ip адрес x.x.x.x или y.y.y.y, то ему будет предоставлен доступ без запроса пароля, в ином случае будет использована HTTP авторизация.

mod_fcgid: read data timeout in 40 seconds

Сегодня обнаружилось, что на одном из серверов PHP скрипты падают с различными ошибками. В логах нашлось следующее

[Thu Feb 21 13:43:48 2013] [warn] [client 192.168.1.117] mod_fcgid: read data timeout in 40 seconds
[Thu Feb 21 13:43:48 2013] [error] [client 192.168.1.117] Premature end of script headers: install.php

Поскольку на сервере стоит cPanel, то проблема решается так:
  • увеличить лимит ожидания ответа (я выставил 3600 секунд), для этого нужно добавить в
    /usr/local/apache/conf/includes/pre_virtualhost_global.conf
    <IfModule mod_fcgid.c>
        FcgidIOTimeout 3600
    </IfModule>

  • обновить конфигурацию apache
    /scripts/rebuildhttpdconf

  • перезапустить apache
    service httpd restart

воскресенье, 17 февраля 2013 г.

Wine 1.5.24 для Debian Squeeze/Wheezy

Вышла новая версия Wine 1.5.24. Пакеты для Debian Squeeze (i386 и amd64) и Debian Wheezy уже заливаются в мой репозитарий, в скором времени будут доступны для установки.

Чтобы установить новую версию Wine в Debian Wheezy (amd64) вы можете воспользоваться инструкцией.