LINUX.ORG.RU

x86-64, очистить кэш


0

0

Хочется странного -- из юзерспейса "очистить" линейку "грязного" write-back кэша... Нет ли такой возможности (конкретно Xeon E5472 интересует)?

То есть, я записал, оно попало в кэш, я его прочитал, оно мне больше не нужно -- как бы его в память вообще не писАть...

★★★★★

> Хочется странного -- из юзерспейса "очистить" линейку "грязного" write-back кэша...

Из юзерспейса, думаю, никак.

Ximen ★★★★
()

sysctl vm.drop_caches не оно? Чистит pagecache и что-то ещё, в доках есть... Тока оно вообще всё чистит.

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

Можно ещё сходить в магазин и потратить весь cash %)

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

Спасибо всем ответившим!

> Используй команды movnt*.

Ну, это, типа не из Це вообще писАть...

Мне хочется такого (в идеале): есть адрес (виртуалный), валидный но "грязный" в кэше, записанный из моей любимой Це - программы, и мне надо так инвалидировать линейку кэша с этим адресом, чтобы он при этом в память не ушёл.

Подробнее начальная проблема:

Я пишу подряд в ячейки памяти, но нужны они мне только изредка. БОльшая часть записанных данных больше не пригодиться, и я знаю, какие именно. К сожалению, по техническим причинам я не могу реюзать эти адреса. Я не хочу при этом пользоваться наворотами, препятствующими загрязнению кыша; он загрязняется, гад! Вопрос -- можно ли его "почистить"?

Die-Hard ★★★★★
() автор топика
Ответ на: комментарий от Die-Hard

Imho то, что ты хочешь (препятствовать переносу в основную память того, что находится во write-back кэш), выглядит противоестественным даже для ring0. Да и wbinvd, говорят, для этого не годится.

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

Думаю, тебе это тоже не подойдёт по 2 причинам: (1) неясно, сможет ли это сделять ядро на x86 (разве что каким-то программированием кэша на мамке через чипсет); (2) если ты не можешь реюзать адреса - то, вероятно, и соотв. память освободить ты тоже не сможешь.

А вообще, наверное, действительно, для процессоров было бы довольно полезно иметь что-то аналогичное tmpfs, цель которого - хранить временные данные, а не быть буфером в их записи в основное хранилище.

alexsaa
()
Ответ на: комментарий от Die-Hard

> Мне хочется такого (в идеале): есть адрес (виртуалный), валидный но "грязный" в кэше, записанный из моей любимой Це - программы, и мне надо так инвалидировать линейку кэша с этим адресом, чтобы он при этом в память не ушёл.

Пиши туда же.

> Я пишу подряд в ячейки памяти, но нужны они мне только изредка. БОльшая часть записанных данных больше не пригодиться, и я знаю, какие именно. К сожалению, по техническим причинам я не могу реюзать эти адреса. Я не хочу при этом пользоваться наворотами, препятствующими загрязнению кыша; он загрязняется, гад! Вопрос -- можно ли его "почистить"?

Как ты хочешь - никак. Только переиспользовать грязные строки.

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

> (разве что каким-то программированием кэша на мамке через чипсет)

На x86 кэша на мамке уже скоро как 10 лет нету =)

mv ★★★★★
()

> Хочется странного -- из юзерспейса "очистить" линейку "грязного" write-back кэша...

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

no-dashi ★★★★★
()
Ответ на: комментарий от Die-Hard

>Я пишу подряд в ячейки памяти, но нужны они мне только изредка. БОльшая часть записанных данных больше не пригодиться, и я знаю, какие именно. К сожалению, по техническим причинам я не могу реюзать эти адреса. Я не хочу при этом пользоваться наворотами, препятствующими загрязнению кыша; он загрязняется, гад! Вопрос -- можно ли его "почистить"?

Вот где пригодилось бы lazy evaluation.

imp ★★
()
Ответ на: комментарий от no-dashi

> Не будет тебе такого. Подумай сам - ведь нет никакой гарантии, что изменение уже не ушло в память.

а какая разница.

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

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

> инструкция clflush

А ты в даташите интеловском не пробовал читать, что она делает? :-D

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