自从我买了固态硬盘 (Crucial M4 - 256gb) 后,我就遇到了一个问题,就是每当它处理小文件时,写入速度就会像在 486 上运行 Windows 7 一样慢。我设法通过安装英特尔快速存储技术驱动程序/服务在 Windows 7 中“修复”了这个问题。
但是,在 Linux(运行 Ubuntu 13.04)中似乎没有适用于此的驱动程序。我尝试了很多不同的解决方案,但到目前为止似乎都没有奏效。
我的 SSD 分区为单个 EXT4 分区,挂载为 /。我有一个单独的 2TB 硬盘,挂载在 /home 上
以下是我获取的有关块大小的一些信息:
# sudo blockdev --getbsz /dev/sda
> 4096
# sudo hdparm -I /dev/sda | grep -i physical
> Physical Sector size: 512 bytes
我的 SSD 的 fstab 条目如下所示:
UUID=c954288b-e1bd-4d3b-93ab-6a688210d070 / ext4 errors=remount-ro,relatime,barrier=0,noatime,nodiratime,discard,commit=120 0 1
从选项中可以看出,我尝试了很多方法,但似乎都没有奏效。举个例子:使用“apt-get install vim”安装 ViM 花了 2 分钟多。
完整的 apt-get dist-upgrade 耗时超过 4 个半小时。我一直在普通硬盘 (5200 rpm) 上运行 Ubuntu,速度比这快得多。
根据 parted,我的分区已正确对齐。我使用以下命令进行了检查:
# sudo parted /dev/sda
<parted> align-check opt
partition: 1
> aligned 1
此外,每当 SSD “忙” 时运行 iotop 时,我看到 jbd2 不停地消耗大约 99% 到 100% 的时间。
如果有人能阐明这个问题,那就太棒了!
编辑:一些额外的信息:
运行 hdparm -t /dev/sda 得到以下输出(对我来说看起来完全没问题)
Timing buffered disk reads: 680 MB in 3.01 seconds = 226.16 MB/sec
空闲时iotop输出:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
2346 be/4 harold 0.00 B/s 31.04 K/s 0.00 % 0.00 % chrome
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
7 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u:0H]
有时在运行应用程序或其他繁重工作的安装时,此进程“jbd2”会占用所有资源,而实际运行的应用程序(例如 mysqld 更新一些数据库相关的东西或 apt-get 安装或更新软件,保持在 3~4% 左右)
奇怪的是,有时它工作得很好(我曾尝试重现该问题以在此处发布结果,但显然它是随机发生的)。我将在下面用再次出错时的结果更新 iotop 的输出。
我感觉我的电脑现在正在捉弄我 :(
编辑2:忘记添加一些额外内容(感谢 Craig Watson)
我的 /etc/rc.local 文件的内容如下:
echo deadline > /sys/block/sda/queue/scheduler
fstrim -v /
exit 0
在 /etc/default/grub 中,我得到:
GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline"
第一次尝试调度程序后,我还添加了 fstrim 部分,因为仅使用调度程序仍然没有获得任何好的结果。
提前致谢。
哈罗德。
答案1
尝试更改你的 I/O 调度程序:
sudo echo deadline > /sys/block/sda/queue/scheduler
然后将其添加到 Grub 默认值,以便它在启动时加载:
sudo nano /etc/default/grub
改成GRUB_CMDLINE_LINUX_DEFAULT
:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"
然后运行:sudo update-grub2
还要检查您的 RAM 使用情况 - 您可能正在交换到 SSD,这(从长远来看)可能会产生不良影响。如果您有足够的 RAM,您可以将 swappiness 设置为零,这样除非您的 RAM 完全用完,否则不会使用 RAM:
sudo echo 0 > /proc/sys/vm/swappiness
参考:http://apcmag.com/how-to-maximise-ssd-performance-with-linux.htm