Для сортировки команд Linux, как заставить сортировку загрузить весь ввод в память и выполнить сортировку, если у меня достаточно памяти? Или лучше использовать RAMDISK для хранения ввода перед подачей на сортировку?

3 ответа3

8

Вы можете указать временный каталог как несуществующий и изменить параметр размера основной памяти. Это, однако, приведет к сбою сортировки, если у вас недостаточно памяти:

$ sort -S 1000 -T /nonexistant/dir /usr/share/dict/words | wc -l 
sort: cannot create temporary file in `/nonexistant/dir': No such file or directory
0
$ sort -S 10000 -T /nonexistant/dir /usr/share/dict/words | wc -l
98569

Единицей для опции -S является кБ (см. Комментарий ниже).

2

Читать сторону

За исключением очень нестандартных файловых систем, весь shebang будет кэшироваться любым способом (соблюдайте это в htop).

Вы также можете увидеть объем буферизации в выводе vmstat 1 . Обратите внимание, как linux просто забирает всю доступную память (даже если она не адресуется одному клиентскому процессу, например, при запуске ядра PAE на 32-битном или 64-битном ядре с 32-битным пользовательским пространством).

Посмотрите, как вы можете принудительно очистить кеш, выполнив echo 3 > /proc/sys/vm/drop_caches в другом терминале. (очистка кеша страниц, кеша inode и dentry)

Написать сторону

Что касается записи, функция tmpfs в linux 2.4+ великолепна. Это делает аналог кэширования чтения, и вы можете вручную ограничить его размер. Это мой по умолчанию /tmp mount:

sudo mount -t tmpfs -o nodev,noexec,size=6g none /tmp

Я обычно работаю с /tmp в течение более длительных периодов дня и использую контроль версий, чтобы помещать вещи в (энергонезависимый) репозиторий.

навынос

Так что, стесняйтесь из / напишите это сами / решения, вы должны просто использовать функции ядра, которые есть.

[1] Я также символические ссылки, такие как ~/.cache ~/.opera/cache и т.д., В /tmp /действительно поднимает бремя очистки, повышает производительность и поддерживает твердотельные накопители в исправном состоянии.

0

Если какой-либо временный каталог "sort" поддерживает "отложенное выделение" - например, ext4 или xfs, то он все равно сделает это!

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .