Re: почему ядро не сбрасывает кэш?

2015-12-09 Пенетрантность Max Dmitrichenko
2 декабря 2015 г., 15:47 пользователь Aleksandr Sytar
 написал:
>
> Все несколько сложнее чем кажется на первый взгляд, но сообщения о нехватке
> памяти может быть получено когда память есть, но не та которая нужна
> приложению - в данном случае java попросила 1 страницу 8к, и их не
> оказалось, а вот страниц 4к, 16к и т.д. вполне могло быть в достатке.

Это какие новости операционно-системо-строения. С какого это рожна
приложению не всё равно какая там память? Приложение оперирует
виртуальными адресами и две соседние по виртуальным адресам страницы
памяти могут лежат в противоположных уголках физической. И ничего
приложение про это не узнает. Поэтому если у ядра есть две странички
по 4К, выделить их приложению и промапить их на подрядидущие адреса не
составляет никакого труда. Если подходящий свободный диапазон
виртуальных адресов есть в пространстве процесса.

Кроме того, не знаю о какой архитектуре идет речь, но на x86 все
страницы, кроме huge, 4k. Поэтому не понятно, о каких страницах по 16К
вы тут пишите.

-- 
With best regards
  Max Dmitrichenko


Re: почему ядро не сбрасывает кэш?

2015-12-09 Пенетрантность Hleb Valoshka
On 12/9/15, Max Dmitrichenko  wrote:

>> Все несколько сложнее чем кажется на первый взгляд, но сообщения о
>> нехватке
>> памяти может быть получено когда память есть, но не та которая нужна
>> приложению - в данном случае java попросила 1 страницу 8к, и их не
>> оказалось, а вот страниц 4к, 16к и т.д. вполне могло быть в достатке.
>
> Это какие новости операционно-системо-строения. С какого это рожна
> приложению не всё равно какая там память? Приложение оперирует
> виртуальными адресами и две соседние по виртуальным адресам страницы
> памяти могут лежат в противоположных уголках физической. И ничего
> приложение про это не узнает. Поэтому если у ядра есть две странички
> по 4К, выделить их приложению и промапить их на подрядидущие адреса не
> составляет никакого труда. Если подходящий свободный диапазон
> виртуальных адресов есть в пространстве процесса.
>
> Кроме того, не знаю о какой архитектуре идет речь, но на x86 все
> страницы, кроме huge, 4k. Поэтому не понятно, о каких страницах по 16К
> вы тут пишите.

О buddy-аллокаторе разговор, у него разные страницы, видимо, не совсем
правильно называть их страницами.


Re: почему ядро не сбрасывает кэш?

2015-12-04 Пенетрантность Hleb Valoshka
On 12/3/15, Oleksandr Gavenko  wrote:
...
> Итого везде приводится один и тот же рецепт:
>
>   vm.min_free_kbytes = 65536

$sysctl  vm.min_free_kbytes
vm.min_free_kbytes = 512000

Так что, теоретически, свободной памяти навалом :)

>
> иногда упоминается vm.zone_reclaim_mode.

Вот с этим надо будет поиграться.


Re: почему ядро не сбрасывает кэш?

2015-12-03 Пенетрантность Oleksandr Gavenko
On 2015-12-02, Hleb Valoshka wrote:

> Вы вопрос-то прочитали?

Между строк )) По последующей дискусии вьехал.

По:

  http://serverfault.com/search?q=page+allocation+failure

есть несколько интересных обсуждений:

  
http://serverfault.com/questions/645831/server-overloaded-acts-like-out-of-memory-but-thats-not-true

Theres a lot of free memory, but these zones are totally fragmented

Посмотреть можно по cat /proc/buddyinfo.

  
http://serverfault.com/questions/236170/page-allocation-failure-am-i-running-out-of-memory

[why to "sysctl -w vm.min_free_kbytes=65536"]

Swap-less machines, where you don’t want incoming network traffic to
overwhelm the kernel and force an OOM before it has time to flush any
buffers.

x86 machines, for the same reason: the x86 architecture only allows DMA
transfers below approximately 900MB of RAM. So you can end up with the
bizarre situation of an OOM error with tons of RAM free.

По

  https://www.google.com.ua/search?q=swapper+mode+0x20

