FastNetMon

вторник, 31 декабря 2013 г.

С Новым Годом!

С Новым Годом, дорогие мои читатели!

Желаю, чтобы Новый Год принес Вам как можно больше радости, солнечных дней и поменьше проблем с софтом и оборудованием :)

понедельник, 30 декабря 2013 г.

Гарант Парк Телеком или r01.ru - пример худшего доменного Регистратора из возможных

Мучения с данной компанией у нас длятся уже несколько лет, основная жалоба - это, конечно же, на их до ужаса кривая система, которая даже не позволяет изменить IP адрес одного из DNS серверов без привлечения технической поддержки (а зачем кроме этого и регистрации доменов вообще нужен Регистратор, а?).

Дополнительным очень неприятным моментом является скорость ответа поддержки, которая достигает подчас 12 часов, даже в экстренных и очень срочных случаях.

Но последний раз Гарант Парк превзошел сам себя - их система удалила нам 1 из DNS серверов.

Все начиналось довольно просто - нам потребовалось добавить несколько IP адресов для одного из DNS серверов. Казалось бы, банальнейшая операция, но увы - в документации ни слова, а попытка указать несколько IP адресов через запятую или пробел (как у ряда других Регистратором) приводит лишь к ошибке "неверное латинское наименование". Решено было обратиться в поддержку! Первый раз нам повезло и сотрудник поддержки самостоятельно выполнил все операции и всего через 3 часа после нашего запроса и все заработало на ура.

А вот когда нам понадобилось поменять эти самые адреса через менее чем неделю началось дивное. На наш запрос в поддержку "выполните ручную смену IP адресов для DNS сервера" пришло чудесное:
Изменить данные Вы можете в разделе "Домены", далее, рядом с именем Вашего домена нажмите на ссылку "Смена DNS-серверов" выполненную в виде стилизованного карандаша в графе "Действия", внесите требуемую правку и сформируйте заказ на изменение, после чего, в течение 6-8 часов домен будет повторно делегирован на те же DNS, с учётом внесённых Вами правок.
Департамент по работе с клиентами R01
Телефоны:
+7 495 783-3-783
 8 800 775-37-83 (для регионов России)
Факс: +7 495 930-88-00
http://r01.ru
Ок, ну мы не дураки, отвечаем, что:
К сожалению, мы не можем этого сделать самостоятельно и вынуждены
обращаться в поддержку. При попытке внести указанные правки система
Ваша выдает "Неправильный формат ввода латинского наименования".
На что получаем фикс! Оказывается, это-таки можно сделать это самостоятельно! 
Здравствуйте!
Учитывая получаемое Вами сообщение, скорее всего Вы пытаетесь указать IP адрес без указания имени NS сервера, которому принадлежит IP.
Соответственно Вам следует указать две записи с одним именем, но разными IP:
ns1.domain.ru xx.yy.zz.aa
ns1.domain.ru aa.bb.cc.zz
После этого задание должно быть сформировано корректно.
Департамент по работе с клиентами R01
Телефоны:
+7 495 783-3-783
 8 800 775-37-83 (для регионов России)
Факс: +7 495 930-88-00
http://r01.ru
Самое волшебное, что этот вариант сработал и система не выдала ошибки. Но результат его действий заставил встать волосы дыбом - указанный ns1.domain.ru был вообще удален из DNS серверов для данного домена и whois принял вид:
nserver:       ns1. domain.ru.
nserver:       ns2.domain.ru. xx.yy.zz.aa
nserver:       ns3. domain.ru. xx.yy.zz.ab
nserver:       ns4. domain.ru. xx.yy.zz.ac
И никакие попытки вручную вернуть удаленный с корнями ns1 не увенчались успехом. И снова пришлось писать злобное письмо в регистратора.

Я специально не указываю контакты сотрудника отвечавшего нам, его вины в этом нет ни на грамм. Это исключительно проблема руководства (все же техническое), что у Доменного Регистратора ГОДАМИ не работают настолько типовые функции.

Никаких выводов я делать не буду, я просто делюсь информацией, чтобы никто из коллег по ИТ не попался в сети данной компании.

среда, 25 декабря 2013 г.

Аггрегация данных на Bash

Довольно часто в системном администрировании и обработке данных в целом встает задача аггрегации данных (либо, кто знаком с алгоритмом map-reduce - редукция).

Что значит это заумное слово?

