LINUX.ORG.RU
ФорумAdmin

Ускорение загрузки с HDD за счет специальной дефрагментации

 


1

4

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

Вручную на неполном диске это сделать несложно. Переместить на свободный диск всю систему. Потом скопировать обратно последовательно /boot, /etc/, /bin/, /lib, /usr/bin, /usr/lib и дальше в порядке вероятности доступа при загрузке. Но на живой системе постоянно поддерживать такое будет затруднительно.

В общем может кто-то уже изобретал такого рода дефрагментатор, который бы мог список указанных файлов держать последовательно и поближе к началу диска?

Перемещено hobbit из general


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

Всё надеюсь найти в сети чьё-нибудь исследование, где расписано, что и зачем хранит ядро. Встречаются же всякое про своппинг и пр.

А так, чтобы стало «по колено» сначал придётся полностью закопаться, чтобы понять что и зачем хранится в куче разных списков.

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

ты наверное хотел написать «навернуться» или «извергнуться» ? 8)

но, если ТС хочет стоят и в гамаке - это его собственный выбор.))

как я решаю проблемы у себя лично - я уже написал, меня устраивает, пример с dd наглядно показал, что SSD пофигу какой по счёту гигабайт начитывается, ключ «W» предотвращает чтение с HDD в общем случае, может кому ещё полезно это будет

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

надеюсь найти в сети чьё-нибудь исследование, где расписано, что и зачем хранит ядро.

Одно из тех, которые я находил, утверждало, что buffer cache использует для хранения данных page cache. Что, похоже, не так. Так что я бы не надеялся попусту.

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

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

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

Что значит «соответствует»? И насколько это важно? Есть реальные диски, у них скорость линейного чтения быстрее, чем случайного. Скорость линейного чтения с первых (в LBA адресации секторов) быстрее, чем с последних.

Точки зрения скорости загрузки системы есть ли разница, почему скорость линейного чтения разных LBA секторов отличается — из-за маркетинга или ZBR?

Скорость линейного чтения измерима? Результаты воспроизводятся? Можно ли определить область НЖМД, которая в линейном режиме читается быстрее всего? Можно. А вот засунуть туда нужные файлы и разом при старте закешировать их путём линейного чтения этой области...

И картинка так себе.

Кардинально отличающуюся картинку для CMR диска и его модель покажите.

В этом треде достаточно примеров двухкратной разницы скорости линейного чтения, поэтому хоть чем-то обоснуйте своё «Сказки».

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

Что адресация LBA не обязательно соответствует физической геометрии.

И? Это не влияет на факт того, что в конце диска скорость ниже, причём почти вдвое.

Приблизительно из распределения скоростей можно вывести приблизительное отображение LBA на CHS. Но зачем? Почесать ЧСВ, заявляя всем вокруг «я знаю больше всех»? Это знание почти что бесполезное, так как не даёт никакой предсказательной силы.

i-rinat ★★★★★
()

Кстати о замерах. Я закончил скрипт для относительно удобных проверок на конкретных дисках. Помимо тестов, он может использоваться как оптимизатор загрузки больших папок с мелкими файлами в память(page cache) перед работой с ними. Требования:

  • vmtouch
  • filefrag
  • запуск из под рута, ну или сделайте filefrag рабочим для вашего юзера

Код hdd-file-preload.pl:

#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Std;

=pod

Usage:

  find /etc -type f | perl hdd-file-preload.pl -c -s [ -u ] [ -l list-file ]

Reads list of files from standard output and move or remove them from page cache.

Options:

-c - cache files
-s - while caching sort files according to their placement on disk to limit head moving
-l - just produce list of files suitable for "vmtouch -b <file>"
-u - uncache files

=cut

my %cli_opts;
getopts('cusl:', \%cli_opts);

die "Need -c or -u option to specify action, or just -l" unless ($cli_opts{'l'} or $cli_opts{'c'} or $cli_opts{'u'});

our @files = ();

sub process_file {
    use vars qw( @files );
    my ($filepath) = @_;

    my @lines = split(/\n/, `filefrag -e "$filepath"`);
    foreach my $line (@lines) {
        $line =~ / ([0-9]{3,12}).. +([0-9]+):/;
        if (! $1) {
            next;
        }

        push @files, [int($1), $filepath];
        last;
    }
}

my $total_files = 0;
while (my $inp = <>) {
    chomp $inp;
    if ($cli_opts{'c'} or $cli_opts{'l'}) {
        process_file($inp);
    }
    else {
        push @files, [0, $inp];
    }
    $total_files++;
}


if ($cli_opts{'s'}) {
    @files = sort { $a->[0] <=> $b->[0]; } @files;
}

if ($cli_opts{'l'}) {
    open (my $OUTP, '>', $cli_opts{'l'}) or die "$!";
    foreach my $file (@files) {
        print $OUTP "$file->[1]\n";
    }
    close ($OUTP);
    exit;
}


my $max_args = 255;
for (my $i = 0; $i < scalar(@files); $i += $max_args ) {
    my $cur_args = ($i + $max_args < scalar(@files) ) ? $max_args : (scalar(@files) - $i-1);
    my $command = $cli_opts{'c'} ? '-t' : '-e';
    my $execs = "vmtouch $command " . join(" ", map { "\"" . $_->[1] . "\""; } @files[$i..($i+$cur_args)]);
    system $execs;
}

