Linux ×Ô¼ìºÍ SystemTap
SystemTap ÊÇ¼à¿ØºÍ¸ú×ÙÔËÐÐÖÐµÄ Linux Äں˵IJÙ×÷µÄ¶¯Ì¬·½·¨¡£Õâ¾ä»°µÄ¹Ø¼ü´ÊÊǶ¯Ì¬£¬ÒòΪ SystemTap ûÓÐʹÓù¤¾ß¹¹½¨Ò»¸öÌØÊâµÄÄںˣ¬¶øÊÇÔÊÐíÄúÔÚÔËÐÐʱ¶¯Ì¬µØ°²×°¸Ã¹¤¾ß¡£Ëüͨ¹ýÒ»¸öÃûΪKprobes µÄÓ¦Óñà³Ì½Ó¿Ú£¨API£©À´ÊµÏÖ¸ÃÄ¿µÄ£¬±¾ÎĽ«Ì½Ë÷Õâ¸ö API¡£ÎÒÃÇÊ×ÏÈÁ˽âÒÔǰµÄһЩÄں˸ú×Ù·½·¨£¬È»ºóÔÚÉîÈë̽ÌÖ SystemTap µÄ¼Ü¹¹¼°ÆäʹÓá£
Äں˸ú×Ù
SystemTap ÓëÒ»ÖÖÃûΪ DTrace µÄÀϼ¼ÊõÏàËÆ£¬¸Ã¼¼ÊõÔ´ÓÚ Sun Solaris ²Ù×÷ϵͳ¡£ÔÚ DTrace ÖУ¬¿ª·¢ÈËÔ±¿ÉÒÔÓà D ±à³ÌÓïÑÔ£¨C ÓïÑÔµÄ×Ó¼¯£¬µ«ÐÞ¸ÄΪ֧³Ö¸ú×ÙÐÐΪ£©±àд½Å±¾¡£DTrace ½Å±¾°üº¬Ðí¶à̽ÕëºÍÏà¹ØÁªµÄ²Ù×÷£¬ÕâЩ²Ù×÷ÔÚ̽Õë “´¥·¢” ʱ·¢Éú¡£ÀýÈ磬̽Õë¿ÉÒÔ±íʾ¼òµ¥µÄϵͳµ÷Óã¬Ò²¿ÉÒÔ±íʾ¸ü¼Ó¸´ÔӵĽ»»¥£¬±ÈÈçÖ´ÐÐÌØ¶¨µÄ´úÂëÐС£Çåµ¥ 1 ÏÔʾÁË DTrace ½Å±¾µÄÒ»¸ö¼òµ¥Àý×Ó£¬Ëü¼ÆËãÿ¸ö½ø³Ì·¢³öµÄϵͳµ÷ÓõÄÊýÁ¿£¨×¢Ò⣬ʹÓÃ×ֵ佫¼ÆÊýºÍ½ø³Ì¹ØÁªÆðÀ´£©¡£¸Ã½Å±¾µÄ¸ñʽ°üº¬Ì½Õ루ÔÚ·¢³öϵͳµ÷ÓÃʱ´¥·¢£©ºÍ²Ù×÷£¨¶ÔÓ¦µÄ²Ù×÷½Å±¾£©¡£
Çåµ¥ 1. ¼ÆËãÿ¸ö½ø³ÌµÄϵͳµ÷Óõļòµ¥ DTrace ½Å±¾
syscall:::entry
{
@num[pid,execname] = count();
}
DTrace ÊÇ Solaris ×îÒýÈËעĿµÄ²¿·Ö£¬ËùÒÔÔÚÆäËû²Ù×÷ϵͳÖпª·¢Ëü²¢²»Ææ¹Ö¡£DTrace ÊÇÔÚ Common Development and Distribution License (CDDL) ֮Ϸ¢Ðе쬲¢ÇÒ±»ÒÆÖ²µ½ FreeBSD ²Ù×÷ϵͳÖС£
ÁíÒ»¸ö·Ç³£ÓÐÓõÄÄں˸ú×Ù¹¤¾ßÊÇ ProbeVue£¬ËüÊÇ IBM Ϊ IBM® AIX® ²Ù×÷ϵͳ 6.1 ¿ª·¢µÄ¡£Äú¿ÉÒÔʹÓà ProbeVue ̽²éϵͳµÄÐÐΪºÍÐÔÄÜ£¬ÒÔ¼°Ìá¹©ÌØ¶¨½ø³ÌµÄÏêϸÐÅÏ¢¡£Õâ¸ö¹¤¾ßʹÓÃÒ»¸ö±ê×¼µÄÄÚºËÒÔ¶¯Ì¬µÄ·½Ê½½øÐиú×Ù¡£Çåµ¥ 2 ÏÔʾÁË ProbeVue ½Å±¾µÄÒ»¸öÀý×Ó£¬ËüÖ¸³ö·¢³ö sync ϵͳµ÷ÓõÄÌØ¶¨½ø³Ì¡£
Çåµ¥ 2. Ö¸³öÄĸö½ø³Ìµ÷Óà sync µÄ¼òµ¥ ProbeVue ½Å±¾
@@syscall:*:sync:entry
{
printf( "sync() syscall invoked
Ïà¹ØÎĵµ£º
1.ÏÂÔØlinux kernelÔ´´úÂë
µ½http://www.kernel.org/ÏÂÔØlinuxÄÚºËÔ´´úÂë,ÕâÀïÎÒÃÇʹÓÃ2.6.24.4µÄÄÚºË.
½âѹlinux-2.6.24.4.tar.bz2
[matt@localhost GEC2410]$ tar -xvjf linux-2.6.24.4.tar.bz2
[matt@localhost GEC2410]$ cd linux-2.6.24.4
2.ÐÞ¸ÄMakefile,ÉèÖý»²æ±àÒëÆ÷
ARCH ?= arm
CROSS_COMPILE ......
Linuxϵͳµ÷ÓÃ-- unlinkº¯ÊýÏê½â
¹¦ÄÜÃèÊö£º
´ÓÎļþϵͳÖÐɾ³ýÒ»¸öÃû³Æ¡£Èç¹ûÃû³ÆÊÇÎļþµÄ×îºóÒ»¸öÁ¬½Ó£¬²¢ÇÒûÓÐÆäËü½ø³Ì½«Îļþ´ò¿ª£¬Ãû³Æ¶ÔÓ¦µÄÎļþ»áʵ¼Ê±»É¾³ý¡£
Ó÷¨£º
#include
int unlink(const char *pathname);
²ÎÊý£º
pathname£ºÖ¸ÏòÐè½â³ýÁ¬½ÓµÄÎļþÃû¡£
·µ»ØËµÃ÷£º
³É¹¦Ö´ÐÐʱ£¬·µ»Ø0¡£Ê§°Ü· ......
ÒòΪ¹«Ë¾µÄ°å×ÓÉϼüÅ̲»ºÃ°´£¬ËùÒÔд¸öÍøÂç°æµÄ£¬·½±ãµ÷ÊÔ¡£
client .c
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#inclu ......
LinuxÎļþϵͳÉè¼ÆÁËÈýÀàµÄCacheÒÔÓÃÀ´Ö§³Ö¶àÀàÐ͵ÄÎļþϵͳ¡£
Ò»¡¢ VFSË÷Òý½Úµã»º´æ Inode Cache
VFSË÷Òý½ÚµãÊÇÒ»¸öHash±í£¬Ëü²»¶ÏµØ¶ÁÈ¡¡£VFSÌṩµÄË÷Òý½Úµã»º´æ¿ÉÒÔ¼Ó¿ì¶ÔÎļþϵͳµÄ´æÈ¡¡£Ã¿´Î´ÓË÷Òý½Úµã»º´æÖжÁȡһ¸öVFSË÷Òý½Úµã£¬ÕâÑùϵͳ¾Í¿ÉÒÔ½ÚÊ¡¶ÁÈ¡ÎïÀíÉ豸µÄ´æÈ¡Ê ......
Ìî¿Õ²¿·Ö
1
ÔÚlinux
ϵͳÖУ¬ÒÔÎļþ
µÄ·½Ê½·ÃÎÊÉ豸¡£
2 linux
ÄÚºËÒýµ¼Ê±£¬Í¨¹ý/etc/fstab
Îļþ¶ÁȡҪ¼ÓÔØµÄÎļþϵͳ
3 linux
ÎļþϵͳÖпÉÒÔÓÐÁ½ÖÖ·½Ê½±êʶÎļþÀàÐÍ£¬µÚÒ» ÖÖʹÓÃÑÕÉ«
À´±êʶ£¬°×É«±íʾһ°ãÐÔµÄÎļþ£¬ÈçÎı¾Îļþ¡¢ÅäÖÃÎļþ¡¢Ô´´úÂëÎļþµÈ£»Ç³ À¶É«µÄ±íʾÁ¬½ÓÎļþ£¬Ö»ÒªÊÇʹÓÃln
ÃüÁÁ¢µÄÎ ......