catap.ru_blog_atom.xml - sfeed_tests - sfeed tests and RSS and Atom files
 (HTM) git clone git://git.codemadness.org/sfeed_tests
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       catap.ru_blog_atom.xml (10526B)
       ---
            1 <?xml version="1.0" encoding="utf-8"?>
            2 <feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>http://catap.ru/blog/</id><title>catap's blog</title><updated>2013-12-29T22:15:54Z</updated><link href="http://catap.ru/blog/" rel="alternate"></link><link href="http://catap.ru/feeds/atom/blog/" rel="self"></link><author><name>Kirill A. Korinskiy</name></author><generator version="r33" uri="http://code.google.com/p/django-atompub/">django-atompub</generator><entry><id>http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/</id><title type="html">Сортированные значения для reducer </title><updated>2013-12-29T22:15:54Z</updated><published>2013-11-27T15:36:52Z</published><category term="hadoop"></category><category term="map reduce"></category><category term="tech"></category><link href="http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/" rel="self"></link><link href="http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/" rel="alternate"></link><content type="html">&lt;p&gt;Коллеги,&lt;/p&gt;
            3 
            4 &lt;p&gt;Есть хитрость, которая позволяет упростить логику reducer если подавать ему сразу отсортированные значения. Код который это делает: &lt;a href="https://gist.github.com/catap/3aabd33b86c0fc5620aa"&gt;https://gist.github.com/catap/3aabd33b86c0fc5620aa&lt;/a&gt;&lt;/p&gt;
            5 
            6 &lt;!--more--&gt;
            7 
            8 &lt;p&gt;Немного footnote по&amp;nbsp;коду.&lt;/p&gt;
            9 
           10 &lt;p&gt;В &lt;a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapred/MapTask.java#L1116"&gt;Comparator&lt;/a&gt;/&lt;a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/ReduceContext.java#L121"&gt;Grouping&lt;/a&gt; внятным образом получить доступ к value нельзя, приходиться делать составной ключ, который будет включать в&amp;nbsp;себя:&lt;/p&gt;
           11 
           12 &lt;ul&gt;
           13 &lt;li&gt;ключ по которому будут&amp;nbsp;группировать.&lt;/li&gt;
           14 &lt;li&gt;значения, или их часть, которые будут использоваться для&amp;nbsp;сортировки.&lt;/li&gt;
           15 &lt;/ul&gt;
           16 
           17 &lt;p&gt;Соотвествено:&lt;/p&gt;
           18 
           19 &lt;ul&gt;
           20 &lt;li&gt;Grouping сравниваются&amp;nbsp;ключи.&lt;/li&gt;
           21 &lt;li&gt;Comparator сравниваются ключи и если они совпали, идет логика&amp;nbsp;сортировки.&lt;/li&gt;
           22 &lt;/ul&gt;
           23 
           24 &lt;p&gt;Вроде все прекрасно и все танцуют, но, в hadoop по умолчанию Partitioner использует &lt;a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/lib/partition/HashPartitioner.java#L29"&gt;hashCode&lt;/a&gt; для балансировки ключей по partition. Соответственно, либо реализуем свой hashCode, либо свой Partitioner, иначе будет интересная отладка&amp;nbsp;:)&lt;/p&gt;
           25 </content></entry><entry><id>http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/</id><title type="html">over 1M open sockets at linux node</title><updated>2011-12-19T03:17:18Z</updated><published>2011-12-19T02:42:33Z</published><category term="limits"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/" rel="self"></link><link href="http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/" rel="alternate"></link><content type="html">&lt;p&gt;С появлением всяких &lt;a href="http://en.wikipedia.org/wiki/Comet_(programming%29"&gt;commet&lt;/a&gt; соединений обычным делом стали сотни тысяч соединений на одном&amp;nbsp;тазике.&lt;/p&gt;
           26 
           27 &lt;!--more--&gt;
           28 
           29 &lt;p&gt;Но иногда хочется большего. Хочется перешагнуть за миллион. И так, шпаргалка по настройки системы для 10и миллионов&amp;nbsp;соединений:&lt;/p&gt;
           30 
           31 &lt;ul&gt;
           32 &lt;li&gt;&lt;p&gt;&lt;strong&gt;/etc/security/limits.conf&lt;/strong&gt;:&lt;/p&gt;
           33 
           34 &lt;p&gt;services       soft    nofile&amp;nbsp;10000000&lt;/p&gt;
           35 
           36 &lt;p&gt;services       hard    nofile&amp;nbsp;10000000&lt;/p&gt;&lt;/li&gt;
           37 &lt;li&gt;&lt;p&gt;&lt;strong&gt;/etc/sysctl.conf&lt;/strong&gt;:&lt;/p&gt;
           38 
           39 &lt;p&gt;net.core.somaxconn =&amp;nbsp;100000&lt;/p&gt;
           40 
           41 &lt;p&gt;net.nf_conntrack_max =&amp;nbsp;268435456 &lt;/p&gt;
           42 
           43 &lt;p&gt;net.core.rmem_max =&amp;nbsp;65536&lt;/p&gt;
           44 
           45 &lt;p&gt;net.core.wmem_max =&amp;nbsp;65536&lt;/p&gt;
           46 
           47 &lt;p&gt;net.ipv4.tcp_wmem = 4096 16384&amp;nbsp;65536  &lt;/p&gt;
           48 
           49 &lt;p&gt;net.ipv4.tcp_rmem = 4096 16384&amp;nbsp;65536  &lt;/p&gt;
           50 
           51 &lt;p&gt;fs.nr_open =&amp;nbsp;10485760&lt;/p&gt;&lt;/li&gt;
           52 &lt;/ul&gt;
           53 
           54 &lt;p&gt;Да, на сервере должно быть много памяти&amp;nbsp;:)&lt;/p&gt;
           55 </content></entry><entry><id>http://catap.ru/blog/2011/06/15/linux-time-interval/</id><title type="html">временной интервал в linux</title><updated>2011-06-15T00:20:29Z</updated><published>2011-06-15T00:13:02Z</published><category term="clock_gettime"></category><category term="clock_monotonic"></category><category term="clock_monotonic_raw"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/06/15/linux-time-interval/" rel="self"></link><link href="http://catap.ru/blog/2011/06/15/linux-time-interval/" rel="alternate"></link><content type="html">&lt;p&gt;Задали вопрос: как понять, сколько прошло времени в&amp;nbsp;linux?&lt;/p&gt;
           56 
           57 &lt;!--more--&gt;
           58 
           59 &lt;p&gt;Первый ответ, который приходит на ум это&amp;nbsp;взять:&lt;/p&gt;
           60 
           61 &lt;pre&gt;&lt;code&gt;gettimeofday(&amp;amp;time1, NULL)
           62 sleep(5);
           63 gettimeofday(&amp;amp;time2, NULL)
           64 &lt;/code&gt;&lt;/pre&gt;
           65 
           66 &lt;p&gt;и вычесть time1 из time2. Плох этот вариант тем, что время будет не предсказуемое ибо оно может смениться в следствии ntpdate, которая резко переводит время. Есть еще ntpd, который просто корректирует длину&amp;nbsp;секунды.&lt;/p&gt;
           67 
           68 &lt;p&gt;Второй вариант&amp;nbsp;это:&lt;/p&gt;
           69 
           70 &lt;pre&gt;&lt;code&gt;clock_gettime(CLOCK_MONOTONIC, &amp;amp;time1);
           71 sleep(5);
           72 clock_gettime(CLOCK_MONOTONIC, &amp;amp;time2);
           73 &lt;/code&gt;&lt;/pre&gt;
           74 
           75 &lt;p&gt;лучше. ntpdate уже не страшен, время привязано к uptime, но от ntpd не спасет. Опять же, на точность влияет &lt;a href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/"&gt;kernel.vsyscall64&lt;/a&gt;.&lt;/p&gt;
           76 
           77 &lt;p&gt;И самый верный вариант (но доступный с ядер 2.6.28)&amp;nbsp;это:&lt;/p&gt;
           78 
           79 &lt;pre&gt;&lt;code&gt;clock_gettime(CLOCK_MONOTONIC_RAW, &amp;amp;time1);
           80 sleep(5);
           81 clock_gettime(CLOCK_MONOTONIC_RAW, &amp;amp;time2);
           82 &lt;/code&gt;&lt;/pre&gt;
           83 </content></entry><entry><id>http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/</id><title type="html">gettimeofday без syscall</title><updated>2011-05-22T03:12:39Z</updated><published>2011-05-22T02:16:00Z</published><category term="gettimeofday"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/" rel="self"></link><link href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/" rel="alternate"></link><content type="html">&lt;p&gt;Тут случайно узнал что gettimeofday может не стоить syscall.&amp;nbsp;Делюсь.&lt;/p&gt;
           84 
           85 &lt;!--more--&gt;
           86 
           87 &lt;p&gt;На amd64 есть системная ручка &lt;code&gt;/proc/sys/kernel/vsyscall64&lt;/code&gt;, она может принимать три&amp;nbsp;значения:&lt;/p&gt;
           88 
           89 &lt;ul&gt;
           90 &lt;li&gt;0 &amp;#8212; делаем syscall и получаем с точностью до&amp;nbsp;μs;&lt;/li&gt;
           91 &lt;li&gt;1 &amp;#8212; по прежнему получаем μs, но где-то рядом, зато без context switch и прочих syscall&amp;nbsp;особенностей;&lt;/li&gt;
           92 &lt;li&gt;2 &amp;#8212; временные интервалы уже в ms, накладные расходов почти&amp;nbsp;нет.&lt;/li&gt;
           93 &lt;/ul&gt;
           94 </content></entry><entry><id>http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/</id><title type="html">flash64: memcpy patch for 10.3.162.29</title><updated>2010-12-10T16:14:09Z</updated><published>2010-12-10T16:07:29Z</published><category term="linux"></category><category term="patch"></category><category term="tech"></category><link href="http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/" rel="self"></link><link href="http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/" rel="alternate"></link><content type="html">&lt;p&gt;Мой &lt;a href="http://catap.ru/blog/2010/11/26/flash-memcpy-patch/"&gt;патчик&lt;/a&gt; пользуется популярность. И люди попросили сделать для новой версии. &lt;a href="http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff"&gt;Патч на версию 10.3.162.29&lt;/a&gt;. Накладывать используя&amp;nbsp;bspatch.&lt;/p&gt;
           95 
           96 &lt;!--more--&gt;
           97 
           98 &lt;p&gt;Например&amp;nbsp;так:&lt;/p&gt;
           99 
          100 &lt;pre&gt;&lt;code&gt;wget http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff
          101 sudo cp /usr/lib64/flash-plugin/libflashplayer.so /usr/lib64/flash-plugin/libflashplayer.so.old
          102 sudo bspatch /usr/lib64/flash-plugin/libflashplayer.so.old /usr/lib64/flash-plugin/libflashplayer.so ./memcpy-10.3.162.29.bsdiff
          103 &lt;/code&gt;&lt;/pre&gt;
          104 
          105 &lt;p&gt;рестарт браузера и можно радоваться&amp;nbsp;жизни.&lt;/p&gt;
          106