LINUX.ORG.RU

Инструментарий от Google


0

0

Google разместила исходные коды 4 инструментов: gflags, perftools, sparsehash и ctemplate на Google Code.

gflags: модуль на С++ для опций/флагов, задаваемых в командной строке. Появилась как замена для getopt(), как более простая и мощная альтернатива. Имеются реализации на C++ и Python.
Документация: http://google-gflags.googlecode.com/s...

perftools: быстрая и мультипоточная реализация malloc() и набор инструментов для анализа производительности. По словам разработчиков, это самый быстрый malloc(), который они когда-либо видели. Помимо реализации malloc(), perftools также содержит Heap Checker, Heap Profiler, и CPU Profiler.
http://code.google.com/p/google-perft...

sparsehash: крайне эффективная (в плане потребления памяти) реализация hash_map, включает несколько реализаций hash_map.
http://google-sparsehash.googlecode.c...

ctemplate: простой, но мощный язык шаблонов для С++.
http://google-ctemplate.googlecode.co...

>>> Подробности

★★★★★

Проверено: Pi ()

Круто, пошёл смотреть...=)

pento ★★★★★
()
Ответ на: комментарий от eveel

Для того, чтобы использовать гугловский malloc() в своих прогах, достаточно слинковать программу с библиотекой tcmalloc. На своих программах пока всё это дело не проверял, но make check выдал следующее:

eveel ★★
()
Ответ на: комментарий от eveel

$ sudo make check
make  heap-profiler_unittest_sh heap_checker_unittest_sh heap-checker-death_unittest profiler_unittest_sh pprof_unittest
make[1]: Entering directory `/usr/src/google-perftools-0.8'
./src/tests/heap-profiler_unittest.sh . ./src
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0001.heap (0 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0002.heap (0 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0003.heap (0 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0004.heap (0 MB in use)
...
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0758.heap (37 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0759.heap (37 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0760.heap (38 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test_13849.0001.heap (0 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test_13849.0002.heap (0 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test_13849.0003.heap (0 MB in use)
...
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test_13849.0760.heap (38 MB in use)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test_13849.0761.heap (Exiting)
HeapProfiler: Dumping heap profile to /tmp/heap_profile_info/test.0761.heap (Exiting)

>>> Test failed for Allocate: didn't use 90% of cpu


>>> Test failed for Allocate: didn't use 90% of cpu

Tests finished with 2 failures
make[1]: *** [heap-profiler_unittest_sh] Ошибка 2
make[1]: Leaving directory `/usr/src/google-perftools-0.8'
make: *** [check-am] Ошибка 2

eveel ★★
()

Что вообще значит открыла я вообще google-perfrools уже как год пользуюсь их никто и не закрывал вроде.

to аффтор : внимательнее пишите новости

anonymous
()
Ответ на: комментарий от Alan_Steel

>Имхо самое важное забыли упомянуть в новости. Под какой лицензией код?

BSD (New BSD License)

dotcoder ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>Что вообще значит открыла я вообще google-perfrools уже как год пользуюсь их никто и не закрывал вроде.

>to аффтор : внимательнее пишите новости

Да, моя ошибка: скоро должны поменять текст новости.

dotcoder ★★★★★
() автор топика

--- cut ---
using std::string;

class FlagValue {
 public:
  FlagValue(void* valbuf, const char* type);
  ~FlagValue();

  bool ParseFrom(const char* spec);
  string ToString() const;
--- cut ---

мнда... действительно, осчастливили общество, спору нет... :-/

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от Relan

> Как там насчет фрагментации кучи у этого гугловского аллокатора?

Если всё хорошо, тока к ФФ не помешало бы прикрутить ;-)

Bohtvaroh ★★★★
()

Про sparsehash -гармошка, уже давно открыты

pustota1
()
Ответ на: комментарий от Relan

>Как там насчет фрагментации кучи у этого гугловского аллокатора?