Например, у нас на входе есть данные по трафике по странам:

IR 195534
IR 2352503
IR 318617
IS 0
IS 4302
IS 6568
IT 172796
IT 44845798
IT 9604406
JE 0
JE 0
JE 0
JM 0
JM 16988
JM 956
JO 11528479
JO 569127
JO 98058
JP 1030332
JP 1103192
Особенность в том, что данные получены из нескольких источников и чтобы получить итоговые цифры, нужно для совпадающих первых полей сложить числа справа.

Как это красиво сделать на Bash?

А вот так:
cat raw_data| sort | awk '{sums[$1] += $2} END {for (a in sums) print a, sums[a]}' 
И на выходе мы получим аккуратную табличку:
JE 0
JM 17944
JO 12195664
IR 2866654
JP 2133524
IS 10870
IT 54623000
За мысли о реализации спасибо: http://stackoverflow.com/questions/13258902/simple-aggregation-using-linux-scripting

вторник, 24 декабря 2013 г.

Сборка и установка DNS демона Yadifa на Debian 7 Wheezy

Очень интересный и быстрый DNS сервер, используемый реестром зоны .eu. К сожалению, он не имеет пакета для Debian ни в официальном репо, ни у разработчиков. Так что придется собрать его вручную. Также в случае интереса рекомендую посмотреть презентацию:  https://ripe64.ripe.net/presentations/132-RIPE64-YADIFA.pdf

Стягиваем и распаковываем код для сборки актуальной версии (на момент тестов, она была 1.3, актуальную смотрите на http://www.yadifa.eu/download):
cd /usr/src
wget http://cdn.yadifa.eu/sites/default/files/releases/yadifa-1.0.3-2880.tar.gz
tar -xf yadifa-1.0.3-2880.tar.gz
cd yadifa-1.0.3-2880


Стягиваем зависимости для сборки:
apt-get install libssl-dev gcc make automake autoconf

Собираем:
./configure --prefix=/opt/yadifa_1.0.3
make
make install
Копируем пример конфига в боевой конфиг:
mkdir /opt/yadifa_1.0.3/etc
cp /opt/yadifa_1.0.3/share/doc/yadifa/yadifad.conf.example /opt/yadifa_1.0.3/etc/yadifad.conf
После этого открываем в редакторе файл конфига: 
vim /opt/yadifa_1.0.3/etc/yadifad.conf
Создаем набор служебных папок (стандартно папка /usr/local/var никем более обычно не используется и после тестов ее можно удалить, не сломав ничего):
cd /usr/local
mkdir -p var/run var/log var/zones/keys var/zones/masters var/zones/slaves var/zones/xfr
И стираем там строку "edns0 on", почему-то он ругается на нее:
/opt/yadifa_1.0.3/sbin/yadifad
error setting variable: main.edns0 = 'on': CONFIG_UNKNOWN_SETTING_ERR
config: <main>: CONFIG_UNKNOWN_SETTING_ERR ( 'edns0' = 'on' [] )
config: at /opt/yadifa_1.0.3/etc/yadifad.conf:31: CONFIG_UNKNOWN_SETTING_ERR)
error: CONFIG_UNKNOWN_SETTING_ERR
2013-12-24 18:54:58.241476 | server   | E | config: <main>: CONFIG_UNKNOWN_SETTING_ERR ( 'edns0' = 'on' [] )
2013-12-24 18:54:58.241484 | server   | E | config: at /opt/yadifa_1.0.3/etc/yadifad.conf:31: CONFIG_UNKNOWN_SETTING_ERR)
Все, теперь мы можем запускать демона:
/opt/yadifa_1.0.3/sbin/yadifad 
С конфигурацией все довольно просто. Нужно в основной конфиг внести следующее:


<zone>
    type master
    domain domain.ru
    file masters/domain.ru.zone
</zone>

А сам файл зоны положить по пути: /usr/local/var/zones/masters/domain.ru.zone со следующим содержимым. Пример зоны можно взять с документа http://www.yadifa.eu/sites/default/files/yadifa-reference-manual.pdf страница 40.

Пока столкнулся с неприятной фишкой, что Yadifa отбрасывает зоны без ORIGIN макроса. Буду разбираться...



понедельник, 23 декабря 2013 г.

Как пописать несколько IP адресов для DNS сервера, размещенного на самом .ru домене?

