Слияние пар файлов TIFF в каталоге

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

Лучше всего профилировать использование диска и использовать реальный набор эталонных тестов ввода/вывода (ссылка bonnie++ или что-то в этом роде), чтобы проверить, насколько сильно меняются различные настраиваемые параметры. Для базы данных я ожидаю много случайных чтений. Установка noatime и выполнение data=writeback на ваших основных файлах данных (с регулярным резервным копированием), вероятно, лучшее, что вы можете сделать с той информацией, которая у нас есть на данный момент.

Чтобы ответить на самый главный вопрос, это потому, что асинхронная запись (как в dd) может буферизироваться в памяти и фиксироваться на диске. Они типа связаны вводом/выводом, поскольку очереди и буферы могут заполняться, и вам придется подождать, пока они снова станут доступны (путем фиксации на диске), прежде чем вы сможете увеличить стек.

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

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

1
18.09.2014, 23:37
1 ответ

Для объединения TIFF можно использовать tiffcp. Для примера можно записать простой цикл в Perl:

for ($i= 1; $i<= 100; $i+=2) { 
    $j = $i + 1;    
    system("tiffcp sample$i.TIFF sample$j.TIFF sample$i\_$j.TIFF");
}

Update:

Если в файлах TIFF нет последовательности, т.е. вместо sample1.tif, sample2.tif есть abc.tiff, def.tiff... и т.д. и т.п. и нужно объединить первые 2 tiff в папке по метке времени, затем можно сделать следующее:

Отсортировать файлы TIFF по метке времени, используя ls -lt, а затем извлечь имена файлов TIFF из выходных данных. Это можно сделать либо с помощью awk (см. ниже), либо, если у вас есть доступ к vim, можно использовать Ctrl-v для удаления ненужных столбцов из каждой строки вывода.

ls -lt | awk '$9 ~ "TIFF$" { вывод $9 }. ' > sorted_TIFFs.list

После получения списка отсортированных файлов TIFF можно пройтись по ним и запустить tiffcp с помощью простого Perl скрипта. Этот скрипт принимает в качестве входного параметра командной строки отсортированный_TIFFs.list, созданный на предыдущем шаге.

#!/bin/perl

$file=$ARGV[0];
open FILE, $file || die "Invalid filename";

while ($line=<FILE>) {
    chomp($line);
    $file1 = $line;
    if ($line = <FILE>)
    {
        chomp ($line);
        $file2 = $line;
        $prefix= $file1;
        $prefix =~ s/\.TIFF//; #to avoid a.TIFF_b.TIFF
        system("tiffcp $file1 $file2 $prefix\_$file2\n");
    } else {
       print "No matching TIFF file, odd number of total files.\n";
       exit;
    }
}
2
27.01.2020, 23:38

Теги

Похожие вопросы