LINUX.ORG.RU
ФорумTalks

[cache][вещества] возможно ли настроить кэш?

 ,


0

0

возможно ли запретить кэшировать мусор некого конкретного приложения?
например кэш торрентов - оно мне ни разу не нужно - как его «забанить»?
и возможно ли?

★★★★

Последнее исправление: megabaks (всего исправлений: 1)

Ответ на: комментарий от megabaks

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

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

обосновать сей высер можешь?
когда сможешь приходи
и я общаюсь с людьми на их языке! подумай и помни - я в тебя верю!

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

Я смотрю, ты весьма образованный человек, с которым есть о чем поговорить. Это если культурно.

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

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

ой да, нимагу, «огромный вклад в развитие highload» =))
нихера он в осях не рабирается, он даже публично в этом признался на rootconf в прошлом или позапрошлом году, после доклада Присяжного.

val-amart ★★★★★
()
Ответ на: комментарий от madgnu

>с примесью гордости и самоуверенности.
и это говоришь ты? о_О
и где обоснования? или решил себя самого за балабола прокатить?

megabaks ★★★★
() автор топика
Ответ на: комментарий от val-amart

тоесть, не нихера, конечно. но до уровня разработчика ос ему далеко, а ведь лезет, прям как ТС. он мне напоминает Костромина и Федорчука =)) это русская тусовка фрибсдшников вообще такая забавная )

val-amart ★★★★★
()
Ответ на: комментарий от megabaks

только меня лечить не надо, оха!?

вроде разжевал...или нет?

к дохтору давно ходил?

сам вкури что и как потом лечи

по делу есть?

трэд мой - так что уходи ты! оха?

малыш,иди лесом-полем, лесом-полем...и так до просветления

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

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

>научись прислушиваться к мнению старших
если они говорят нормально и что-то объясняют чего я НЕ знаю - я слушаю
а если тупо гонят - ну извиняй - не доросли ещё они до «старших»
кстати - и сколько же тебе уважаемый?

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

>Это альтер-эго самого Линуса же.
ну обознался я...бывает :)

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

>я общаюсь с людьми на их языке!
что не так?

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

-=:=-

Воопще-то топег весьма показателен.
Ведь выдавливание кэша либов,винарей, shared, и т.д. - весьма не няшно.
Однако, как тут правильно заметили - vm срать хотела на это.
Поэтому реален лишь один выход - софт-костыль (или ему подобный fuse-модуль), типа preload или самописной каки, которая «nice -n 19 ionice -c3» будет «cat важное_файло > /dev/null» по ЗАРАНЕЕ указанному списку и делать это постоянно.
НУ а чтобы этот список получить - inotifywatch по всем нужным каталогам - И запуская каждую нужную прогу - составлять список для вышеуказанного...ммм ..ручного кэшЫрования.

Ну, вот примерно так..

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

ммм, сегодня вечерком займусь :). А для какой проги ты хочешь это попробывать?

PS маны кучу страшного про O_DIRECT пишут, может и не получиться т.к. куча гемора может вылезти с выравниваниями.

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

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

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

не, это вообще фантастика т.к. в пределах одного mount point у линуха настройки файлухи одинаковые.

Так что за прога? Надо в сырцы глянуть на 5 сек.

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