Суть задачи сформулирована в сабже, пример приведу DNS серверами того же REG.RU:

dig @193.232.128.6 reg.ru
; <<>> DiG 9.4.3-P3 <<>> @193.232.128.6 reg.ru
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24999
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 12
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;reg.ru. IN A
;; AUTHORITY SECTION:
reg.ru. 345600 IN NS ns1.reg.ru.
reg.ru. 345600 IN NS ns2.reg.ru.
;; ADDITIONAL SECTION:
ns1.reg.ru. 345600 IN A 31.31.205.73
ns1.reg.ru. 345600 IN A 31.31.204.25
ns1.reg.ru. 345600 IN A 31.31.204.37
ns1.reg.ru. 345600 IN A 31.31.204.52
ns1.reg.ru. 345600 IN A 31.31.205.39
ns1.reg.ru. 345600 IN A 31.31.205.55
ns1.reg.ru. 345600 IN AAAA 2a00:f940::25
ns2.reg.ru. 345600 IN A 198.100.149.22
ns2.reg.ru. 345600 IN A 31.31.205.56
ns2.reg.ru. 345600 IN A 31.31.205.74
ns2.reg.ru. 345600 IN A 88.212.207.122
ns2.reg.ru. 345600 IN AAAA 2a00:f940::37
;; Query time: 16 msec
;; SERVER: 193.232.128.6#53(193.232.128.6)
;; WHEN: Sat Dec 21 01:21:05 2013
;; MSG SIZE  rcvd: 276
Так вот, если у REG.RU еще не будет это отображено в документации, то при добавлении DNS сервера нужно просто через запятую в поле IP адрес указать несколько IP адресов, на которых будет стоять DNS сервер. Таким образом удастся добиться повышенной отказоустойчивости за счет того, что вместо двух-четырех серверов можно поставить до сотни и более DNS машин!

Update: REG.RU анонсировал данную фичу официально: https://www.reg.ru/company/news/3241

ГарантПарк телеком r01.ru также делает подобное, но лишь вручную. Так как их интерфейс напрямую не позволяет ни через пробел, ни через запятую указать несколько IP адресов.

Если Ваш регистратор утверждает, что так сделать нельзя - он лжет :) ТехЦентр зоны .RU это поддерживается без проблем.

Обращаю внимание, что TTL для записей в корневой зоне стоит аж 345600 секунд, что почти 3е суток. Поэтому не ожидайте равномерного трафика по всем IP адресам для DNS сервера сразу же. Нужно ждать как минимум 3е суток, пока все-все-все сервера в интернете узнают, что у Вас теперь не 1 IP адрес для DNS сервера, а 2.

четверг, 5 декабря 2013 г.

Быстрая генерация кода для библиотеки cURL для С/PHP

У консольной версии библиотеки есть спец ключи для этого:
curl https://ripe.net --libcurl -

В итоге на экран будет выведено нечто следующее:

#include <curl/curl.h>
int main(int argc, char *argv[])
{
  CURLcode ret;
  CURL *hnd = curl_easy_init();
  /* curl_easy_setopt(hnd, CURLOPT_WRITEDATA, 0xbffff9d4); [REMARK] */
  /* curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, 0x3568); [REMARK] */
  /* curl_easy_setopt(hnd, CURLOPT_READDATA, 0xbffff9f0); [REMARK] */
  /* curl_easy_setopt(hnd, CURLOPT_READFUNCTION, 0x2945); [REMARK] */
  /* curl_easy_setopt(hnd, CURLOPT_IOCTLDATA, 0xbffff9f0); [REMARK] */
  /* curl_easy_setopt(hnd, CURLOPT_IOCTLFUNCTION, 0x290c); [REMARK] */
  curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, (curl_off_t)-1);
  curl_easy_setopt(hnd, CURLOPT_URL, "https://ripe.net");
  curl_easy_setopt(hnd, CURLOPT_PROXY, NULL);
  curl_easy_setopt(hnd, CURLOPT_HEADER, 0);
  curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1024);
  curl_easy_setopt(hnd, CURLOPT_NOBODY, 0);
  curl_easy_setopt(hnd, CURLOPT_FAILONERROR, 0);
  curl_easy_setopt(hnd, CURLOPT_UPLOAD, 0);
  curl_easy_setopt(hnd, CURLOPT_FTPLISTONLY, 0);
  curl_easy_setopt(hnd, CURLOPT_FTPAPPEND, 0);
  curl_easy_setopt(hnd, CURLOPT_NETRC, 0);
  curl_easy_setopt(hnd, CURLOPT_FOLLOWLOCATION, 0);
  curl_easy_setopt(hnd, CURLOPT_UNRESTRICTED_AUTH, 0);
  curl_easy_setopt(hnd, CURLOPT_TRANSFERTEXT, 0);
  curl_easy_setopt(hnd, CURLOPT_USERPWD, NULL);
  curl_easy_setopt(hnd, CURLOPT_PROXYUSERPWD, NULL);
  curl_easy_setopt(hnd, CURLOPT_RANGE, NULL);
  /* curl_easy_setopt(hnd, CURLOPT_ERRORBUFFER, 0xbffff7bc); [REMARK] */
  curl_easy_setopt(hnd, CURLOPT_TIMEOUT, 0);
  curl_easy_setopt(hnd, CURLOPT_REFERER, NULL);
  curl_easy_setopt(hnd, CURLOPT_AUTOREFERER, 0);
  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.16.4 (i386-apple-darwin9.0) libcurl/7.16.4 OpenSSL/0.9.7l zlib/1.2.3");
  curl_easy_setopt(hnd, CURLOPT_FTPPORT, NULL);
  curl_easy_setopt(hnd, CURLOPT_LOW_SPEED_LIMIT, 0);
  curl_easy_setopt(hnd, CURLOPT_LOW_SPEED_TIME, 0);
  curl_easy_setopt(hnd, CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t)0);
  curl_easy_setopt(hnd, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t)0);
  curl_easy_setopt(hnd, CURLOPT_RESUME_FROM_LARGE, (curl_off_t)0);
  curl_easy_setopt(hnd, CURLOPT_COOKIE, NULL);
  curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSLCERT, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSLCERTTYPE, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSLKEY, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSLKEYTYPE, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSLKEYPASSWD, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSH_PRIVATE_KEYFILE, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSH_PUBLIC_KEYFILE, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 2);
  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50);
  curl_easy_setopt(hnd, CURLOPT_CRLF, 0);
  curl_easy_setopt(hnd, CURLOPT_QUOTE, NULL);
  curl_easy_setopt(hnd, CURLOPT_POSTQUOTE, NULL);
  curl_easy_setopt(hnd, CURLOPT_PREQUOTE, NULL);
  curl_easy_setopt(hnd, CURLOPT_WRITEHEADER, NULL);
  curl_easy_setopt(hnd, CURLOPT_COOKIEFILE, NULL);
  curl_easy_setopt(hnd, CURLOPT_COOKIESESSION, 0);
  curl_easy_setopt(hnd, CURLOPT_SSLVERSION, 0);
  curl_easy_setopt(hnd, CURLOPT_TIMECONDITION, 0);
  curl_easy_setopt(hnd, CURLOPT_TIMEVALUE, 0);
  curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, NULL);
  /* curl_easy_setopt(hnd, CURLOPT_STDERR, 0xa091a690); [REMARK] */
  curl_easy_setopt(hnd, CURLOPT_HTTPPROXYTUNNEL, 0);
  curl_easy_setopt(hnd, CURLOPT_INTERFACE, NULL);
  curl_easy_setopt(hnd, CURLOPT_KRBLEVEL, NULL);
  curl_easy_setopt(hnd, CURLOPT_TELNETOPTIONS, NULL);
  curl_easy_setopt(hnd, CURLOPT_RANDOM_FILE, NULL);
  curl_easy_setopt(hnd, CURLOPT_EGDSOCKET, NULL);
  curl_easy_setopt(hnd, CURLOPT_CONNECTTIMEOUT, 0);
  curl_easy_setopt(hnd, CURLOPT_ENCODING, NULL);
  curl_easy_setopt(hnd, CURLOPT_FTP_CREATE_MISSING_DIRS, 0);
  curl_easy_setopt(hnd, CURLOPT_IPRESOLVE, 0);
  curl_easy_setopt(hnd, CURLOPT_FTP_ACCOUNT, NULL);
  curl_easy_setopt(hnd, CURLOPT_IGNORE_CONTENT_LENGTH, 0);
  curl_easy_setopt(hnd, CURLOPT_FTP_SKIP_PASV_IP, 0);
  curl_easy_setopt(hnd, CURLOPT_FTP_FILEMETHOD, 0);
  curl_easy_setopt(hnd, CURLOPT_FTP_ALTERNATIVE_TO_USER, NULL);
  curl_easy_setopt(hnd, CURLOPT_SSL_SESSIONID_CACHE, 1);
  ret = curl_easy_perform(hnd);
  curl_easy_cleanup(hnd);
}
Круто, не правда ли?

вторник, 3 декабря 2013 г.

Получение данных о загрузке шины QPI, бандвича памяти, а также утилизации шин PCI-E на процессорах семейства e5.

Я провожу тесты на PowerEdge 720 c Xeon e5 и в CentOS 6. Также точно работает с i7-3820.

На Dell часть фич работать не будет, по причине (вендор обещает починит это): http://software.intel.com/en-us/forums/topic/385194

Стягиваем фалик:

Собираем:
cd /usr/src
unzip intelperformancecountermonitorv2.8.zip
cd IntelPerformanceCounterMonitorV2.8
yum install -y make gcc gcc-c++
make

Открываем хав-ту и изучаем:
cat LINUX_HOWTO.txt 

Теперь попробуем считать метрики с процессора:

./pcm.x  1
 Intel(r) Performance Counter Monitor V2.6 (2013-11-04 13:43:31 +0100 ID=db05e43)
 Copyright (c) 2009-2013 Intel Corporation
Number of physical cores: 12
Number of logical cores: 24
Threads (logical cores) per physical core: 2
Num sockets: 2
Core PMU (perfmon) version: 3
Number of core PMU generic (programmable) counters: 4
Width of generic (programmable) counters: 48 bits
Number of core PMU fixed counters: 3
Width of fixed counters: 48 bits
Nominal core frequency: 2000000000 Hz
Package thermal spec power: 95 Watt; Package minimum power: 63 Watt; Package maximum power: 150 Watt;
Socket 0: 1 memory controllers detected with total number of 4 channels. 2 QPI ports detected.
Socket 1: 1 memory controllers detected with total number of 4 channels. 2 QPI ports detected.
WARNING: Core 0 IA32_PERFEVTSEL0_ADDR are not zeroed 5439548
Access to Intel(r) Performance Counter Monitor has denied (Performance Monitoring Unit is occupied by other application). Try to stop the application that uses PMU.
Alternatively you can try to reset PMU configuration at your own risk. Try to reset? (y/n)


Вот так, тут нужно сказать y. Это не костыль (не опасно, проверялось на 3х серверах, падений не зафиксировано), это рекомендация инженеров Intel:   http://software.intel.com/en-us/forums/topic/280522

Запускаем утилиту для контроля с 1 секундным обновлением данных:
./pcm.x 1


И, к сожалению, что на Dell, что на Intel шасси получаем вот такие сообщения:
ERROR: QPI LL counter programming seems not to work. Q_P0_PCI_PMON_BOX_CTL=0xffffffff
       Please see BIOS options to enable the export of performance monitoring devices (devices 8 and 9: function 2).
ERROR: QPI LL counter programming seems not to work. Q_P1_PCI_PMON_BOX_CTL=0xffffffff
       Please see BIOS options to enable the export of performance monitoring devices (devices 8 and 9: function 2).
ERROR: QPI LL counter programming seems not to work. Q_P0_PCI_PMON_BOX_CTL=0xffffffff
       Please see BIOS options to enable the export of performance monitoring devices (devices 8 and 9: function 2).
ERROR: QPI LL counter programming seems not to work. Q_P1_PCI_PMON_BOX_CTL=0xffffffff
       Please see BIOS options to enable the export of performance monitoring devices (devices 8 and 9: function 2).


Зато есть чудо тулза ./pcm-memory.x, которая показывает загрузку шины памяти в текущий момент и еще кучу информации о памяти:
Called sleep function for 1000 ms
---------------------------------------||---------------------------------------
--             Socket 0              --||--             Socket 1              --
---------------------------------------||---------------------------------------
---------------------------------------||---------------------------------------
---------------------------------------||---------------------------------------
--   Memory Performance Monitoring   --||--   Memory Performance Monitoring   --
---------------------------------------||---------------------------------------
--  Mem Ch 0: Reads (MB/s):  846.55  --||--  Mem Ch 0: Reads (MB/s):  798.78  --
--            Writes(MB/s):  296.10  --||--            Writes(MB/s):  317.43  --
--  Mem Ch 1: Reads (MB/s):  871.39  --||--  Mem Ch 1: Reads (MB/s):  825.85  --
--            Writes(MB/s):  327.96  --||--            Writes(MB/s):  349.45  --
--  Mem Ch 2: Reads (MB/s):  841.01  --||--  Mem Ch 2: Reads (MB/s):  789.40  --
--            Writes(MB/s):  297.20  --||--            Writes(MB/s):  316.76  --
--  Mem Ch 3: Reads (MB/s):  839.96  --||--  Mem Ch 3: Reads (MB/s):  792.42  --
--            Writes(MB/s):  294.68  --||--            Writes(MB/s):  317.00  --
-- NODE0 Mem Read (MB/s):   3398.91  --||-- NODE1 Mem Read (MB/s):   3206.47  --
-- NODE0 Mem Write (MB/s):  1215.94  --||-- NODE1 Mem Write (MB/s):  1300.63  --
-- NODE0 P. Write (T/s) :    564368  --||-- NODE1 P. Write (T/s):     633549  --
-- NODE0 Memory (MB/s):     4614.85  --||-- NODE1 Memory (MB/s):     4507.10  --
---------------------------------------||---------------------------------------
--                   System Read Throughput(MB/s):   6605.38                  --
--                  System Write Throughput(MB/s):   2516.57                  --
--                 System Memory Throughput(MB/s):   9121.95                  --
---------------------------------------||---------------------------------------

Еще есть тулза ./pcm-pcie.x  1, которая позволяет смотреть загрузку PCI-E шин.

В процессе поиска информации обнаружилась полезная команда:
rm -f /dev/shm/sem.*Intel*

Она удаляет кэш всех диагностических утилит, полезна при отладке сложных проблем, без нее ошибка будет отображаться лишь однажды.

Также на Sandy Bridge тулза pcm.x может попросить сделать вот так:

echo 0 > /proc/sys/kernel/nmi_watchdog modprobe msr
А после этого, чтобы она заработала нужно дернуть ./pcm.x -r 

Как нагрузить шину QPI?

Странный вопрос, но частенько это нужно. Что такое QPI - прошу в Google :)

Итак, подход довольно простой, нам нужно создать число процессов по числу NUMA нод, в случае двух процессорной конфигурации это 2 процесса соответственно.

После этого каждый процесс надо прибить к соответствующей NUMA ноде. А после этого на первом процессе создать SHM блок памяти и начать его читать/писать из второго процесса и наоборот. Получится, что для чтения/записи данных процессы будут вынуждены ходить друг к другу по шине QPI.

Так вот это все уже до меня придумал автор утилиты QPI-Stress и снабдил отличной иллюстрацией: https://github.com/pavel-odintsov/qpi-stress/blob/master/README


Собирал я на CentOS 6, но, уверен, отличий сильных не будет.

Открываем страницу проекта http://sourceforge.net/projects/qpi-stress/files/latest/download и выбираем прямую ссылку на архив.

Собираем:
cd /usr/src
wget тут_прямая_ссылка_на_архив_выше
tar -xf qpi-stress-0.1.tar.gz
cd qpi-stress-0.1/
cd src
# там этого файлика не хватает для сборки, но он есть в репо
curl http://sourceforge.net/p/qpi-stress/code/HEAD/tree/src/qpi.h?format=raw > qpi.h
cd ..
./configure --prefix=/opt/qpi-stress
Ура!

Теперь запускаем:
 qpi_stress