бугога! могу сказать на 100% что он НЕ ФРАГМЕНТИРУЕТ ни память ни адресное пространство. тому кто фрагментирует может помочь только сало в башке или дефрагментатор хипа если отсутствует первого.

aydef
()

Расскажите, что я делаю неправильно:
pell@<hostname>:~/tmp> svn export http://google-gflags.googlecode.com/svn/trunk
svn: REPORT request failed on '/svn/!svn/vcc/default'
svn: REPORT of '/svn/!svn/vcc/default': 400 Bad Request (http://google-gflags.googlecode.com)
pell@<hostname>:~/tmp> svn export svn://google-gflags.googlecode.com/svn/trunk
svn: Can't connect to host 'google-gflags.googlecode.com': Время ожидания соединения истекло

pell
()

ктонибудь tcmalloc на ембеде пробовал?

anonymous
()
Ответ на: комментарий от Bohtvaroh

>Если всё хорошо, тока к ФФ не помешало бы прикрутить ;-)

работает: LD_PRELOAD='/usr/local/lib/libtcmalloc.so:/lib/libpthread.so.0' firefox

pmap: .... b7e9b000 124K r-x-- /usr/local/lib/libtcmalloc.so.0.0.0 b7eba000 4K rw--- /usr/local/lib/libtcmalloc.so.0.0.0 ....

anonymous
()

Over the past two years, Google has released several infrastructure tools as open source software.

Today we're pleased to host them on Google Code project hosting.

anonymous
()
Ответ на: комментарий от shahid

>malloc() многопоточный

glibc'шный? Его free() работает с глобальным локом, так что это хотя и многопоточный вариант, но далеко не самый оптимальный.

>shahid (*) (27.03.2007 15:25:58)

rtc ★★
()
Ответ на: комментарий от anonymous

>работает: LD_PRELOAD='/usr/local/lib/libtcmalloc.so:/lib/libpthread.so.0' firefox

>А жрет меньше?

С этим экспериментировать ломает, а вот память, после закрытия табов, похоже не освобождает. Или я что то не так делаю.

anonymous
()
Ответ на: комментарий от anonymous

> С этим экспериментировать ломает, а вот память, после закрытия табов, похоже не освобождает. Или я что то не так делаю.

у меня тоже не освобождает. Хотя сам firefox вроде побыстрее с этим аллокатором работает. Но все равно, раз в неделю firefox закрывается и открывается вновь, как и прежде.

anonymous-III
()
Ответ на: комментарий от anonymous-III

>у меня тоже не освобождает. Хотя сам firefox вроде побыстрее с этим аллокатором работает. Но все равно, раз в неделю firefox закрывается и открывается вновь, как и прежде.

вот с этим у меня действительно быстрее работает: http://www.hoard.org/, заметно невооруженным взглядом.

anonymous
()
Ответ на: комментарий от anonymous

> вот с этим у меня действительно быстрее работает: http://www.hoard.org/, заметно невооруженным взглядом.

Видимо у меня совсем плохое зрение, но ускорения я не заметил:

# pmap 8515 | grep hoard
b7e95000 80K r-x-- /home/andrey/00000000/Programming/Libs/libhoard.so
b7ea9000 4K rw--- /home/andrey/00000000/Programming/Libs/libhoard.so

andreyu ★★★★★
()
Ответ на: комментарий от pell

> pell@<hostname>:~/tmp> svn export > http://google-gflags.googlecode.com/svn/trunk

> svn: REPORT request failed on '/svn/!svn/vcc/default'

