Я очень сомневаюсь, что вы сможете получить значимые тесты из dd
. dd
просто показывает, как большие последовательные чтения или большие последовательные асинхронные записи выполняются между различными устройствами. Пока ваша рабочая нагрузка в основном состоит из копирования больших файлов между этими файловыми системами, с вами все в порядке. Однако, я сомневаюсь, что это ваша рабочая нагрузка.
Лучше всего профилировать использование диска и использовать реальный набор эталонных тестов ввода/вывода (ссылка bonnie++
или что-то в этом роде), чтобы проверить, насколько сильно меняются различные настраиваемые параметры. Для базы данных я ожидаю много случайных чтений. Установка noatime
и выполнение data=writeback
на ваших основных файлах данных (с регулярным резервным копированием), вероятно, лучшее, что вы можете сделать с той информацией, которая у нас есть на данный момент.
Чтобы ответить на самый главный вопрос, это потому, что асинхронная запись (как в dd
) может буферизироваться в памяти и фиксироваться на диске. Они типа связаны вводом/выводом, поскольку очереди и буферы могут заполняться, и вам придется подождать, пока они снова станут доступны (путем фиксации на диске), прежде чем вы сможете увеличить стек.
Чтения, с другой стороны, определенно связаны вводом/выводом, так что вы обычно не получаете одно и то же асинхронное действие. Вы можете поиграть с read_ahead_kb
и т.п., чтобы больше последовательных данных считывалось в память в ожидании того, что их запросит нагрузка в ближайшем будущем.
Это все, о чем я могу подумать, чтобы ответить тем, что мы знаем до сих пор. Дайте мне знать, если у вас возникнут вопросы.
Для объединения 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;
}
}