Linux ã®ãã¼ã¸ãã£ãã·ã¥
ä¸éã§ã¯ PHP ããPerl ããã¨çãä¸ãã£ã¦ããããã§ãã空æ°ãèªã¾ãã¾ãã«ã¼ãã«ã®è©±ã§ããä»åã¯ãã¼ã¸ãã£ãã·ã¥ã«ã¤ãã¦ã
/dev/shm に参照系DBを持っていくと I/O 負荷が激減した件(当たり前だけど) - drk7jp ã§ããã£ã¹ã¯ä¸ã«ãã£ããã¡ã¤ã«ã /dev/shm (tmpfs) ã«ç§»ããã I/O å¾ ã¡ããªããªã£ã¦è² è·ãããã£ããã¨ãããã¨ãªãã§ãããããããã㯠tmpfs ã«ç½®ãå¿ è¦ã¯ãªãããªã¨æãã¾ããLinux (ã«éããä»ã® OS ãããã§ãã) ã«ã¯ãã£ã¹ã¯ã®å 容ãä¸åº¦èªãã ãããã¯ã«ã¼ãã«ããã£ãã·ã¥ãã¦ãäºåº¦ç®ä»¥éã¯ã¡ã¢ãªããèªãæ©æ§ = ãã¼ã¸ãã£ãã·ã¥ãããã¾ããtmpfs ã«ãã¼ã¿ãè¼ãããã¨ãã§ãããã¨ãããã¨ã¯ç©çã¡ã¢ãªã®å®¹éã«åã¾ãã ãã®ãã¼ã¿ãµã¤ãºãã¨æãã®ã§ãæ¾ã£ã¦ããã°è©²å½ã®ãã¡ã¤ã«ã®å 容ãã¹ã¦ãã¡ã¢ãªä¸ã«ãã£ãã·ã¥ãã㦠iowait ã¯ãªããªãã¨æãã¾ãã
(ã¨ãããã¯åãããã¶ãé·ããã¨è²ã åéããã¦ã話ãªãã§ãããYAPC 㧠MySQL ã®ãã¼ã¿ã tmpfs ã«ç½®ãããããããã¨è¨ã£ãã insane ã¨ãããããã ãã©å¤åãããããã¨ãªãã ããã)
â» ãã以é㯠read ã主ä½ã«è°è«ãã¦ããã¾ãã
ã¾ãå ã«è²ã ãã¼ã¿ã®æ¹ããããã¼ã¸ãã£ãã·ã¥ãåãã§ã¡ã¢ãªã«è¼ãã° I/O æ§è½ã¯è½ã¡ãªããã®ä»¶ããã³ããã¼ã¯ã§ã
#!/usr/local/bin/perl use strict; use warnings; use Benchmark; use IO::File; Benchmark::timethese(10000, { page_cache => read_from('/home/naoya/tmp/httpd'), tmpfs => read_from('/mnt/tmpfs/httpd'), }); sub read_from { my $path = shift; return sub { my $fh = IO::File->new($path) or die $!; while (my $nread = $fh->sysread(my $buffer, 8192)) {} $fh->close; } }
é©å½ãªãã¡ã¤ã«ãµã¤ãºã®ãã¡ã¤ã«ããtmpfs ã¨ãã¼ããã£ã¹ã¯ä¸ã®ãã¡ã¤ã«ã·ã¹ãã (ext3) ã«ããããåããã®ãç½®ãã¦ã10,000åã²ããã read ãã¦ã¿ã¾ããæãããªãµã¤ãºã®ãã¡ã¤ã«ã¨ãããã¨ã§ Apache ã®ãã¤ã㪠1.5MB ãã³ãã¼ãã¦ããã¾ããã
Benchmark: timing 10000 iterations of page_cache, tmpfs... page_cache: 7 wallclock secs ( 1.57 usr + 5.86 sys = 7.43 CPU) @ 1345.90/s (n=10000) tmpfs: 8 wallclock secs ( 4.79 usr + 2.46 sys = 7.25 CPU) @ 1379.31/s (n=10000)
å¤ããã¾ãããã(tmpfs ã«ããã¨ã¦ã¼ã¶ã¼ç©ºéã§ã®ããã»ããµæ¶è²»æéãé·ãã®ã¯ãªãã§ã§ãããã)
ä»ã«ããã¼ã¿ããããã¯ã¯ã¦ãªã§ä½¿ã£ã¦ãã¨ãã MySQL ãµã¼ãã¼ã®ãã¼ã¿ã§ããã ããããã¼ã¿ãã¼ã¹ã®ãã¼ã¿ãã¤ã³ããã¯ã¹å«ãåè¨ 8GB å¼·ãããµã¼ãã¼ã§ãã¡ã¢ãª 4GB æè¼ã§éç¨ãã¦ããã¨ãããã¼ã¿ã¯ãã£ã¹ã¯ä¸ (RAID 0)ã«ç½®ãã¦ã¾ãã
14:10:01 CPU %user %nice %system %iowait %idle 14:20:01 all 8.58 0.00 5.84 16.58 69.00 14:30:01 all 7.41 0.00 5.14 17.81 69.63 14:40:01 all 7.74 0.00 4.97 18.56 68.73 14:50:01 all 7.02 0.00 5.01 16.24 71.72
iowait ãçµæ§ããã¾ãããå¾æ¥ã«ãã®ãµã¼ãã¼ã«ã¡ã¢ãªã追å ã㦠8GB ã«ãã¾ããã
14:10:01 CPU %user %nice %system %iowait %idle 14:10:01 all 18.16 0.00 11.56 0.80 69.49 14:20:01 all 12.48 0.00 9.47 0.88 77.17 14:30:01 all 14.20 0.00 10.17 0.91 74.72 14:40:01 all 13.25 0.00 9.74 0.75 76.25
ã¨ãiowait ãã»ã¼ãªããªãã¾ããããã£ã¹ã¯I/Oãããã«ããã¯ã ã£ãã®ã解æ¶ãããå½±é¿ã§ãã¹ã«ã¼ããããä¸ãã£ã¦ CPU ã®æ¹ã«è² è·ãããã£ã¦ãã¾ããçæ³çãªç¶æ ã§ããã¡ã¢ãªã足ããã ãã§I/Oå¾ ã¡ã解æ¶ã§ããã®ã¯ããã¼ã¸ãã£ãã·ã¥åã®ã¡ã¢ãªã確ä¿ã§ããããããã¼ã¿ãµã¤ãºã 8GB å¼·ãªã®ã§ãç©çã¡ã¢ãªã 8GB è¼ããã¨ã ãããã»ã¨ãã©ã®ãã¼ã¿ããã£ãã·ã¥ã§ããã®ã§ãã®ãããå¹æãã¯ã£ããåºã¾ãã
ã¨ãããã¨ã§ãã¼ã¿ãµã¤ãºãè¦ã¦ãã¼ã¸ãã£ãã·ã¥ã«ä»»ããããããªãµã¤ãºãªã OS ã«ä»»ãã¦ããã®ãè¯ãããããªãããªã¨æãã¾ãã
ããã§å°ãããã¡ãã
Linux ã®ãã£ã¹ã¯ãã£ãã·ã¥ãããã¼ã¸ãã£ãã·ã¥ãã¨å¼ã°ããã®ã¯ããã£ãã·ã¥ã®åä½ããã¼ã¸ã ããã§ãããã¼ã¸ã¨ããã®ã¯ Linux ã®ä»®æ³ã¡ã¢ãªã®æå°åä½ãã¤ã¾ãä½ãããã®ãã¼ã¿ãã¡ã¢ãªã«åå¨ããã¨ãããã®ã¡ã¢ãªé åãã«ã¼ãã«ãæ±ãã¨ãã®æå°åä½ã§ãããã£ã¹ã¯ã®å 容ããã£ãã·ã¥ããå ´åããã¡ã¤ã«ã丸ãã¨ãã£ãã·ã¥ãããããã®ã§ã¯ãªãiãã¼ãçªå·ã¨ãã¡ã¤ã«ã®ãªãã»ããããã¼ã«ãã¦ãã¼ã¸åä½ã§ãã£ãã·ã¥ãã¾ãã
å¾ã§æ·±è¿½ããã¾ãããã¼ã¸ãã£ãã·ã¥ã¯ ext3 ãªã©ã®ãã¡ã¤ã«ã·ã¹ãã ã使ãå ´åã(Direct I/O æ以å¤) read / write ã«å¯¾ãã¦å¸¸ã«ééçã«åãã¾ããã¾ããããåç §é »åº¦ã®é«ããã¼ã¸ããã£ãã·ã¥ã«æ®ãããã«åãã¾ããå¾ã£ã¦ãOS ãç«ã¡ä¸ãã¦æ¾ã£ã¦ããã°ä¸åº¦èªãã ãã£ã¹ã¯ä¸ã®é åã¯å¾ã ã«ãã£ãã·ã¥ããã¦ãã£ã¦ãæé©åããã¦ããã¾ãã
ã¨ãããã¨ã¯ãOS ãåèµ·åããã°ã¡ã¢ãªã®å 容ã¨ä¸ç·ã«æé©åããããã£ãã·ã¥ã¯ãã¹ã¦ã¯ãªã¢ããã¦ãã¾ããã巨大ãªãã¡ã¤ã«ãå ¥åºåãã¦ã¡ã¢ãªã«ç©ºãããªããã°ãå¤ããã£ãã·ã¥ã¯è¿½ãåºããã¦ãã¾ããã¨ã«ãªãã¾ãã
MySQL ãåãã¦ããµã¼ãã¼ãã¡ã³ããã³ã¹ã§åèµ·åãããããããã¯ããã¯ã¢ããã§ãã¼ã¿ãç·ãªãããå¾ã«ãã稼åãããã¨ãI/O å¾ ã¡ãçºçãã¦ã¹ã«ã¼ããããåºãªããã¨ãããããã¾ããããã¯ãã¼ã¸ãã£ãã·ã¥ãå¹ãã¦ãªãç¶æ ã§ãµã¼ãã稼åãã¦ããã®ã§ãã¡ã¢ãªã§ãªã I/O ããã£ã¹ã¯ã«å¯¾ãã¦è¡ãããããã§ãããããåé¿ããããã«ã主è¦ãªãã¼ã¿ãã¡ã¤ã«ã¯ããããã read ãã¦ããã¨è¨ãæãããã¾ãã
èªåã®å ´å
#!/usr/bin/perl use strict; use warnings; use IO::File; use File::Basename qw/basename/; for my $file (@ARGV) { my $fh = IO::File->new($file, "r") or die $!; my $size = 0; printf STDERR "%s: ", $file; while (my $nread = $fh->sysread(my $buffer, 8192)) { $size += $nread; my $line = sprintf "%d bytes read", $size; print STDERR $line, "\b" x length $line; } print "\n"; }
ã¨ãããã¡ã¤ã«ã read ãã¦é²æãç»é¢ã«è¡¨ç¤ºããã ãã® Perl ã¹ã¯ãªãããã§ã£ã¡ããã¦ãMySQL ã®ãã¼ã¿ãæ ¼ç´ããã¦ãããã£ã¬ã¯ããªã§ãã®ã¹ã¯ãªãããå®è¡ãã¦å ¨ãã¼ã¿ãèªãã§ãã mysqld ãç«ã¡ä¸ãã¦ãã¾ããå¤å cat ã㦠/dev/null ã§ãããã¨æãã¾ãã
ã«ã¼ãã«ãã©ã®ãããã®ãã¼ã¸ããã£ãã·ã¥ãã¦ãããã¯ãsar -r ãããã°åããã¾ãã
18:20:01 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 18:30:01 3566992 157272 4.22 11224 50136 2048276 0 0.00 0 18:40:01 3546264 178000 4.78 12752 66548 2048276 0 0.00 0 18:50:01 112628 3611636 96.98 4312 3499144 2048232 44 0.00 44
sar -r ã® kbcached é ã§ããã¾ã %memused ã¯ç©çã¡ã¢ãªããã¼ã¸ãã£ãã·ã¥è¾¼ã¿ã§ã©ãããã使ããã¦ãããã示ãæ°å¤ãä¸è¨ã¯ã¨ãããµã¼ãã¼ã®åèµ·åç´å¾ã18:40 ã 18:50 ã®éã«å ã®ã¹ã¯ãªãããå®è¡ãã¦ãã¼ã¿ãå ¨é¨ read ãã¾ãããã¡ã¢ãªã 4.22 % ã¨ã»ã¨ãã©ä½¿ããã¦ããªãç¶æ ããä¸æ°ã« 96.98 % ã¾ã§ä½¿ãããã®ãåããã¾ããã¾ã kbcached ã«ä½¿ãããã¡ã¢ãªãåã£ã¦ããã®ãåããã¾ãã
Linux ã¯ã¡ã¢ãªã«ç©ºããããéããã¼ã¸ãã£ãã·ã¥ã«ãã£ãã·ã¥ãèãç¶ãã¾ããä»ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¡ã¢ãªãå¿ è¦ã«ãªãã¨ãã¼ã¸ãã£ãã·ã¥ã¯åªå çã«éæ¾ããã¾ããã®ã§ %memused ã 96.98% ã ã¨ã空ãã¡ã¢ãªããªã!ãã¨ä¸è¦ã³ã£ãããã¦ãã¾ãã¾ããå ¨ãåé¡ããã¾ããã
深追ã
ãã¦ããã£ãããªã®ã§ã¾ã深追ããã¦ã¿ã¾ãããã¼ã¸ãã£ãã·ã¥ã®å¦çã¯ã©ãã§å®è£ ããã¦ãããããç¥ããã®ã³ã¼ãã¼ã§ãã
read(2) ã®å¦çãå®è£ ãã¦ããã§ãããç®æãã¤ã¾ããã¡ã¤ã«ã·ã¹ãã å¨ãã®ã³ã¼ããè¦ãã°ããããã§ããããã¡ã¤ã«ã·ã¹ãã é¢é£ã¯å¹¾ã¤ãã®ã¬ã¤ã¤ã«åãããæ§é ã«ãªã£ã¦ããã®ã§ãªããªãè¤éã§ãã
èã«ãªãã®ã¯ä»®æ³ãã¡ã¤ã«ã·ã¹ãã ã§ããVFS ã«é¢ãã¦ã¯ VFSとファイルシステムの基礎技術 (1/2):Linuxファイルシステム技術解説(1) - @IT ããããæ¦è¦ãã¤ããã®ã«ããããããã¨æãã¾ãã
Linux 㯠ext3ãtmpfsãreiserfsãxfsãvfat ... ã¨å¤æ°ã®ãã¡ã¤ã«ã·ã¹ãã ãæ±ããã¨ãã§ãã¾ããããããç¹å¾´ãæã£ãç°ãªããã¡ã¤ã«ã·ã¹ãã ãªã®ã§å½ç¶ãããã®å®è£ ã¯ãã¨ãªãããã§ãããåå®è£ ãã¨ã«ããã°ã©ã ã¤ã³ã¿ãã§ã¼ã¹ãç°ãªã£ã¦ããã¨ãã³ã¼ããæ¸ãã¦ãã人ãå°ã£ã¦ãã¾ãã¾ããããã§ãã¡ã¤ã«ã·ã¹ãã ã®å®è£ ãé è½ããã®ãä»®æ³ãã¡ã¤ã«ã·ã¹ãã ã§ããã¾ããã®æ½è±¡åããããã¡ã¤ã«ã·ã¹ãã ã¯ãããã¯åããã¤ã¹ãæ½è±¡åãããã®ã¨è¨ãã¾ãã
- ä»®æ³ãã¡ã¤ã«ã·ã¹ãã (VFS)
- ãã¡ã¤ã«ã·ã¹ãã ã®å®è£
- ãããã¯åããã¤ã¹å ±éã¬ã¤ã¤
- ãããã¯åããã¤ã¹ (ããã¤ã¹ãã©ã¤ã)
- ç©çããã¤ã¹
ã¨å¤å±¤ã®é¢ä¿ã«ãªã£ã¦ããããã§ãããã¹ã¦ã®ãã¡ã¤ã«ã·ã¹ãã ã¸ã®å½ä»¤ã¯ VFS ãçµç±ãã¦ããããã®å®è£ ã¸å°éãã¾ããVFS ã¯ã¤ã³ã¿ãã§ã¼ã¹ãæ½è±¡åããã ãã§ãªããåãã¡ã¤ã«ã·ã¹ãã ã«å ±éã®æç¶ããæä¾ãããããã¼ã¸ãã£ãã·ã¥ã®ãããªæ§è½ãåä¸ãããæ©è½ãªã©ãæä¾ãã¾ãã
ããã¾ã§èªãã§ãã³ã¨æ¥ãæ¹ã¯å¤ãã¨æãã¾ãããè¦ã¯ã¤ã³ã¿ãã§ã¼ã¹/æ½è±¡ã¯ã©ã¹ã¨ãã®å®è£ ã®é¢ä¿ã«ãªã£ã¦ãããã§ãããã§ããã®æ½è±¡ã¬ã¤ã¤ããå®éã®å®è£ ã®å¦çãèµ·åãããã¾ã§ã®ä¸é£ã®æµããé¢ç½ãã
㯠VFS ã®ã¤ã³ã¿ãã§ã¼ã¹ã«åããã¦ç°¡æãªãã¡ã¤ã«ã·ã¹ãã ãä½ãã¨ããè¨äºã§ãããããã¨ã¦ãåãããããã®ã§èå³ã®ããæ¹ã¯æ¯éãä¸èªãã
...ããã¾ã§æ¸ãã¦ç²ããã以ä¸ã¯æ°åããã£ãããã¨ã§æ¸ãã¾ãã
fs/read_write.c
const struct file_operations generic_ro_fops = { .llseek = generic_file_llseek, .read = do_sync_read, .aio_read = generic_file_aio_read, .mmap = generic_file_readonly_mmap, .sendfile = generic_file_sendfile, };
read ãé常ã®åæ read æãaio_read ã¯éåæI/O (AIO) API ã§å¼ã°ããã¨ãã
fs/ext3/file.c
const struct file_operations ext3_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, // â fs/read_write.c .write = do_sync_write, .aio_read = generic_file_aio_read, // â mm/filemap.c .aio_write = ext3_file_write, .ioctl = ext3_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = ext3_compat_ioctl, #endif .mmap = generic_file_mmap, .open = generic_file_open, .release = ext3_release_file, .fsync = ext3_sync_file, .sendfile = generic_file_sendfile, .splice_read = generic_file_splice_read, .splice_write = generic_file_splice_write, };
ext3 㯠VFS ãæä¾ããã¸ã§ããªãã¯ãªãread ã使ããwrite 㯠ext3 åºæå®è£ ã
fs/ext3/inode.c ext3_read_inode(struct inode * inode)
if (S_ISREG(inode->i_mode)) { inode->i_op = &ext3_file_inode_operations; inode->i_fop = &ext3_file_operations; ext3_set_aops(inode); } else if (S_ISDIR(inode->i_mode)) { inode->i_op = &ext3_dir_inode_operations; inode->i_fop = &ext3_dir_operations; } else if (S_ISLNK(inode->i_mode)) { if (ext3_inode_is_fast_symlink(inode)) inode->i_op = &ext3_fast_symlink_inode_operations; else { inode->i_op = &ext3_symlink_inode_operations; ext3_set_aops(inode); } } else { inode->i_op = &ext3_special_inode_operations; if (raw_inode->i_block[0]) init_special_inode(inode, inode->i_mode, old_decode_dev(le32_to_cpu(raw_inode->i_block[0]))); else init_special_inode(inode, inode->i_mode, new_decode_dev(le32_to_cpu(raw_inode->i_block[1]))); }
iãã¼ããªãã¸ã§ã¯ããæ¢ããã¦ãå¾ãiãã¼ããªãã¸ã§ã¯ãã®ç¨®é¡ã«åãã㦠file_operations æ§é ä½ãå¤ã㦠inode->i_op / i_fop ã«ä»£å ¥ãã¦ãããããã«ãã£ã¦iãã¼ããªãã¸ã§ã¯ãã§ãããªã¢ãã£ãºã ã
tmpfs ã®å®è£ 㯠mm/shmem.c ã«ããã
static struct file_system_type tmpfs_fs_type = { .owner = THIS_MODULE, .name = "tmpfs", .get_sb = shmem_get_sb, .kill_sb = kill_litter_super, };
ããã super_block æ§é ä½ã«ã»ããããããã¡ã¤ã«ã·ã¹ãã ã¿ã¤ãã®è¨å®ã
mm/shmem.c
static const struct file_operations shmem_file_operations = { .mmap = shmem_mmap, #ifdef CONFIG_TMPFS .llseek = generic_file_llseek, .read = shmem_file_read, .write = shmem_file_write, .fsync = simple_sync_file, .sendfile = shmem_file_sendfile, #endif };
tmpfs 㯠read / write ã¨ãã«ç¬èªå®è£ ãVFS 層㮠read (generic_file_aio_read()) ã¯ä½¿ããªããshmem_file_read() 㯠do_shmem_file_read() ã¸ã¤ãªãããdo_shmem_file_read() ã§ã¯ãã¼ã¸ãã¢ããªã±ã¼ã·ã§ã³ãããã¡ã«ã³ãã¼ãããããã§æ¯åãã¼ã¸ãã£ãã·ã¥ãéæ¾ãã¦ãã? /dev/shm ã¨ãã¼ã¸ãã£ãã·ã¥ã§äºéã«ãã¼ã¿ãæã¤ã®ãé¿ãããã? ãããã¯ã£ããããªãã
ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) { struct iovec iov = { .iov_base = buf, .iov_len = len }; struct kiocb kiocb; ssize_t ret; init_sync_kiocb(&kiocb, filp); kiocb.ki_pos = *ppos; kiocb.ki_left = len; for (;;) { ret = filp->f_op->aio_read(&kiocb, &iov, 1, kiocb.ki_pos); if (ret != -EIOCBRETRY) break; wait_on_retry_sync_kiocb(&kiocb); } if (-EIOCBQUEUED == ret) ret = wait_on_sync_kiocb(&kiocb); *ppos = kiocb.ki_pos; return ret; }
ã¸ã§ããªãã¯ãª read ç¨ã³ã¼ã«ããã¯ã§ãã do_sync_read 㯠flip->f_op->aio_read ãä¸ã§å¼ãã§ããã¤ã¾ãéåæI/Oã®é¢æ°ãã©ãããã¦ãwait ãã¦åæ I/O ã®å®è£ ã¨ãã¦ãããDon't Repeat Yourselfã
ã§ãgeneric_file_aio_read() ã追ã£ã¦ãã㨠do_generic_mapping_read() ã«ãã©ãçããããã§ãã¼ã¸ãã£ãã·ã¥ã¨ãã£ã¹ã¯å 容ã®ãããã³ã°ãè¡ãããã
- page æ§é ä½ã® mapping ã¡ã³ã㯠address_space æ§é ä½ããã¤ã³ã¿ãã
- address_space æ§é ä½ã¯ iãã¼ããªãã¸ã§ã¯ã㨠1:1 â iãã¼ããªãã¸ã§ã¯ãã¯i ãã¼ãçªå·ãç¥ã£ã¦ãã
- page æ§é ä½ã¯ãã¡ã¤ã«ã®ãªãã»ãããç¥ã£ã¦ãã
- â´ page æ§é ä½ããiãã¼ãçªå·ããªãã»ããã«ãã©ãçãããã®äºã¤ã®æ å ±ãã¤ã³ããã¯ã¹ã«ãã¦ãã£ãã·ã¥ããã = ãã¼ã¸åä½ã§ã®ãã£ãã·ã¥
- address_space æ§é ä½ â page 㯠Radix Treeããã¡ã¤ã«ã®å¤§ããã¯ãã£ãã·ã¥ã®æ¤ç´¢æ§è½ã«ã»ã¨ãã©å½±é¿ãä¸ããªã
ã¾ã¨ã
- Linux ã¯ã¡ã¢ãªãããéããã¼ã¸åä½ã§ãããã¯åããã¤ã¹ã®å ¥åºåããã£ãã·ã¥ãã
- I/O ã¯ãã¼ã¸ãã£ãã·ã¥ã«ä»»ããã
- ãã¼ã¸ãã£ãã·ã¥ã®ç¶æ 㯠sar -r ã§ç¢ºèªã§ãã
- DB ã¯ã¡ã¢ãªã«ãã£ãããããã (http://d.hatena.ne.jp/stanaka/20070427/1177651323)
- ãã¼ã¸ãã£ãã·ã¥ãã¯ãªã¢ããã¦ãã¾ã£ãã read ãã¦ãã£ãã·ã¥ã«è¼ããã
- VFS å¨ãã®å®è£ ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ã³ã¼ã«ããã¯ãç»é²ãã¦ããå®è£ ã«ãªã£ã¦ãã
- tmpfs 㯠read / write ã tmpfs ç¨ã«å®è£ ããã¦ãããI/Oã«ä¼´ããã¼ã¸ãã£ãã·ã¥ã®æ±ããé常ã¨éãã
- tmpfs ã¯ã¹ã¯ããã¢ã¦ããããã®ã§ãã©ããã¦ãåªå çã«ã¡ã¢ãªã«è¼ãã¦ãããããã¼ã¿ã¯ ramfs ããããããããªã (æªæ¤è¨¼)