Фак, он на cpp написан да ещё с QT-шными классами, я хз как с этим всем хозяйством работать, сорри :(. Вторая прога тоже на cpp, похоже, написана.

Если я допру как на уровне системных вызовов подмену сделать то я скажу.

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

а у тебя сишных прог нету? А то я уже налабал велосипед(что интересно, изначально это была либа для подмены времени для триальной проги: http://www1.opennet.ru/base/dev/sun_hack.txt.html).

//SPIZHENO FROM http://www1.opennet.ru/base/dev/sun_hack.txt.html
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>

static void     *libc_handle = NULL;
static long     (*open_ptr)() = NULL;

static int      inited = 0;

static void init (void) {
    printf("initing wrapper...");
   if (libc_handle = dlopen ("/lib/libc.so.6", RTLD_LAZY)) {
      if (!(open_ptr = dlsym (libc_handle, "open")))
         fprintf (stderr, "can't find open()\n");
   }
   else
      fprintf (stderr, "can't open libc.so, sorry\n");

   printf("done\n");
   inited = 1;
}


int open(const char *pathname, int flags) {
   if (!inited)
      init();

    printf("OPA!\n");
    return open_ptr(pathname, flags);
}
true_admin ★★★★★
()
Ответ на: комментарий от megabaks

Попробуй этот код, как компилить наверху написано:

/* gcc -shared -ldl ./open.c -o open.so */
/* gcc -ldl -fpic -shared -O4 -pipe -s -o open.so open.c  */
//SPIZHENO FROM http://www1.opennet.ru/base/dev/sun_hack.txt.html
#include <stdio.h>
#include <unistd.h>
#include <dlfcn.h>

static void     *libc_handle = NULL;
static long     (*open_ptr)() = NULL;

static int      inited = 0;

static void init (void) {
    printf("initing wrapper...");
   if (libc_handle = dlopen ("/lib/libc.so.6", RTLD_LAZY)) {
      if (!(open_ptr = dlsym (libc_handle, "open64")))
         fprintf (stderr, "can't find open()\n");
   }
   else
      fprintf (stderr, "can't open libc.so, sorry\n");

   printf("done\n");
   inited = 1;
}


int open64(const char *pathname, int flags) {
   if (!inited)
      init();

    printf("OPA!\n");
    return open_ptr(pathname, flags);
}

Запускаешь свою прогу так:

LD_PRELOAD="./open.so" <прога>

Код НЕ рабочий!!1, прога может заглючить! Так что запустил и сразу убивай ей. Ты главное скажи будет ли писать на консоль «OPA» много раз или нет.

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

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

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

отлично!

А теперь такой код. Потести со своей торрентокачалкой и посмотри будет ли на консоль писаться что нужные тебе файлы открыты с O_DIRECT.

/* gcc -shared -fpic -pipe ./open.c -o open.so -ldl */
#define _GNU_SOURCE
#define COLOR_OUTPUT 1

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <dlfcn.h>
#include <stdarg.h>
#include <fcntl.h> //definition of O_CREAT && O_DIRECT
#include <errno.h>

#define RED 31
#define GREY 37
#define BROWN 33
#define reset_color() printf("\033[0m")

static void     *libc_handle = NULL;
static long     (*open_ptr)() = NULL;
static int      inited = 0;


void printf_color(int color, char *fmt, ...) {
#if COLOR_OUTPUT
    printf("\033[0;%dm", color);
#endif
    va_list args;
    va_start (args, fmt);
    vprintf (fmt, args);
    va_end (args);
#if COLOR_OUTPUT
    reset_color();
#endif
    //fflush(stdout);
}

static void init (void) {
    setvbuf(stdout, NULL, _IONBF, 0);
    reset_color();
    printf_color(RED, "megabaks preved!!!\n");
    printf("*** initing wrapper... ");

    libc_handle = dlopen ("libc.so.6", RTLD_LAZY);
    if (!libc_handle) {
       err(2, "***Can't open libc.so, sorry"); }

    open_ptr = dlsym (libc_handle, "open64");
    if (!open_ptr) {
         err(3, "can't find open64()"); }

   printf("done\n");
   inited = 1;
}


int open64(const char *pathname, int flags, ...) {
    int result;
    mode_t mode;

    if ( !inited ) {
        init(); }

    if ( strstr(pathname, "/dev/")  ||
         strstr(pathname, "/proc/") ||
         strstr(pathname, "/sys/")
        ) {
        printf_color(BROWN, "*** just opening %s ", pathname);
    } else {
        flags |= O_DIRECT;
        printf("*** opening file %s with O_DIRECT ", pathname);
    }

    if (flags & O_CREAT) {
        va_list arg;
        va_start (arg, flags);
        mode = va_arg (arg, mode_t);
        va_end (arg);
        result = open_ptr(pathname, flags, mode);
    } else {
        result = open_ptr(pathname, flags);
    }

    (result >= 0) ? printf("ok\n") : printf_color(RED, "FAILED with %s\n", strerror(errno));
    return result;
}

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

хм...

megabaks@desktop ~/testio $ gcc -shared -fpic -pipe ./open.c -o open.so -ldl 
megabaks@desktop ~/testio $ LD_PRELOAD="./open.so" ktorrent
megabaks preved!!!
*** initing wrapper... done
*** opening file /tmp/.ktorrent_kde4_1000.lock with O_DIRECT FAILED with Недопустимый аргумент
Failed to open KT lock file /tmp/.ktorrent_kde4_1000.lock : Недопустимый аргумент
ktorrent is already running !
<unknown program name>(12160)/: KUniqueApplication: Registering failed! 

<unknown program name>(12160)/: Communication problem with  "ktorrent" , it probably crashed. 
Error message was:  "org.freedesktop.DBus.Error.ServiceUnknown" : " "The name org.ktorrent.ktorrent was not provided by any .service files" " 

megabaks@desktop ~/testio $ killall ktorrent
ktorrent: процесс не найден
megabaks@desktop ~/testio $ LD_PRELOAD="./open.so" ktorrent
megabaks preved!!!
*** initing wrapper... done
*** opening file /tmp/.ktorrent_kde4_1000.lock with O_DIRECT FAILED with Недопустимый аргумент
Failed to open KT lock file /tmp/.ktorrent_kde4_1000.lock : Недопустимый аргумент
ktorrent is already running !
<unknown program name>(14692)/: KUniqueApplication: Registering failed! 

<unknown program name>(14692)/: Communication problem with  "ktorrent" , it probably crashed. 
Error message was:  "org.freedesktop.DBus.Error.ServiceUnknown" : " "The name org.ktorrent.ktorrent was not provided by any .service files" " 
реально то он не запущён

megabaks ★★★★
() автор топика
Ответ на: комментарий от true_admin
megabaks@desktop ~/testio $ gcc -shared -fpic -pipe ./open.c -o open.so -ldl 
megabaks@desktop ~/testio $ LD_PRELOAD="./open.so" ktorrent
megabaks preved!!!
*** initing wrapper... done
*** just opening /tmp/.ktorrent_kde4_1000.lock ok
*** opening file /home/megabaks/.kde4/share/config/kdeglobals with O_DIRECT ok
*** opening file /home/megabaks/.kde4/share/config/ktorrentrc with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.kde4/share/config/kdeglobals with O_DIRECT ok
*** opening file /home/megabaks/.kde4/share/config/kdeglobals with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /usr/lib/kde4/plugins/gui_platform/libkde.so with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /usr/lib/qt4/plugins/inputmethods/libqimsw-multi.so with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /usr/lib/kde4/plugins/styles/oxygen.so with O_DIRECT ok
*** opening file /usr/lib/kde4/plugins/styles/qtcurve.so with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/Trolltech.conf with O_DIRECT ok
*** opening file /home/megabaks/.config/qtcurve/stylerc with O_DIRECT ok
<unknown program name>(31996)/: Communication problem with  "ktorrent" , it probably crashed. 
Error message was:  "org.freedesktop.DBus.Error.NoReply" : " "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken." " 

сожрал он полпроца, а в трее/морды так и не увидел...

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

едрить, заработало?? Теперь можно тестить тогда. Например, сделать echo 3 > /proc/sys/vm/drop_caches, запустить rehash торрента и посмотреть сожрёт ли это память в buffers в выводе free.

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