LINUX.ORG.RU
ФорумTalks

Визуализатор фрагментации файлов на диске. С квадратиками


0

6

Я тут месяцев пять назад задавал вопрос про визуализатор фрагментации; такового не нашлось и я начал его пилить сам. Давно уже его не трогал, и вряд ли в ближайшее время буду, так что решил выложить, вдруг кому будет интересно: git://github.com/i-rinat/fragview.git

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

А, да, работает только с ФС, которые поддерживают FIEMAP, это вроде ext2/3/4 и btrfs. Патч, добавляющий FIEMAP для JFS есть тут.

Скрин: http://ompldr.org/vOWs0NQ

★★★★★

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

>>> а потом запилить например на ланчпад

Не надо на эту помойку, к тому же оно уже на гитхабе, если ты не заметил

Мнение арчефила я не спрашивал.И да,приглашаю во френды.


Омг, да у тебя болезнь уже. При чем здесь арч, скажи мне, если ланчпад действительно нафиг не нужен, когда исходники уже на гитхабе?

pevzi ★★★★★
()
splinter@sprogrammer:~/src/defrag/fragview$ make
clang++ -g3 -ggdb3 -O2 -pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12    -o graph.o -c graph.cpp
In file included from graph.cpp:4:
In file included from ./gtk_fragmap.h:3:
./clusters.h:8:8: error: unknown type name '__u64'
inline __u64 minu64(__u64 a, __u64 b) {
       ^
./clusters.h:8:1: error: 'inline' can only appear on functions
inline __u64 minu64(__u64 a, __u64 b) {
^
./clusters.h:8:21: error: use of undeclared identifier '__u64'
inline __u64 minu64(__u64 a, __u64 b) {
                    ^
./clusters.h:8:38: error: expected ';' after top level declarator
inline __u64 minu64(__u64 a, __u64 b) {
                                     ^
                                     ;
./clusters.h:20:21: error: use of undeclared identifier 'tuple'
typedef std::vector<tuple> tuple_list;
                    ^
./clusters.h:44:1: error: unknown type name '__u64'
__u64 get_device_size_in_blocks(const char *initial_dir);
^
./clusters.h:45:40: error: unknown type name '__u64'
void __fill_clusters(file_list *files, __u64 device_size_in_blocks, 
                                       ^
./clusters.h:46:30: error: unknown type name '__u64'
                                        cluster_list *clusters, __u64 cluster_count,
                                                                ^
In file included from graph.cpp:4:
./gtk_fragmap.h:25:2: error: unknown type name '__u64'
        __u64 device_size_in_blocks;
        ^
./gtk_fragmap.h:63:55: error: unknown type name '__u64'
void gtk_fragmap_set_device_size(GtkFragmap *fragmap, __u64 sib);
                                                      ^
10 errors generated.
make: *** [graph.o] Ошибка 1

Шо за нах?

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

Странно, linux/fs.h для определения __u64 должно быть достаточно, и на 32 и на 64-битных системах.

А что

grep -R 'typedef.*_u64;' /usr/include/
показывает?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat
rain@dbs86:~/buildfs/fragview$ grep -R 'typedef.*_u64;' /usr/include/
/usr/include/asm-generic/int-l64.h:typedef unsigned long __u64;
/usr/include/asm-generic/int-ll64.h:__extension__ typedef unsigned long long __u64;
/usr/include/asm-generic/int-ll64.h:typedef unsigned long long __u64;
YAR ★★★★★
()
Ответ на: комментарий от i-rinat

ну уж нет
только ради этого лезть в код фс...
нафиг-нафиг

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

попробуй добавить в файлы, которые вызывают ошибки:

#include <linux/types.h>

Оказывается не у всех linux/fs.h подключает linux/types.h

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

Это было на работе на убунте, дома на слаке все завелось без бубнов.

splinter ★★★★★
()
25 августа 2011 г.

Открыл для себя тот факт, что reiserfs записывает почти все большие файлы с разрывами, в которые вставляет метаданные. Это приводит к тому что фактически последовательно записанные файлы считаются фрагментированными только из за формально большого количества кусков. Само по себе число фрагментов стало ничего не говорящим просто числом. Поразмыслив, я выдумал другую метрику: считать скорость чтения файла, усредненную по некоторому окну (буфер чтения) и искать минимальную скорость для файла. Отношение сырой скорости к минимальной средней-по-окну и будет severity.

Теперь здоровый файл из 10 больших кусков будет иметь severity около единицы, а у небольшого файла из двух блоков, разбитого на два куска, severity может перевалить за несколько тысяч. И это больше соответствует влиянию не производительность.

Собственно, что сказать хотел: я вставил поддержку этой метрики в свою программу; и теперь она не падает.

i-rinat ★★★★★
() автор топика

Пара ошибок в функции оценки severity привели к её абсолютной неадекватности. Починил. Похоже, что на этот раз верно, по крайней мере на моём хомяке показатель выше 50 не поднимается.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от adriano32

> Размер, который репрезентуют блоки adjustable?

Теперь да. Правда память очень любит: ~ 1.5 Gb на 100 Gb раздел для масштаба 1:1. Менять масштаб можно скроллом мышки, зажав Ctrl на клавиатуре.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от adriano32

> У меня нет таких денег © :D

Если сделать структуру данных о кластерах разреженной, потребление памяти значительно снизится, но пока не соображу, как подступиться. Сейчас просто пустой вектор clusters занимает 60% от всей памяти.

А пока можно ограничиться 1:10, это уже всего 150 Мб на 100 Гб.

i-rinat ★★★★★
() автор топика
11 марта 2012 г.
Ответ на: комментарий от i-rinat

Если сделать структуру данных о кластерах разреженной, потребление памяти значительно снизится

Сделал хранение данных о кластерах разреженным, потребление памяти снизилось (~170-200 MiB на раздел 200 GiB). Память выделяется и заполняется только когда есть необходимость показывать необходимую область.

Из остального — перешёл на gtkmm-3.0 и добавил список самых фрагментированных файлов, чтобы вручную не искать.

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