Для сортировки команд Linux, как заставить сортировку загрузить весь ввод в память и выполнить сортировку, если у меня достаточно памяти? Или лучше использовать RAMDISK для хранения ввода перед подачей на сортировку?
3 ответа
Вы можете указать временный каталог как несуществующий и изменить параметр размера основной памяти. Это, однако, приведет к сбою сортировки, если у вас недостаточно памяти:
$ 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
является кБ (см. Комментарий ниже).
Читать сторону
За исключением очень нестандартных файловых систем, весь 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 /действительно поднимает бремя очистки, повышает производительность и поддерживает твердотельные накопители в исправном состоянии.
Если какой-либо временный каталог "sort" поддерживает "отложенное выделение" - например, ext4 или xfs, то он все равно сделает это!
Если ядро решит, что памяти достаточно, ему не нужно записывать данные на диск; если сортировка происходит достаточно быстро, и ядро не записывает данные на диск, тогда файлы удаляются, они будут выброшены и забыты без каких-либо записей.