Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 1 июня 2011< ^ >
gds установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Светлое будущее -- http://camlunity.ru/ | Нефильтрованное настоящее -- https://github.com/camlunity/kamlo_wiki | Портер прошлое -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:07:26] ygrek выползает из под стола и укоряеще смотрит на Typhon'а
[00:12:08] <zert> http://www.youtube.com/watch?v=hzXFYvigzfQ
[00:19:30] <gds> у людей (у флюродросселя в том числе) горе, а вы со смехуёчками тут.  Злые вы, уйду я от вас.  (однако, в качестве особо изощрённой мсти, уйду ненадолго.)
[00:19:37] gds вышел(а) из комнаты
[00:36:45] ermine вышел(а) из комнаты
[01:23:51] <Typhon> http://www.quora.com/Erlang-Haskell-OCaml-screw-one-marry-one-kill-one-Which-and-why
[01:53:31] komar вышел(а) из комнаты: Replaced by new connection
[01:53:31] komar вошёл(а) в комнату
[02:03:04] <komar> Ешкин башмак.
[02:03:16] <komar> А разгадка одна — надо писать моар статей, чтобы такие идиоты их не писали.
[02:19:16] ygrek вышел(а) из комнаты
[02:26:48] <Typhon> komar, у тебя есть аккаунт на гитхабе? ^_^
[02:27:03] <komar> Есть.
[02:28:18] <komar> https://github.com/apsheronets вроде как.
[02:31:05] <komar> И на патчтаге есть, только там не менее пусто.
[02:33:10] <zert> апшеронец — это ты штоле?
[02:36:23] <komar> Ога.
[02:36:27] <komar> /komar уже кто-то занял.
[02:37:06] <komar> У меня вообще-то имя с фамилией есть, они там указаны.
[02:40:26] <zert> я где-то в другом месте этот ник видел
[02:41:50] <komar> ластфм, фликр, где угодно.
[02:44:53] <Typhon> komar, https://github.com/camlunity/kamlo_wiki инджой
[02:45:04] <Typhon> в смысле, можешь начинать писать моар статей ;-)
[02:45:39] <komar> А, спасибо.
[02:46:02] <Typhon> олсо, ты металлист штоле?
[02:48:52] <komar> Нет конечно.
[02:49:56] <zert> надо написать разоблачительную статью про х-ь
[02:50:15] <komar> Но зато у меня есть толстые байкерские кожаные штаны и косуха, говнодавы, кожаные митенки и черная бандана с черепами, в которых я ходил все холодное время года, 2000 плеев тристании на ластфме и сейчас из колонок играет блек.
[02:50:48] <komar> zert: а я напишу, какая кака кабал.
[02:52:02] <zert> та чого кака?
[02:52:06] <zert> в камле и такого нет
[02:52:14] <komar> И слава б-гу.
[02:52:18] <zert> доо
[02:52:23] <zert> в камле вообще нихрена нет
[02:52:37] <zert> а в х-е миллиард библиотек
[02:52:38] <Typhon> zert, см OcamlMythDemolished
[02:52:50] <Typhon> zert, сколько из них работают? ^_^
[02:52:59] <komar> В п-не тоже миллиард библиотек.
[02:53:02] <Typhon> про xml -- ни одна, судя по всему
[02:53:16] <zert> Typhon: подсказали же
[02:53:18] <ftrvxmtrx> а в C-то сколько, страшно подумать
[02:53:18] <zert> работает
[02:54:08] <zert> komar: питон сам по себе говно
[02:54:18] <zert> а от хаскиля хоть не тошнит
[02:54:21] <Typhon> с изображениями тоже ни одна толком не работает
[02:54:36] <zert> единственный язык, на котором можно писать прикладной софт
[03:09:22] Typhon вышел(а) из комнаты
[03:24:51] zert вышел(а) из комнаты
[05:55:59] komar вышел(а) из комнаты: Replaced by new connection
[05:56:00] komar вошёл(а) в комнату
[09:07:51] gds вошёл(а) в комнату
[09:43:29] <gds> подскажите про ocamldoc.  Хочу сделать так, чтобы несколько мелких модулей были задокументированы на одной странице, чтобы глозаме не бегать туда-сюда.  Есть решение?
[10:03:55] Sergey Plaksin вошёл(а) в комнату
[10:29:52] ermine вошёл(а) в комнату
[11:09:54] Typhon вошёл(а) в комнату
[11:22:33] <f[x]> по-моему нет
[11:25:43] ftrvxmtrx вышел(а) из комнаты
[11:31:57] <gds> Typhon: пробую свежий amall, но, видимо, что-то делаю не так: http://paste.in.ua/2504/
[11:32:20] <gds> и вот не знаю, "-" в имени cma -- нормально или нет?
[11:33:08] <Typhon> amall-dbi.mly ?
[11:33:21] <gds> шоке
[11:33:31] <Typhon> в смысле, не помню такого :-)
[11:34:26] <gds> есть подозрение, но не уверен.  не должно ли быть где-нибудь "dbi/amall-dbi.mllib"?
[11:34:34] <gds> т.е. "amall-dbi.mllib"
[11:35:28] <Typhon> [v
[11:35:29] <Typhon> хм
[11:35:49] <Typhon> а в репе нету amall-dbi.mllib
[11:35:59] <Typhon> а у меня hg st показывает, что нет изменений и файл есть
[11:38:12] <Typhon> запушил amall-dbi.mllib но мне такое не нравится что-то, почему hg st не показал его никак, а когда я hg add file && hg ci  && hg push сделал — он запушился
[11:39:53] <Typhon> ( в .hgrc вот такие алиасы : http://paste.in.ua/2505/ может тут что-то глючит, пойду консультироваться )
[11:48:23] <gds> дело в ".ba*" в .hgignore.
[11:48:34] <Typhon> как так?
[11:48:44] <gds> игнорируешь файл, содержащий сначала любой символ, потом "b", потом от 0 до n символов "a".
[11:48:45] <Typhon> я сейчас поредактировал файлик — статус показывает его
[11:49:00] <Typhon> хм
[11:49:17] <Typhon> :-( вот тупанул
[11:49:28] <Typhon> может там ещё тогда так спряталось что-то
[11:49:55] <Typhon> а какой-то другой паттерн, более логичный (для меня) у меня не принял :-)
[11:50:32] <gds> "\.ba.*"?  Вообще, что игноришь хочешь?
[11:50:36] <gds> тьфут
[11:50:43] <gds> "что игнорить хочешь?"
[11:51:32] <Typhon> .bak, .ba0 , .ba1
[11:51:41] <Typhon> $ надо вставить, какой-нибудь
[11:53:03] <Typhon> не помню, сколько версий оазис генерирует, возможно, что только три (bak, ba0, ba1)
[11:53:04] <gds> \.ba.$
[11:53:14] <gds> хотя, где он генерирует их?
[11:53:35] <gds> "\.ba[k0-1]$" вероятно.
[11:53:36] <Typhon> в корне прямо
[11:54:04] <gds> тогда "^[^/]/\.ba[k0-1]$", вероятно.
[11:54:34] <Typhon> ужасы какие-то, надо схоронить куда-то, в полезные заметки
[11:54:46] <gds> сначала всё-таки потестить советую.
[11:55:32] <Typhon> последний вариант не фильтрует баки
[11:55:46] <gds> в корне которые?
[11:55:51] <gds> ща потестю.
[11:56:42] <gds> ^[^/]*\.ba[k0-1]$
[11:57:11] <Typhon> о, да, так фильтрует
[11:58:55] <f[x]> а зачем их фильтровать?
[11:58:59] <f[x]> их удалять надо сразу
[11:59:09] <f[x]> а не будешь видеть - будет накапливаться хлам
[11:59:10] <Typhon> руками, постоянно? :-(
[11:59:24] <gds> в рабочей дире -- пусть накапливается.
[11:59:24] <f[x]> э, постоянно?
[11:59:33] <f[x]> откуда они вообще берутся?
[11:59:40] <f[x]> ты что - правишь сгенеренные файлы часто?
[11:59:41] <Typhon> ну они ж при каждом oasis setup появляются
[11:59:46] <f[x]> нет конечно
[11:59:46] <Typhon> хм
[12:00:04] <f[x]> только если у файла чексума сгенеренной части не совпадает
[12:00:11] <f[x]> * сумма
[12:00:36] <f[x]> может hg перводы строк факапит?
[12:00:46] <Typhon> о как, тогда действительно, надо удолять!!
[12:00:58] <gds> причём переводы строк?
[12:02:11] <f[x]> я хз, просто предполагаю причину
[12:02:50] <gds> понял.
а я вот емаксовские ~ быкапы оставляю, иногда пригождались, а в hg игнорю их.
[12:04:32] <Typhon> gds: если бэкапы генерённых только после ручного редактирования появляются, а сейчас проверил, так и есть, то предлагаю действительно, выпилить их из игнора и удалять, после появления, благо, руками файлы редко сгенерённые редактируются.
[12:05:23] klapaucius вошёл(а) в комнату
[12:06:46] Sergey Plaksin вышел(а) из комнаты
[12:09:15] <gds> Typhon: понял, мне непринципиально, игнор или удоление.
[12:13:34] <Typhon> интересно, с syntax: glob, который я обычно использую, сел бы я в лужу или не?
[12:14:43] <gds> сел бы в другую лужу, вероятно: .ba* в не-корневых дирах игнорировались бы.
[12:15:47] <gds> о, новость по итератам в камлопланету зафигачили.  с битым форматированием.  кривота!11
[12:16:36] <klapaucius> Добрый день, а у вас тут какие-нибудь еще *ml обсуждаются?
[12:16:58] <Typhon> klapaucius: все остальные *ml мертвы же :-)
[12:17:18] <Typhon> gds: в рсс — битое, а на странице https://forge.ocamlcore.org/forum/forum.php?forum_id=794 — вроде бы ок.
кстати, Iteratees.Make(IO)This project has not yet categorized itself in the Trove Software Map <https://forge.ocamlcore.org/softwaremap/trove_list.php> !
[12:17:19] <gds> у нас тут ещё какие-то *ml осуждаются.
[12:18:30] <klapaucius> Typhon, во-первых, не понятно - почему только остальные, а во-вторых - ну и что с того, что они мертвые - их теперь и пообсуждать нельзя?
[12:19:58] <Typhon> gds: попушил hgignore с выпиленным "опасным" фильтром, праастите меня, я больше ни буду :-)
[12:20:14] <gds> Typhon: так почти ничего не поломалось же, всё ок :)
[12:20:46] <Typhon> klapaucius: дык можно, у нас же тут кружок некрофилов, любителей мёртвых поэтов, и всё такое
[12:21:25] <klapaucius> А f# вы за ml считаете?
[12:21:46] <Typhon> только Ela!11
[12:22:14] <gds> если окамл считать за ml, то f# разумно считать за ml на основании "наследования".  хотя, скажем, специфический такой ml.
[12:24:30] Kakadu вошёл(а) в комнату
[12:25:19] <klapaucius> Специфика, я так понял, там в том, что наполовину это ml, ну а второй половины нет.
[12:26:05] <gds> я бы сказал, что вторая половина языка -- интеграция с дотнет и всё, что нужно для этого.
[12:26:15] <f[x]> klapaucius: обсуждать можно, только скорее всего практикующих другие ml'и здесь мало
[12:26:17] <gds> ну и попытки всё это запихать в один язык, понятное дело.
[12:30:38] zert вошёл(а) в комнату
[12:39:22] ftrvxmtrx вошёл(а) в комнату
[12:42:52] f[x] вышел(а) из комнаты
[12:49:47] f[x] вошёл(а) в комнату
[13:18:59] gds вышел(а) из комнаты: Replaced by new connection
[13:19:01] gds вошёл(а) в комнату
[13:29:23] <gds> судя по моим подозрениям, Lwt_io.establish_server под юниксами запускает слушалку фоновым тредом, а падвендой -- блокируется на accept (хотя соединения принимает.  хотя не знаю, параллельно их запускает или последовательно.).  wtf time = 1 час.
[13:32:59] <ermine> в lwt darcs новая химия с форками
[13:33:57] <gds> не, я не настолько новую lwt взял.
[13:34:39] <ermine> это я щас запустила darcs pull
[14:15:03] <Typhon> вести с полей https://github.com/yziquel/acaml
[14:18:13] <Typhon> компелятор камлоподобного языка в ats
[14:19:07] <komar> А что это?
[14:19:33] <Typhon> ATS ?
[14:19:46] <komar> Угу.
[14:19:55] <Typhon> http://www.ats-lang.org/
[14:20:05] <Typhon> типизированный низкоуровневый язык
[14:20:25] <Typhon> должен быть очень быстрым, тесты я особо не смотрел, но народу вроде как нравится скорость
[14:20:55] <komar> Ух ты.
[14:20:58] <komar> Оно годное?
[14:21:34] <Typhon> ats или acaml ?
[14:21:41] <komar> ats.
[14:21:42] <Typhon> ats вроде как годное
[14:21:56] <Typhon> но хз, насколько оно стабильное
[14:22:13] <ftrvxmtrx> "ATS is extremely fast, as fast as C or C++, with usually a smaller memory footprint. For all these advantages, it has one major drawback: a very ugly syntax."
[14:24:07] <Typhon> ну хз, насчёт синтаксиса, но вот acaml может помочь %)
[14:24:43] <Typhon> не особо хуже окамлвого синтаксиса, если на нём писать императивно с активным использованием массивов
[14:30:46] <klapaucius> Ну понятно, что не особо хуже. Это же бывший dependent ml, если я не ошибаюсь. И синетаксис там обычный ml-ный, не считая замусоривания всякими {n:nat}. Другое дело, что автор цитаты, по всей видимости, не в восторге от ml-синтаксиса вообще.
[14:39:38] <gds> интересно вот что.  для того, чтобы ats компилировал и проверял типы (в том числе зависимые), их надо как-то класть в исходник.  откуда acaml возьмёт, например, размерности массивов?
[14:49:05] <klapaucius> Да ниоткуда не возьмет. Но в ats же можно писать и код без указания зависимых типов - ничего проверятся, разумеется, не будет.
[14:49:24] <gds> так не интересно.
[15:04:09] <klapaucius> Хотя, не декларируется же совместимость с окамлом - только окамлоподобие. Я посмотрел первый попавшийся пример - там уже расширение, линейные типы. Так что весь смысл этого проекта, как видно, чтоб вместо let val val val in end писать let let let и так далее.
[15:05:07] <Typhon> klapaucius: они планируют сорц совместимость
[15:05:43] <Typhon> может будут генерировать типы типа array1, array2 ну и тд
[15:05:53] Kakadu вышел(а) из комнаты: Replaced by new connection
[15:05:53] Kakadu вошёл(а) в комнату
[15:06:07] <klapaucius> Ну, допустим, окамл-код компилироваться акамлом будет, но возможности атс-а для него будут недоступны - см. выше.
[15:07:00] <klapaucius> Для того, чтоб возможности использовать код придется переписывать, расставлять аннотации типов - как минимум.
[15:38:15] gds вышел(а) из комнаты
[16:27:24] gds вошёл(а) в комнату
[17:30:42] Digimmortal вошёл(а) в комнату
[17:32:00] Kakadu вышел(а) из комнаты
[17:36:04] Kakadu вошёл(а) в комнату
[17:41:23] <gds> посмотрел rps у хттп-сервера на siege -b -c 100 -- порядка 3000+-200, но недолго, потом siege жалуется на ошибки свои.
текучку проверить не могу: siege -b -c 10 хоть и дольше живёт, но изменения памяти непоказательны, память постоянна в течение 45 секунд, а дальше -- http://paste.in.ua/2507/
[17:45:08] <Typhon> надо помониторить открытые fd
[17:45:13] <Typhon> есть мнения, что не закрываются
[17:45:20] <Typhon> ab похоже ругадся
[17:47:10] <f[x]> TIME_WAIT'ы просто
[17:52:08] <f[x]> у меня 6k попугаев :)
[17:52:52] <Typhon> и ты не хочешь ещё показывать свой сервер при этом!
[17:54:54] <gds> f[x]: да, TIME_WAIT.  и что с ними делать?
[17:55:28] <f[x]> sudo sysctl -w net.ipv4.tcp_tw_reuse=1
[17:55:47] <f[x]> только после теста лучше обратно вернуть, во избежание
[17:58:19] <gds> а теперь периодически пачками вылетают:
error: socket: read error Connection reset by peer sock.c:460: Connection reset by peer
зато про память теперь всё понятно: не течёт.  siege -b -c 100: virt 121Mb, res 89Mb
ну и чото упало rps до 1.8k.
[18:00:42] <gds> а как бы отпрофайлить теперь?  native code + gprof будет ок.  вопрос из-за оазиса -- там _tags со страшной шапкой, ссыкотно менять.
[18:01:10] <f[x]> res 8M :)
[18:01:29] <Typhon> о, "Under FreeBSD reusing of TIME_WAIT sockets is the default"
[18:01:55] <Typhon> у меня значит в тестах с аб был реюз установлен
[18:01:55] <gds> 8M -- это с lwt?
[18:02:09] <f[x]> ха, bsd твикают под бенчмарки
[18:02:13] <Typhon> gds: всё, что под шапкой можно менять спокойно
[18:02:13] <f[x]> без
[18:02:35] <Typhon> gds: по примеру вставления revised, оно только бэкап создаст при следующем oasis setup
[18:02:42] <f[x]> gds: perf, oprofile, poormansprofiler
[18:02:45] <f[x]> выкинь gprof
[18:03:12] <f[x]> э, если редактировать после OASIS_STOP то бэкап не будет
[18:04:00] <gds> блин, я чото протупил.  сейчас запустил снова с reuse=1, -c100, и как раньше -- res 31m, 3.1krps.  видимо, флешка в браузере жрала ресурсы.  реабилитировано.
[18:04:22] <gds> без lwt -- понимаю, как можно сделать легко 6krps.
[18:04:38] <gds> Typhon: увидел, так и сделаю.
[18:04:39] <Typhon> f[x]: как так? я вот утром проверял — было
[18:05:00] <Typhon> а внутри я и не менял никогда ничо
[18:05:07] <Typhon> внутри OASIS_START/OASIS_STOP
[18:05:09] <f[x]> Typhon: я говорю дефолтные настройки заточены под бенчмарки
[18:05:14] <gds> f[x]: poormansprofiler вроде тут не в тему.  perf/oprofile -- что лучше?
[18:05:23] <f[x]> pmp всегда в тему :)
[18:05:38] <f[x]> perf, если ядро достаточно свежее
[18:05:50] <gds> pmp -- всегда?  ща заценим.
[18:06:00] <f[x]> конечно, это первое что смотрю
[18:06:01] <Typhon> f[x]: я про оазис, не про бсд, а бсд да, затвикано, гг
[18:06:32] <Typhon> "W: File INSTALL.txt has changed, doing a backup in INSTALL.txt.bak" —  дописал после OASIS_STOP ерунду всякую
[18:06:56] <f[x]> вон ocamlbuild профайлил -> http://caml.inria.fr/mantis/view.php?id=4934
[18:07:38] <f[x]> Typhon: у тебя oasis кривой
[18:08:06] <f[x]> все OASIS-посчитанной чексуммы можно менять и он не детектит изменения
[18:08:14] <f[x]> ибо никак не может их задетектить :)
[18:08:24] <f[x]> * вне
[18:08:30] <Typhon> 0.2.1-alpha1
[18:08:44] <f[x]> хм, может в альфе отломали, надо проверить
[18:09:12] <f[x]> gds: а откуда connreset?
[18:09:27] <f[x]> может у тебя ещё какой-то лимит?
[18:09:30] <f[x]> iptables?
[18:10:09] <gds> f[x]: от siege.  iptables не ставил явным образом, типа-десктоп.  может оно и поставило.  а может это lwt подсирает.
[18:10:11] <Typhon> в старом не генерит, кажется (0.2.0) (хотя внутри СТАРТ СТОП я никогда не редактировал, а бэкапы появлялись, на 0.2.0 тоже)
[18:10:35] <f[x]> Typhon: странно
[18:11:26] <f[x]> gds: sudo sysctl -a | grep nf_conntrack
[18:11:28] <Typhon> сейчас машины, где генерились нету под рукой, вечером обязательно проверяю и проверю версии. но там не новее 0.2.0
[18:12:28] <gds> f[x]: grep ничего не выдаёт.
[18:12:55] ftrvxmtrx вышел(а) из комнаты
[18:13:32] ftrvxmtrx вошёл(а) в комнату
[18:13:50] <f[x]> dmesg | tail ?
[18:14:42] <f[x]> тогда strace'ить надо всех участников и дампить трафик
[18:14:59] <f[x]> а tcp_max_syn_backlog
[18:15:00] <f[x]> ?
[18:15:36] <gds> dmesg интересен: http://paste.in.ua/2508/
[18:15:54] <gds> tcp_max_syn_backlog -- где смотреть?
[18:16:02] <gds> (не в sysctl точно)
[18:16:08] <f[x]> в sysctl :)
[18:16:24] <gds> error: "tcp_max_syn_backlog" is an unknown key
[18:16:30] <f[x]> грепни
[18:16:36] <f[x]> net.ipv4. префикс
[18:16:46] <gds> о.  2048.
[18:16:50] <f[x]> если syncookies значит syn_backlog забивается
[18:16:53] <f[x]> у меня тоже
[18:17:29] <f[x]> значит сервер не успевает обрабатывать, видимо, backlog забивается и ядро шлёт куки, а потом RST'ы
[18:17:33] <f[x]> гипотеза ^^
[18:17:53] <gds> да вообще, надо ли геморроиться про это сейчас, если в целом механизм понятен?  (ну, почти -- поставить backlog побольше либо подкрутить tcp_max_syn_backlog.)
[18:18:29] <f[x]> а, кстати да, обычный бэклог какой?
[18:18:33] <f[x]> у меня 100
[18:19:48] <gds> может и 5 стоит, хехе.  В общем, идея понятна.
[18:20:33] <f[x]> ха, точно, поставил 3 - посыпались через время conntimeout'ы
[18:20:57] <gds> во, значит я смогу поставить стопиццот, когда будет подобная проблема.  Ну и про ядро не забуду.
[18:21:37] <f[x]> хм, и это влияет на rps!
[18:21:55] <gds> но как?
[18:21:56] <f[x]> что пожалуй логично
[18:22:06] <f[x]> чем больше backlog тем меньше rps
[18:22:56] <f[x]> о, ещё у меня куки выключены были
[18:23:06] <gds> логики не вижу.  backlog -- штука системная, по идее должна быть имплементирована эффективно.
[18:23:17] <f[x]> точно, с куками сразу connreset
[18:23:20] <f[x]> забавно
[18:23:31] <f[x]> эффективно-то эффективно, но небесплатно
[18:23:40] <f[x]> backlog - это syn без ack'а
[18:23:46] <f[x]> больше инфы надо держать
[18:23:57] <f[x]> в syn_backlog держать проще
[18:24:17] <f[x]> короткий backlog результирует в том что больше соединений висит в syn
[18:24:24] <f[x]> надо по дампу проверить
[18:24:36] <gds> ну хз, имхо должны быть копейки вообще.
[18:24:43] <gds> вот pmp: http://paste.in.ua/2509/
[18:24:52] <f[x]> ну тогда объясняй альтернативно :)
[18:24:54] <gds> во время siege -b -c100 снимал, ясное дело.
[18:25:25] <f[x]> а откуда там левый тред?
[18:25:29] <gds> альтернативное объяснение: "хрен его знает" :)  Может клиент (siege) по-другому работает.
[18:25:51] <f[x]> а размер буфера у lwt какой?
[18:25:55] <gds> левый тред -- строка 2?  без понятия.  и хз почему оно так высоко.
[18:25:59] <gds> где размер буфера смотреть?
[18:26:27] <f[x]> в коде рядом со стабом для write
[18:26:55] <f[x]> зааттачься gdb и info threads - сколько их
[18:28:09] <gds> про буфер -- нашёл let default_buffer_size = ref 4096 в lwt_io.  Сам буфера не выставляю, значит это оно.  Но хттп-ответ у меня строго мелкий, меньше килобайта точно.
[18:29:55] <gds> чем дальше в лес, тем меньше понимаю: http://paste.in.ua/2510/
[18:30:31] <f[x]> бугага, lwt видимо какой-то пул держит
[18:30:51] <gds> то есть, на пустую строку внимания не обращать?
[18:31:06] <f[x]> а хз, то какая-то бага видимо
[18:34:12] <gds> интересно, что показывает третья строка?
1491 pthread_cond_wait@@GLIBC_2.3.2,worker_loop,start_thread,clone,??
при том, что worker_loop'ов немало по коду lwt, а "start_thread" не ищется в lwt вообще.
[18:34:24] <f[x]> start_thread это из glibc
[18:34:32] <Typhon> gds: start_job в lwt_unix.ml
[18:34:52] <gds> то есть, это мы словили ждущие ОС-треды.
[18:34:55] <Typhon> но оно, как я понимаю, для чтения из блокирующих мест
[18:34:56] <gds> невелик улов.
[18:35:20] <Typhon> для асинхронных они врап_сискол пользуют
[18:35:47] <gds> понятно.
[18:35:54] <gds> вот так pmp оказался непоказателен.
[18:37:35] <Typhon> они сразу там штоле пул создают, вне зависимости от того, понадобится ли? или откуда у тебя блокирующее ио взялось?
[18:37:38] <f[x]> у меня совсем другая картина
[18:38:32] <gds> продолжим с профайлерами для богатых.  apt-get install perf не находит его.  из гугла только perf-top какой-то -- это то или не то?  едро относительно новое, 2.6.35-29.
[18:39:01] <f[x]> gds: у тебя не видно работы кода вообще
[18:39:08] <f[x]> точно с debug собирал?
[18:39:17] <gds> f[x]: на 6krps?  если у тебя там native code + os threads, то примерно представляю, какая картина у тебя.
[18:39:32] <gds> f[x]: кстати, может и без debug.  но без profile точно.  ща.
[18:39:53] <f[x]> http://paste.in.ua/2516/
[18:40:03] <f[x]> profile не нужен, debug нужен
[18:40:10] <f[x]> oasis по умолчанию с debug
[18:41:19] <f[x]> у тебя либы могут быть без debug собраны
[18:41:22] <gds> э, так конечно, я обрезал "работу кода".  ниже были килобайты.
[18:41:49] <gds> 119 строк цитировать -- оверквотинг, однако.
[18:41:55] <f[x]> pmp -l 16
[18:42:14] <f[x]> чтобы корни трейсов не мельтешили
[18:42:38] <gds> судя по тому pmp, который у меня, он эту опцию не умеет.
[18:43:23] <f[x]> curl -O aspersa.googlecode.com/svn/trunk/pmp
[18:43:29] <gds> а в дебилиане этот perf вообще есть?
[18:43:52] <f[x]> linux-tools-x.x.x
[18:44:45] <f[x]> http://www.pixelbeat.org/programming/profiling/
[18:48:04] <gds> -l 10 -- http://paste.in.ua/2517/
[18:48:19] <gds> ничего нового.  хз, стоит ли это всё оптимизировать куда-либо.
[18:49:45] <f[x]> ну вот ты 20% теряешь на этом lwt pool'е
[18:49:49] <f[x]> не используя его
[18:51:23] <f[x]> я вообще ничего не оптимизировал, http-сервер ешё ни разу не был затыком :)
[18:51:26] <gds> 20% чего теряю?  оно себе ждёт на блокирующем вызове.
[18:52:17] <f[x]> а, вообще да, ну оверхед есть какой-то, но не 20 конечно
[18:53:58] <Typhon> f[x]: http парсишь рагелем ?
[18:56:24] Typhon вышел(а) из комнаты
[18:57:50] Typhon вошёл(а) в комнату
[18:58:01] <gds> о, perf.data создалось.  в топе -- caml_page_table_lookup, mark_slice, caml_initialize и подобные мусорщиковые.  вывод: если хочется оптимизировать это дело, надо начать с мусорщика, а потом уже профайлить.
[18:59:27] <gds> ну, caml_initialize не мусорщиковая, скорее наоборот, но всё же.
[18:59:36] <f[x]> подозрительно сие
[19:00:07] <gds> а то, что прямая реализация даёт 6к, а у меня 3к, лично для меня вполне объяснимо -- лвт, итераты и манатки таки стоят ресурсов.
[19:02:09] <f[x]> угу
[19:03:54] <f[x]> у меня perf пишет 50% в ядре, а в юзерспейсе основные троглодиты - строковые функции, find/alloc/etc
[19:05:19] <gds> логично.
[19:08:23] Kakadu вышел(а) из комнаты
[19:08:26] <Typhon> gds: надо вот этих сделать %) http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks
[19:08:32] <Typhon> у них тоже, кажется, итераты, манатки
[19:13:44] <f[x]> хоть бы они свою железку описали, что-ли
[19:14:47] geniepro вошёл(а) в комнату
[19:17:43] <Typhon> f[x]: чота нету нигде, ага, теоретически, можно запустить их бенчи на своей тачке, ну и вычислить, сколько твой сервак на их железе бы показал
[19:19:10] <f[x]> ну да, предлагаешь мне х-ь сетапать?
[19:19:29] <Typhon> нет нет, упаси госпади
[19:20:01] <Typhon> тем более, 7го нхц вроде бы нету в репах + для полноты ещё и рельсы с пхп и апачами надо
[19:22:10] <f[x]> в unstable есть уже
[19:27:49] <gds> по-моему, те бенчмарки какие-то странные.  Есть подозрение, что они упорно задрачивали.  Кроме того, цифры большие.
[19:28:28] <Typhon> есс-но задрачивали
[19:28:52] <klapaucius> Конкуррентность там не на манатках
[19:28:56] <Typhon> причём, как обычно, свою затюнили (мусорского и прочее), а чужие на дефолтных настройках
[19:29:23] <Typhon> klapaucius: а кто говорил про конкурентность? %)
[19:30:19] <klapaucius> ну вы же с лвт сравниваете - из контекста следует
[19:30:52] <gds> по ссылке сравнивают "ответы в секунду".
[19:35:18] <klapaucius> Цифры большие, говорите? Вот где цифры большие http://www.yesodweb.com/blog/2011/2/warp-speed-ahead
[19:36:22] <gds> увеличил minor heap -- вместо 3k стало 4.5k.  ну-ну.
[19:45:21] <gds> вопрос на засыпку господам любителям х-я:
$ curl -s -I http://haskell.org | grep ^Server:
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch
Чому?  Доколе?
[19:45:26] <f[x]> аргх, tcmalloc может дедлокаться после форка, к-ц
[19:47:54] ermine думает, в какую конфу смотрит
[19:48:28] <ermine> где тут декларативный, функциональный подход?
[19:49:14] <gds> в snap и yesod, конечно!  где же ещё.
[19:49:15] <f[x]> gds: ну ответ симметричный будет
[19:50:27] <gds> зато
$ curl -s -I http://ocsigen.org | grep -i ^Server:
server: Ocsigen
[19:51:09] <f[x]> ответ опять же симметричный
[19:51:14] geniepro вышел(а) из комнаты
[19:51:31] <f[x]> :)
[19:52:43] <gds> ну ладно.  последний вопрос: нахрена иметь больше, условно, 10krps?
[19:52:49] <klapaucius> Не думаю, что haskell.org будут переписывать на хаскеле. Хаскель как специализированный язык для веб не позиционируют, большинству коммьюнити веб-разработка, я думаю, не интересна, так что это бессмысленное приключение ради приключения. Сайты всяких веб-фреймворков имеет смысл на них самих делать, конечно.
[19:52:53] <ermine> gds: а на камлунити?
[19:54:40] ermine приколотила пароль из файлика к своему бложику, теперь думает что дальше делать
[19:54:42] <zert> а на камле больше нечего писать, только сайты на кислороде
[19:55:09] <klapaucius> 10krps на какой машине?
[19:55:41] <ermine> zert: mldonkey?
[19:55:51] <ftrvxmtrx> llvm!
[19:55:53] <gds> 10krps -- на весьма средней, ориентир -- то, что продавалось 5 лет назад как самое крутое.
[19:57:20] <ermine> а сайты до сих пор пишут лишь на похапэ
[19:57:25] <gds> если брать суперкрутые серваки, всё равно krps будет расти, сервер будет обрабатывать больше запросов, но другие затыки тоже будут расти -- понятно, что веб-сервисы пишутся не для отдачи "хелловорлд".  Там и обращения к диску, и цпу, и пропускная способность памяти, и гигабит забить можно.
[19:57:38] <ermine> всё остальное - факториалы на хаскеле
[20:04:17] <klapaucius> ну  это очевидно, числа такие большие потому, что ничего полезного не делается но это же бенчмарк для сервера в бессмысленном соревновании снапа с есодом, не бенчмарк для диска
[20:06:10] <gds> знаете выражение "зарекалась свинья говна не жрать"?  ну вот, как-то решил не пользоваться бенчмарками для сравнений -- исключительно профайлером для решения реальных задач.
[20:08:29] <zert> технологии вообще не важны
[20:08:41] <gds> чуть-чуть важны.
[20:09:33] <ermine> а какая важность у заказчика?
[20:11:08] <ermine> похоже, тут поминки по камлу в очередной раз устраивают
[20:11:32] <ermine> пора валить на Scheme
[20:14:05] <klapaucius> gds: т.е. вы реализуете n^2 сисем на основе n библиотек, профилируете все это а потом принимаете решение? Серьезный подход. А что еще, кроме оксигена вы профилировали?
[20:14:25] <gds> нет, я так не делаю, это фантазии.
[20:14:49] Kakadu вошёл(а) в комнату
[20:15:47] <klapaucius> gds: т.е. вы производительность вообще никак не сравниваете? Или все-таки как-то сравниваете? И если да - как?
[20:17:20] <ermine> визуально и психологически
[20:19:07] <gds> производительности я добиваюсь двумя подходами: 1. выбором приличной технологии, про которую известно, что она "не тормозит".  Тут можно посмотреть на программы, реализованные с её помощью, но бенчмарком это назвать сложно.  Вместе с выбором технологии осуществляю выбор алгоритма, тут бенчмарки мало нужны, так как про многие алгоритмы ясно либо математически, либо интуитивно.  2. после выбора технологии и реализации я смотрю на производительность -- смесь производительности железа, компилятора, библиотек, моих алгоритмов и кода.  Обычно оптимизировать приходится немного.
[20:20:50] Digimmortal вышел(а) из комнаты
[20:25:18] <klapaucius> gds: бенчмарками это вам сложно назвать потому, что это войдет в противоречие с вашими, написанными выше, словами. Другие сложности не просматриваются.
[20:27:02] <ermine> ох щи
[20:28:29] <gds> лично для меня бенчмарком является исследование какой-либо относительно конкретной величины -- rps, время на вычисления, использование памяти и так далее.  мне же интересно чуть другое, не цифры, а "чтобы не тормозило".  оцениваю не на основании цифр обычно, так как всё равно потом профайлить.
[20:29:08] ftrvxmtrx вышел(а) из комнаты
[20:34:40] <klapaucius> Так бенчмарки и стараются, бывает, сделать так чтоб они измеряли какую-то одну величину (хотя это технически сложно, если не невозможно) чтоб из нескольких бенчмарков составить "базис" для оценки производительности. Можно конечно оценивать производительность по как можно близкому аналогу, но это не всегда возможно. Но и это бенчмарк. Если мы берем какую-то программу, измеряем производительность - это бенчмарк.
[20:36:55] <klapaucius> Я, конечно, не хочу сказать, что числа выше - это действительно полезные данные, особенно в отрыве от других оценок. Я, собственно, запостил ссылку в качестве курьеза.
[20:41:28] <gds> вот.  вопрос в специализации.  я -- против таких специализированных бенчмарков (а, тем более, микробенчмарков).  понятно, что этим можно что-то измерить, но вот это "что-то" периодически бывает неактуальным в реальной программе, в которой не раскладывают всё на базисы, а имеют всё в сумме.  например, если я бы смотрел, как искать строки в лог-файлах, я бы взял не отдельно dd if=infile of=/dev/null плюс отдельно хрень, ищущую строку среди уже имеющегося в памяти списка строк, так как не учёл бы и потоковый характер программы, мало проявляющийся в dd (там -- блок прочитали и блок записали), и работу мусорщика или других алгоритмов, требуемую для ограничения количества съедаемой памяти, и регекспы вероятно показали бы мне не то, если бы я матчил целиком строку, разделённую по '\n', а не каждую строку отдельно-построчно (так как не учёл бы ресурсы на инициализацию каждого конкретного матчинга).  Даже в такой простой задаче куча мелочей, не измеряемых по отдельности тестами на скорость чтения и на скорость матча регекспом.
[20:55:15] <gds> или ещё пример, где не нужны бенчмарки: допустим, смотрим тот же grep.  допустим, профайлер показывает, что затык -- на построчном чтении.  сразу делаем вывод: читать по большим кускам, а не через fgets() (или как там).  читаем блочно, имеем затык на цпу в либе регекспов -- пробуем другую либу, или пробуем матчить не по одной строке, а по всем строкам буфера.  и так далее, пока заказчик не скажет "производительность ок!", если вопрос вообще поднимался.
[20:59:33] Typhon вышел(а) из комнаты
[22:01:52] ftrvxmtrx вошёл(а) в комнату
[22:51:37] ygrek вошёл(а) в комнату
[23:20:40] Typhon вошёл(а) в комнату
[23:33:03] <Typhon> """As you may have guessed it, it's an attempt to give an OCaml syntax to ATS code, and making it look by default like OCaml code with Hindley-Milner while capitalising on ATS possibilities by explicit additional annotations. Also looking at Agda-like notations for dependent types for inspiration.""" -- автор про acaml
[23:34:45] gds вышел(а) из комнаты
[23:34:55] gds вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!