есть:

  https://access.redhat.com/solutions/90883

   * Increase vm.min_free_kbytes value, for example to a higher value than a 
single allocation request.
   * Change vm.zone_reclaim_mode to 1 if it's set to zero, so the system can 
reclaim back memory from cached memory.

  https://bugzilla.kernel.org/show_bug.cgi?id=12135

[SKIP]while transferring a 54GB backup (single file) through a 1Gbps 
link[/SKIP]

the network is allocating memory faster than the VM system is reclaiming it.
Everything should recover and run to completion.

You should be able to make the warning go away by increasing
/proc/sys/vm/min_free_kbytes.

  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666021

There is a common problem that network hardware may require multi-page
buffers, which we can't allocate (without swapping, which is not
possible in the network stack) if memory is nearly full and fragmented.
This case is similar but slightly different: the multi-page allocation
is for a new socket for a TCP connection.

Итого везде приводится один и тот же рецепт:

  vm.min_free_kbytes = 65536

иногда упоминается vm.zone_reclaim_mode.

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

-- 
Best regards!



Re: почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Hleb Valoshka
On 12/2/15, Aleksandr Sytar <sytar.a...@gmail.com> wrote:
>> А вот сегодня мне пришлось вручную сбрасывать кэш, занимавший около
>> 60% всего объёма ОЗУ, пока этого не сделал, была загрузка процессора
>> ядром под 90% и в логи валились сообщения типа "[6848409.216723] java:
>> page allocation failure. order:1, mode:0x20
>> [6848409.216929] Pid: 17814, comm: java".
>>
>> Там ещё прозрачные huge pages включены, но это, думаю, не столь важно.
>>
>> Вопрос, почему ядро не сбрасывает кэш?
>>
>
> Все несколько сложнее чем кажется на первый взгляд, но сообщения о нехватке
> памяти может быть получено когда память есть, но не та которая нужна
> приложению - в данном случае java попросила 1 страницу 8к, и их не

Это вы к примеру сказали, или из сообщения определили (order:1, mode:0x20)?

> оказалось, а вот страниц 4к, 16к и т.д. вполне могло быть в достатке.

И при этом 250 ГБ заняты под кэш, почему бы не почистить его?


Re: почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Aleksandr Sytar
2 декабря 2015 г., 17:33 пользователь Hleb Valoshka <375...@gmail.com>
написал:

> On 12/2/15, Aleksandr Sytar <sytar.a...@gmail.com> wrote:
> >> А вот сегодня мне пришлось вручную сбрасывать кэш, занимавший около
> >> 60% всего объёма ОЗУ, пока этого не сделал, была загрузка процессора
> >> ядром под 90% и в логи валились сообщения типа "[6848409.216723] java:
> >> page allocation failure. order:1, mode:0x20
> >> [6848409.216929] Pid: 17814, comm: java".
> >>
> >> Там ещё прозрачные huge pages включены, но это, думаю, не столь важно.
> >>
> >> Вопрос, почему ядро не сбрасывает кэш?
> >>
> >
> > Все несколько сложнее чем кажется на первый взгляд, но сообщения о
> нехватке
> > памяти может быть получено когда память есть, но не та которая нужна
> > приложению - в данном случае java попросила 1 страницу 8к, и их не
>
> Это вы к примеру сказали, или из сообщения определили (order:1, mode:0x20)?
>

(2^order)*page_size - количество нехвативших страниц


> > оказалось, а вот страниц 4к, 16к и т.д. вполне могло быть в достатке.
>
> И при этом 250 ГБ заняты под кэш, почему бы не почистить его?
>

Почистить можно то что свободно, то что занято можно выдавить в свап, но не
сразу, а только через dirty_background_ratio и подобным ручкам.

Но при этом нужно понимать - если система будет перекладывать страницы в
свап, она будет дольше из него доставать (поищи страницы в памяти, получи
ошибку, что она в свапе, загрузи в память, отдай приложению), что скажется
на скорости работы. Поэтому разумнее ограничить аппетиты нового приложения
с учетом текущих реалий по кешу.


Re: почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Oleksandr Gavenko
On 2015-12-02, Hleb Valoshka wrote:

> Вопрос, почему ядро не сбрасывает кэш?

Известная страница:

  http://www.linuxatemyram.com/

Кроме юмора есть детали: http://www.linuxatemyram.com/play.html

-- 
Best regards!



Re: почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Hleb Valoshka
On 12/2/15, Oleksandr Gavenko <gaven...@gmail.com> wrote:
>> Вопрос, почему ядро не сбрасывает кэш?
>
> Известная страница:
>
>   http://www.linuxatemyram.com/
>
> Кроме юмора есть детали: http://www.linuxatemyram.com/play.html


Вы вопрос-то прочитали?


Re: почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Hleb Valoshka
On 12/2/15, Aleksandr Sytar  wrote:

>> Это вы к примеру сказали, или из сообщения определили (order:1,
>> mode:0x20)?
> (2^order)*page_size - количество нехвативших страниц

В логах 71 запись, из них 39 принадлежат процессц swapper, pid 0, 1 -
kswapd0, ещё 26 яве, остальное прочим, и всем не хватало 1-ого буфера
в 8 кб. И это на машине с 512 ГБ ОЗУ и 2 ГБ свопа.

>> И при этом 250 ГБ заняты под кэш, почему бы не почистить его?
> Почистить можно то что свободно, то что занято можно выдавить в свап, но не
> сразу, а только через dirty_background_ratio и подобным ручкам.

Это тянулось явно побольше 10 сек (dirty_background_ratio), при этом,
после чистки руками, кэш до 200 ГБ около часа, т.е. кандидатов на
выбросить оттуда было более чем достаточно.


> Но при этом нужно понимать - если система будет перекладывать страницы в
> свап, она будет дольше из него доставать (поищи страницы в памяти, получи
> ошибку, что она в свапе, загрузи в память, отдай приложению), что скажется
> на скорости работы. Поэтому разумнее ограничить аппетиты нового приложения
> с учетом текущих реалий по кешу.

Приложение уже ограничено по памяти, т.к. ява.

Учитывая соседнюю тему, где сброс кэша помогает ускорить apt-get,
несмотря на наличие 12 ГБ свободной памяти, есть подозрение, что в
Линуксе работа с памятью поломана.


почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Hleb Valoshka
Классическая ситуация: поставил кто-то себе GNU/Linux, узнал о
существовании комманды free и пишет в рассылки/форумы/irc: "а куда
делась вся свободная память?", а ему отвечают: "не парься. кэш видишь?
будет нужна память ядро само почистит кэш, и вернёт память".

А вот сегодня мне пришлось вручную сбрасывать кэш, занимавший около
60% всего объёма ОЗУ, пока этого не сделал, была загрузка процессора
ядром под 90% и в логи валились сообщения типа "[6848409.216723] java:
page allocation failure. order:1, mode:0x20
[6848409.216929] Pid: 17814, comm: java".

Там ещё прозрачные huge pages включены, но это, думаю, не столь важно.

Вопрос, почему ядро не сбрасывает кэш?


Re: почему ядро не сбрасывает кэш?

2015-12-02 Пенетрантность Aleksandr Sytar
2 декабря 2015 г., 14:23 пользователь Hleb Valoshka <375...@gmail.com>
написал:

> Классическая ситуация: поставил кто-то себе GNU/Linux, узнал о
> существовании комманды free и пишет в рассылки/форумы/irc: "а куда
> делась вся свободная память?", а ему отвечают: "не парься. кэш видишь?
> будет нужна память ядро само почистит кэш, и вернёт память".
>
> А вот сегодня мне пришлось вручную сбрасывать кэш, занимавший около
> 60% всего объёма ОЗУ, пока этого не сделал, была загрузка процессора
> ядром под 90% и в логи валились сообщения типа "[6848409.216723] java:
> page allocation failure. order:1, mode:0x20
> [6848409.216929] Pid: 17814, comm: java".
>
> Там ещё прозрачные huge pages включены, но это, думаю, не столь важно.
>
> Вопрос, почему ядро не сбрасывает кэш?
>

Все несколько сложнее чем кажется на первый взгляд, но сообщения о нехватке
памяти может быть получено когда память есть, но не та которая нужна
приложению - в данном случае java попросила 1 страницу 8к, и их не
оказалось, а вот страниц 4к, 16к и т.д. вполне могло быть в достатке.

Подробнее - Understanding The Linux Virtual Memory Manager -
https://www.kernel.org/doc/gorman/pdf/understand.pdf