summay:
total processors: 24
total memory: 193252 MB
start processes: 24
data partern: 0xaa
runtime: 4294967295 seconds
result display delay: 10 seconds
per process  share memory size: 4 MB
bind process 0  to cpu 23
bind process 1  to cpu 22
bind process 2  to cpu 21
bind process 3  to cpu 20
bind process 4  to cpu 19
bind process 6  to cpu 17
bind process 5  to cpu 18
bind process 7  to cpu 16
bind process 8  to cpu 15
bind process 9  to cpu 14
bind process 10  to cpu 13
bind process 11  to cpu 12
bind process 12  to cpu 11
bind process 13  to cpu 10
bind process 14  to cpu 9
bind process 15  to cpu 8
bind process 16  to cpu 7
bind process 17  to cpu 6
bind process 18  to cpu 5
bind process 19  to cpu 4
bind process 20  to cpu 3
bind process 21  to cpu 2
bind process 22  to cpu 1
bind process 23  to cpu 0
-------------------------------
QPI stress staring ...
in recent 34298 r/w(s):
2013-12-03 19:46:34
read: 6737.57 MB/s, delay: 0.59 ms, write: 6747.00 MB/s, delay: 0.59 ms
in recent 34116 r/w(s):
2013-12-03 19:46:44
read: 6688.76 MB/s, delay: 0.60 ms, write: 6688.76 MB/s, delay: 0.60 ms
cin recent 34038 r/w(s):
2013-12-03 19:46:54
read: 6702.50 MB/s, delay: 0.60 ms, write: 6700.93 MB/s, delay: 0.60 ms
in recent 33378 r/w(s):
2013-12-03 19:47:04
read: 6560.14 MB/s, delay: 0.61 ms, write: 6560.14 MB/s, delay: 0.61 ms


воскресенье, 1 декабря 2013 г.

Отличный доклад про Btrfs, крайне рекомендую к просмотру!



Отличнейший доклад, рекомендую! 

Btrfs и OpenVZ/ploop


Не поддерживается, собака:
vzctl create 88811 --layout ploop --private /mnt/88811
Creating image: /mnt/88811.tmp/root.hdd/root.hdd size=5153024K
Creating delta /mnt/88811.tmp/root.hdd/root.hdd bs=2048 size=10307584 sectors v2
Storing /mnt/88811.tmp/root.hdd/DiskDescriptor.xml
Opening delta /mnt/88811.tmp/root.hdd/root.hdd
Adding delta dev=/dev/ploop56655 img=/mnt/88811.tmp/root.hdd/root.hdd (rw)
Error in add_delta (ploop.c:1171): Can't add image /mnt/88811.tmp/root.hdd/root.hdd: unsupported underlying filesystem
Failed to create image: Error in add_delta (ploop.c:1171): Can't add image /mnt/88811.tmp/root.hdd/root.hdd: unsupported underlying filesystem [3]
Destroying container private area: /mnt/88811
Creation of container private area failed

Использования btrfs в CentOS 6

Итак, тесты будем проводить на файловой системе в файле:

Создадим тушку на 2гб для тестов:

dd if=/dev/zero of=partition.img bs=2048 count=1000000
Установим утилиты для btrfs:
yum install -y btrfs-progs
Даем команду форматировать диск:
mkfs.btrfs partition.img 
После этого получаем страшную надпись, что btrfs НЕ ГОТОВ ДЛЯ ПРОДАКШЕНА!!! И ЭТО НЕ ПУСТЫЕ СЛОВА!!!! НЕ ИСПОЛЬЗУЙТЕ ЕГО В ПРОДАКШЕНЕ!!!
WARNING! - Btrfs Btrfs v0.20-rc1 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
fs created label (null) on partition.img
nodesize 4096 leafsize 4096 sectorsize 4096 size 1.91GB
Btrfs Btrfs v0.20-rc1
Монтируем в папку /mnt:
mount -o loop partition.img  /mnt
 Ура, мы смонтировались:

 mount|grep btrfs
/root/partition.img on /mnt type btrfs (rw,loop=/dev/loop/0)
В dmesg также много угрожающих надписей:
dmesg|grep btrfs
[940190.904464] TECH PREVIEW: btrfs may not be fully supported.
[940204.308137] btrfs: disk space caching is enabled
[940204.308974] btrfs: no dev_stats entry found for device /dev/loop/0 (devid 1) (OK on first mount after mkfs)
Ну в общем можете продолжать мучать ее :)


Самый удобный способ смотреть Youtube - смотрите его через VLC

Начиная с ветки 1.1 VLC при открытии сетевого источника для видео поддерживает URL в виде "http://www.youtube.com/watch?v=BwQNo6fc1AQ" и отлично его смотрит без всяких раздражающих фич Youtube.com :)

Если Вы думаете, что IP адреса .0 и .255 не могут быть использованы для работы - Вы в корне ошибаетесь

Вот чудесная статья приводящая примеры, когда бродкаст/сетевые адреса .255/.0 можно использовать для своих целей: http://searchitchannel.techtarget.com/tip/Assigning-an-IP-address-ending-in-0-or-255 там надо вести любой email адрес и тыкнуть keep reading.