Сценарий замера такой:

  1. Собрать список файлов в обычном порядке их чтения из директории: find /etc -type f | perl hdd-file-preload.pl -l /tmp/dir_raw.txt

  2. Собрать список файлов в порядке их физического расположения на диске: find /etc -type f | perl hdd-file-preload.pl -s -l > /tmp/dir_sorted.txt

  3. Убрать все файлы из кэша: vmtouch -e -b /tmp/dir_raw.txt

  4. Замерить результат загрузки в обычном порядке чтения: time vmtouch -t -b /tmp/dir_raw.txt

  5. Снова убрать все файлы из кэша: vmtouch -e -b /tmp/dir_raw.txt

  6. Замерить результат загрузки в оптимизированном порядке чтения: time vmtouch -t -b /tmp/dir_sorted.txt

Скрипт намеренно прикрепил сюда, чтобы через год он не пропал по внешней ссылке.

Salol
() автор топика
Последнее исправление: Salol (всего исправлений: 1)
Ответ на: комментарий от i-rinat

ИМХО, бесполезно спорить, определние, про какую физику идёт речь не приведено, явно что не про PBA, которые пишутся в P-list. Но, если принять во внимание, что у anc начало диска в центре, там где конец LBA, то понятно, с чём он упорно спорит.

У множества CMR дисков изучены трансляторы, написаны программы сервесного режима и мануалы к ним, но здесь начался срач, что всё покрыто тайной и не в чём нельзя быть увереным.

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

Линейное чтение в два раза? Сказки.

Вот не «по опросам», а юзер взял и измерил. Обрати внимание.

Ускорение загрузки с HDD за счет специальной дефрагментации (комментарий)

dd count=1024 bs=1024k if=/dev/sdi of=/dev/null 1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 5,36657 s, 200 MB/s

dd count=1024 bs=1024k if=/dev/sdi skip=2856487 of=/dev/null 1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 11,0965 s, 96,8 MB/s
greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от mky

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

Кстати, подобные запросы могут быть некоторым критерием умений (зрелости) ИИ.

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 3)
Ответ на: комментарий от greenman

Нет у меня желания общаться с ChatGPT, в сети полно примеров, аналогичных этому: Форумы ака «поиск помощи» vs ChatGPT (комментарий) Ассемблер PDP-11 открыт, куча учебников, но он сувал в пример кода несуществующие в этом ассемблере команды. Не мог сам проверить, что во всём учебнике нет такой команды. То есть ChatGPT в произвольный момент выдаст откровенную пургу, если его ткнуть носом, то тут же исправится, но не точно :). А чтобы тыкать его носом, нужно хорошо знать. В общем «сильным тренеровка не нужны, слабым не поможет».

И ещё отдельный вопрос, надолго ли запоминает ChatGPT свои ошибки, или через неделю или при каком обновлении, всё повторится и опять код на ассемблере PDP-11 будет начат с ″ORG 0″. И всё время, потраченое на его обучение — впустую.

Мне очень не нравится, что ChatGPT не спорит, в смысле аргументированно не отстаивает свою позицию, он не выдаст перевоисточник, откуда он это взял, или вобще придумает ссылку на несуществующие данные. Если бы он мог показать статью и написать, что вот, смотрите на основании этих абзацев был сделан такой вывод, а ты ему мог ответить, что этот термин в контексте этой статьи означает другое...

Куски информации в списках рассылки

Зрелый ИИ, умеющий в синтез, сможет изучить язык Си, сам проанализировать исходный код ядра и объяснить про Page и Buffers кэши, что окуда куда переклаыдвается и при каких условиях. А пока ChatGPT больше эклектика, чем синтез.

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

Это в принципе логичное замечание, но думаю там все равно будут большие участки с огромной скоростью линейного чтения размером в блин или пол-блина. Т.е. все равно при упорядоченном чтении с доступом по номерам LBA будет почти то же самое количество seek, плюс количество блинов.

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

размером в блин или пол-блина

Там ZBR, зон около 10, читается всё из одной зоны с одного блина, переключается головка, читаются сектора этой же зоны другого блина.

же самое количество seek

Важно не только кол-во seek, но и на сколько цилиндров. На соседний физический цилиндр головку можно переместить быстро и точно, при перемещении на несколько цилиндров головка может немного не попасть на середину дорожки, нужно время на коррекцию. А при перемещниии на много физических цилиндров (условно >20) и точно попасть сложно и колебания в держателе головки возникают, нужно ещё время на успокоение. Sector/Track Skew (смещение начала соседних физических дорожек) составляет условно 30 градусов, то есть за время 1/12 оборота блина головка переходит с одного физического цилиндра на другой. И сделано это обычно для ускорения чтения в сторону возрастания номеров LBA (LBAn, LBAn+1).

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

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

В нетехнических вещах чатгопота совсем лажа. Я её попросил список книг определённого жанра, так она половину списка просто выдумала.

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

Я её попросил список книг определённого жанра, так она половину списка просто выдумала.

Ну так может она уже и сам текст этих книг выдумала. :)

anc ★★★★★
()