Столкнулся с той же проблемой. Оказалось, причина в squid`е. Он не понимает WebDav запросы и не пропускает их.

Теперь надо думать, каким бы образом оставить работать принудительное проксирование, при этом пропустив WebDav запросы...

RoGer
()
Ответ на: комментарий от anonymous

> С этим экспериментировать ломает, а вот память, после закрытия табов, похоже не освобождает.

И не должен освобождать, в общем случае.

Firefox и mozilla работают с tcmalloc заметно быстрее, чем c ptmalloc (glibc) и openbsd-malloc. По скорости выпадения меню особенно заметно. У меня старая машина, поэтому разница заметна невооруженным глазом.

anonymous
()

Кажется, что Firefox и Thunderbird стали работать шустрее...

eveel ★★
()
Ответ на: комментарий от eXtractor

> Когда уже исходники поисковика-то выложат? :)

Заходишь оперой на www.google.com, жмёшь правой кнопкой мыши по пустому месту, и выбираешь: Source (Ctrl+F3).

Вуаля, вот тебе и исходники =)

eveel ★★
()
Ответ на: комментарий от RoGer

> Столкнулся с той же проблемой. Оказалось, причина в squid`е. Он не понимает WebDav запросы и не пропускает их.

Извиняюсь за неверную информацию. Работает он и прекрасно все пропускает: http://subversion.tigris.org/faq.html#proxy

Так что вечером надо будет опробовать это.

RoGer
()
Ответ на: комментарий от RoGer

Читал, ничего не понял. Пошел читать svnbook, вдруг пойму:)

P.S. Я правильно понимаю, что без переконфигурации proxy (через который я хожу) все равно svn может не заработать?

pell
()
Ответ на: комментарий от anonymous

>>Если всё хорошо, тока к ФФ не помешало бы прикрутить ;-)

>работает: >LD_PRELOAD='/usr/local/lib/libtcmalloc.so:/lib/libpthread.so.0' firefox

Вахъ! Реально быстрее =)

Bohtvaroh ★★★★
()

c++.... фуууу.... я лучше питон возьму....

DemonZLa
()
Ответ на: комментарий от rtc

>>malloc() многопоточный

>glibc'шный?

Я имел в виду гугловский, просто наверное не точно выразился. Хотел просто узнать, хорошо это или плохо. И как это сказывается на юнипроцессорных архитектурах?

shahid ★★★★★
()
Ответ на: комментарий от Bohtvaroh

> Вахъ! Реально быстрее =)

Кучи не сокращает, однако.

anonymous
()
Ответ на: комментарий от shahid

>Я имел в виду гугловский, просто наверное не точно выразился. Хотел просто узнать, хорошо это или плохо. И как это сказывается на юнипроцессорных архитектурах?

Google утверждает, что у них даже с одним потоком скорость malloc() в 2 раза выше при выделении памяти в районе 1 кб. Используют продвинутое кэширование в отличии от glibc malloc().

Но при малом объем оперативной памяти производительность должна быть хуже, т.к. google malloc() не возвращает закешированную память в систему, а следовательно система будет сильнее свопиться.

rtc ★★
()
Ответ на: комментарий от anonymous

> а попробуй svn через https гонять, мне помогало.

Помогло бы, но не в данном случае. Анонимный доступ открыт по http, а https для разработчиков и требуется авторизация.

RoGer
()

О ctemplate

Некоторое время назад писал (вместе с коллегой) аналогичную систему. Отличия носят идеологический характер:

+ Автогенерация C++ кода (заместо шаблонов) + Каждый такой шаблон в в runtime`e становится классом. У него есть set-теры для каждого поля. + Ошибки проверяются в процессе компиляции(!) + Было прикручено к VC7, выдавало список ошибок в его Output. Можно было кликать на ошибку и оказываться в файле ресурса в строке с ошибкой :-)

А. Яковлев

anonymous
()
Ответ на: комментарий от rtc

Затестил под ARM Mozilla работает также, не быстрее не медленнее... ;(

romaxa
()
Ответ на: комментарий от RoGer

На прозрачной сквиде помогло следующее:

extension_methods REPORT MERGE MKACTIVITY CHECKOUT PROPFIND

Bohtvaroh ★★★★
()

На первый взгляд, ничего особенного...

MiracleMan ★★★★★
()

А можно пересобрать всю систему с этим tcmalloc? =)

NeoNMaN
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.