以åã®
äžé£ã®åºçç©ã§ã¯
ããã¹ããã·ã³ã®
æºåãä»®æ³ãã·ã³ã®äœæããã³
ã¯ããŒã³äœæã®åé¡ã«ã€ããŠæ€èšããŸããã ä»æ¥ã¯ãåæ§ã«éèŠãªåé¡ãã€ãŸãä»®æ³ãã·ã³ã«ãããªãœãŒã¹ã®äœ¿çšã®å¶éã«ã€ããŠã話ããŸãã
cgroupã®æŠèŠ
ä»®æ³ãã·ã³ã䜿çšãããªãœãŒã¹ãå¶éããã«ã¯ãLinuxã¹ã±ãžã¥ãŒãªã³ã°ã¿ã¹ã¯ã䜿çšããŠå¿
èŠãªå¶éãèšå®ããã«ãŒãã«ãµãã·ã¹ãã ã§ãã
cgroupsã䜿çšããããšããå§ãããŸãã
runetã§ã¯ã
cgroupsã®äœæ¥
ã¯å®éã«ã¯å€åœã®ã€ã³ã¿ãŒãããã§ã¯ã«ããŒãããŠããŸãããåºæ¬çã«ã
Daniel Berrangeã®èšäºãé€ããŠããã¹ãŠã¯æåãªãããã
é©ç°çãª
200è¡ã«ãŒãã«ããã ãã®èª¬æã«éå®ãããŸãã
ãã®èšäºã§ã¯ãä»®æ³ãã·ã³ã«é¢é£ããŠ
cgroupãæäœããããšãæ€èšããŸãããããã«ããããã®ãµãã·ã¹ãã ã䜿çšããŠéåžžã®ãã¹ã¯ãããã¿ã¹ã¯ãå®è¡ã§ããªããªãããã§ã¯ãããŸããã
åºæ¬çã«ã
cgroupsã¯/ sysãŸãã¯/ procã«äŒŒãéå±€ãã¡ã€ã«ã·ã¹ãã ã§ãããã«ãŒãã«å
ã®ãªãœãŒã¹ãå²ãåœãŠãå
éšã¡ã«ããºã ã«ã¢ã¯ã»ã¹ããããã®ã·ã³ãã«ãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã äŸã¯ããã®ãã¡ã€ã«ã·ã¹ãã ãäœã§ããããç解ããã®ã«åœ¹ç«ã¡ãŸããããŠã³ããã€ã³ããäœæããããã«2ã€ã®ã³ã³ãããŒã©ãŒ
cpuãš
blkioãããŠã³ãããŠã
äžèº«ã確èªããŸãã
# mkdir /cgroup
# mkdir /cgroup/cpu
# mkdir /cgroup/blkio
# mount -t cgroup -ocpu cgroup /cgroup/cpu
# mount -t cgroup -oblkio cgroup /cgroup/blkio
# ls /cgroup/cpu
cgroup.clone_children cgroup.event_control cgroup.procs cpu.rt_period_us cpu.rt_runtime_us cpu.shares notify_on_release release_agent sysdefault tasks
# ls /cgroup/blkio
blkio.io_merged blkio.io_service_time blkio.throttle.io_service_bytes blkio.throttle.write_bps_device blkio.weight_device tasks blkio.io_queued blkio.io_wait_time blkio.throttle.io_serviced blkio.throttle.write_iops_device cgroup.clone_children notify_on_release blkio.io_service_bytes
blkio.reset_stats blkio.throttle.read_bps_device blkio.time cgroup.event_control release_agent
blkio.io_serviced blkio.sectors blkio.throttle.read_iops_device blkio.weightcgroup.procs sysdefault
ããªãŒã®åãã©ã³ãã®
ã¿ã¹ã¯ãã¡ã€ã«ã«ã¯ãcgroupsã®ç¹å®ã®ã°ã«ãŒããä»ããŠå¶åŸ¡ãããããã»ã¹ã®PIDãå«ãŸããŠããŸãã ãããã£ãŠãããã»ã¹å¶éã®éå±€æ§é ãå®è£
ã§ããŸãã ã°ã«ãŒãå
ã®ãã¹ãŠã®ããã»ã¹ã«å¶éãé©çšãããããšã«æ³šæããŠãã ããã
CPUè² è·å¶é
ããã»ã¹ãå¶éããæ¹æ³ã«ã€ããŠå°ã説æããŸãã ããã¯éåžžã«ç°¡åã«å®è¡ã§ããŸãã
- cgroupã«å
¥ãããPIDãéžæããŸãã
- ã¿ã¹ã¯ã«å
¥ããŠãã ããã
- å¶éãèšå®ããŸãïŒããã»ã¹ã®éã¿ãå²ãåœãŠãä»»æã«èšå®ã§ããŸãããå€ã¯ãŒããã倧ãããªããã°ãªããŸããïŒã
# echo $$ > /cgroup/cpu/tasks
# echo 100 > /cgroup/cpu/cpu.shares
ããã§ã
100ã¯çŸåšã®bashããã»ã¹ã«å²ãåœãŠãããéã¿ã§ãã
ã¿ã¹ã¯ã«PIDãè¿œå ããæ©èœãããã€ããããŸãã ããšãã°ãäžåºŠã«ãã€ã³ãã§ããããã»ã¹ã¯1ã€
ã ãã§ããã€ãŸãã
ãšã³ãŒPID1 PID2 ...ã¯æ©èœããŸããã ããã«ããšã³ãŒã¯æžã蟌ã¿ã®æ£ããçµæãè¿ããªãããšã«æ³šæããŠãã ãã-æãæ£ããå®è£
ã§ã¯ãwriteïŒïŒã·ã¹ãã ã³ãŒã«ã䜿çšããå¿
èŠããããŸãã
ãã®å¶éæ¹æ³ã«ã¯å€§ããªãã€ãã¹ããããŸããå¶éãå³å¯ã«èšå®ããããšã¯ã§ããŸããã ããã«ãããä»®æ³ãã·ã³ã«å€§éã®ãªãœãŒã¹ãå²ãåœãŠãããããšã«ãªã£ãŠããå ŽåããµãŒãã¹æäŸã¹ããŒã ã§ã®äœ¿çšãå¶éãããŸãã
Cgroupsã®éçºè
ã¯ãããã»ããµã100ïŒ
䜿çšããïŒå®éã«ã¯å¿
èŠã§ããïŒããšã
æšå¥šããã¢ã€ãã«ç¶æ
ã§ã¯ãããŸããã ããã¯ãéã¿ã®ã¡ã«ããºã ã䜿çšããŠå®è£
ãããŸãã
ãããããã®ãã€ãã¹ã¯ãã°ãã°å€§ããªãã©ã¹ã«ãªããŸãã ããšãã°ãéã¿ããããã50ã30ã20ã®3ã€ã®ä»®æ³ãã·ã³ãš1ã€ã®ããã»ããµã³ã¢ã䜿çšããŸãã ãã¹ãŠã®ãã·ã³ã®è² è·ãæ倧ã®å Žåãåãã·ã³ã«ã¯ããããCPUã®50ã30ã20ããŒã»ã³ããå²ãåœãŠãããŸãã
ä»®æ³ãã·ã³ãç¹å®ã®æç¹ã§ãªãœãŒã¹ãå¿
èŠãšããªãå Žåãå€ãã®å Žåãç¶æ³ãçºçããŸãã 2å°ç®ã®è»ïŒéé30ïŒã«ãªããšããŸãããã ãããã£ãŠãéã¿ã50ãš20ã®2å°ã®ãã·ã³ãæ©èœããŸããããã»ããµãªãœãŒã¹ã®71ïŒ
ïŒ50 /ïŒ50 + 20ïŒïŒã1å°ã®ãã·ã³ã«å²ãåœãŠããã2å°ç®-100ïŒ
-71ïŒ
= 29ïŒ
ã«ãªããŸãã ãã®ãªãœãŒã¹å²ãåœãŠã®åŸ®åŠãªéãã«ãããä»®æ³ãã·ã³ã¯å¿
èŠã«å¿ããŠæ倧ã®ã«ãŒãã«ãã¯ãŒã䜿çšã§ããŸãã
ãã£ã¹ã¯ãµãã·ã¹ãã ã®å¶é
ãã£ã¹ã¯ã®ç¶æ³ã¯ããè€éã§ãããå¶éã®å®è£
ã¯ããå³ããå ŽåããããŸãã
ãã£ã¹ã¯IOã管çããblkioã³ã³ãããŒã©ãŒã®å
éšãèŠãŠã¿ãŸãããã
# cd /cgroup/blkio
# ls
blkio.io_merged blkio.io_service_bytes blkio.io_service_time blkio.reset_stats blkio.time
blkio.weight_device cgroup.event_control release_agent blkio.io_queued
blkio.io_serviced blkio.io_wait_time blkio.sectors blkio.weight cgroup.clone_children
cgroup.procs notify_on_release tasks
ã芧ã®ãšããããã£ã¹ã¯ãµãã·ã¹ãã ã®ããã©ãŒãã³ã¹ãå¶éãããã©ã¡ãŒã¿ãŒãããã€ããããŸãã
- iops -1ç§ãããã®å
¥åºåæäœã®æ°ã
- bps-垯åå¹
- weight-ã·ã¹ãã ã®ééã
iopsãŸãã¯
bpsãèšå®ãããã©ã€ããšããã»ã¹ãæå®ããã«ã¯ã
ã¡ãžã£ãŒãã©ã€ããš
ãã€ããŒãã©ã€ãã決å®ãïŒ
ããã€ã¹ã®åé¡ã«ã€ããŠãåç
§ïŒãããããç¹å¥ãªãã¡ã€ã«ã«éä¿¡ããå¿
èŠããããŸãïŒbpsã®äŸïŒïŒ
# ls -la /dev/sda
brw-rw---- 1 root disk 8 , 0 11 13:59 /dev/sda
# echo $$ > /cgroup/blkio/tasks
# echo 3 > /proc/sys/vm/drop_caches
# echo "8:0 1000000" > /cgroup/blkio/blkio.throttle.read_bps_device
# echo "8:0 1000000" > /cgroup/blkio/blkio.throttle.write_bps_device
# dd if=/dev/zero of=/tmp/zerofile bs=4K count=102400 oflag=direct
# dd if=/tmp/zerofile of=/tmp/zerofile2 bs=4K count=102400
25426+0
25425+0
104140800 (104 MB), 102,21 c, 1,0 MB/c
ãããã£ãŠãããŒãå¶éã䜿çšããå¿
èŠãããå Žåãä»®æ³ãã·ã³ã¯ã
ã¡ãžã£ãŒããã³
ãã€ããŒãæã€å¥ã®ãããã¯ããã€ã¹ïŒLVMããŒãã£ã·ã§ã³ãªã©ïŒã䜿çšããå¿
èŠããããŸãã ãã¡ã€ã«åœ¢åŒã®ç»åã®å Žåã¯ã
blkio.weightã³ã³ãããŒã©ãŒã®ã¿ã䜿çšã§ããŸãã
ãªãddãbashã€ã³ã¿ãŒããªã¿ãŒã«èšå®ããã®ãšåãå¶éã«åŸãã®ãã«ã€ããŠãè«ççãªçåãçããŸãã ãã¹ãŠãéåžžã«ç°¡åã§ã
ãcgroupsã¯ã芪ããåå²ããåã远跡ããããããèªåçã«ã¿ã¹ã¯ã«å
¥åããŸãã
ã«ãŒãã«ã§
CONFIG_BLK_CGROUPããã³
CONFIG_BLK_DEV_THROTTLINGãã©ã¡ãŒã¿ãŒãæå¹ã«ãããšã
blkio.throttling *ã衚瀺ãããããšã«æ³šæããŠãã ããã èå³ã®ããã«ãCGROUPãšBLKã«åŸã£ãŠmenuconfigãæ€çŽ¢ããããšããå§ãããŸã-ããã©ã«ãã§ã¯ãå€ãã®èå³æ·±ãããšããããŸãã
æ®å¿µãªããã
cgroupsã¯ãã£ãã·ã¥ãªãã§ãã£ã¹ã¯ã¢ã¯ã»ã¹ã®ã¿ãå¶éããŸãã ãã£ãã·ã¥ããªã»ããããªãå ŽåããŸãã¯dd
oflag = directãŸãã¯
iflag = directãæå®ããªãå Žåãå¶éã¯é©çšãããŸããã 詳现ã«ã€ããŠã¯ã
ãã¡ããš
ãã¡ããã芧ãã ãã ã
blkio.weightã䜿çšãããšããã¹ãŠãããã·ã³ãã«ã«ãªããŸãããã¹ãŠãcpu.sharesãšåæ§ã«æ©èœããŸãã
éç¹æš©ãŠãŒã¶ãŒã®cgroupãæäœãã
cgroupã§ã¯ãéç¹æš©ãŠãŒã¶ãŒã¯èšé²ã§ããŸããã ãã ãã
libcgãããžã§ã¯ãã«ã¯ã管çè
æš©éãªãã§
cgroupãæäœã§ãããŠãŒãã£ãªãã£ã®ã»ãããå«ãŸããŠããŸãã Debianã§ã¯ã
cgroup-binããã±ãŒãžã䜿çšããŠã€ã³ã¹ããŒã«ã§ããŸãã
ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãæ§æã«å«ãŸãããŠãŒãã£ãªãã£ã衚瀺ãããŸãã
$ ls /usr/*bin/cg*
/usr/bin/cgclassify /usr/bin/cgdelete /usr/bin/cgget /usr/bin/cgsnapshot /usr/sbin/cgconfigparser
/usr/bin/cgcreate /usr/bin/cgexec /usr/bin/cgset /usr/sbin/cgclear /usr/sbin/cgrulesengd
æã䟿å©ãªã®ã¯ã
cgcreateãš
cgdelete ãããã³æ§æãã¡ã€ã«ãèªã¿åã£ãåŸãèµ·åæã«å¿
èŠãªã°ã«ãŒã
cgconfigparserãèªåçã«äœæãã
ã¹ã¯ãªããã§ãã
cgconfigãèšå®ããŠãã·ã¹ãã ã®èµ·åæã«å¿
èŠãªãã¡ã€ã«ã·ã¹ãã ãèªåçã«ããŠã³ããããããã«ããŸãã
$ cat /etc/cgconfig.conf
mount {
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
devices = /cgroup/devices;
# memory = /cgroup/memory;
blkio = /cgroup/blkio;
# freezer = /cgroup/freezer;
cpuset = /cgroup/cpuset;
}
$ sudo /etc/init.d/cgconfig restart
å·å庫ãšã¡ã¢ãªã³ã³ãããŒã©ãŒã¯å®éã«ã¯å¿
èŠãããŸããããŸããã¡ã¢ãªã¯èªåçã«ããŠã³ãããããšãæåŠããå¿
èŠã«å¿ããŠæåã§ã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ã°ã«ãŒããäœæããŠãéç¹æš©ãŠãŒã¶ãŒ
ïŒ
usernameïŒ
usernameãèªå·±æ¹åãè¡ããããã«ããŸãã
$ sudo cgcreate -f 750 -d 750 -a username:libvirt -t username:libvirt -g cpu,blkio:username
ããã§ïŒ
- -fããã³-dã¯ãããããã°ã«ãŒãå
ã®ãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®ã¢ã¯ã»ã¹èš±å¯ãèšå®ããŸãã
- -aããã³-tã¯ãææè
ããµãã·ã¹ãã ã®ãã©ã¡ãŒã¿ãŒãšã¿ã¹ã¯ãã¡ã€ã«ã«èšå®ããŸã
- -gã¯ãã«ãŒãã«é¢é£ããæå®ãããcpuããã³blkioã³ã³ãããŒã©ãŒã®ã°ã«ãŒããäœæããŸãïŒããšãã°ããã®å Žåããããã/ cgroup / cpu / usernameããã³/ cgroup / blkio / usernameã«ãªããŸãïŒã
ãã®åŸã/ cgroup / cpuããã³/ cgroup / blkioãã£ã¬ã¯ããªã«ãæå®ããããŠãŒã¶ãŒåãcgroupã®ã¿ã¹ã¯ãæžã蟌ãããšãã§ãããŠãŒã¶ãŒåãã£ã¬ã¯ããªãäœæãããŠããããšãããããŸãã
ä»®æ³ãã·ã³ãèµ·åããŠããã«å¶éãèšå®ãããšãã«ã°ã«ãŒããäœæããåæ¢ãããšãã«ã°ã«ãŒããåé€ãããšéåžžã«äŸ¿å©ã§ãã
$ sudo cgdelete cpu,blkio:username
ä»®æ³ãã·ã³ã®ãµãŒãã¹ã§cgroupã䜿çšããå Žåãå¶éã®èšå®ãšã°ã«ãŒãã®äœæã®ããã»ã¹ãèªååã§ããŸãã /etc/libvirt/qemu.confãã¡ã€ã«ã§ãqemuãåäœã§ããã³ã³ãããŒã©ãŒãæå®ã§ããŸãã ä»®æ³ãã·ã³ãã¢ã¯ã»ã¹ã§ããããã€ã¹ã®ãªã¹ããè¿œå ããããšãã§ããŸãã
cgroup_controllers = [ "cpu", "devices", "memory", "cpuset", "blkio" ]
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc", "/dev/hpet", "/dev/net/tun",
]
cpuããã³blkioã®éã¿ãèšå®ããã«ã¯ãvirshïŒlibvirtã©ã€ãã©ãªã®äžéš
ããã¹ãã·ã¹ãã ã®æºåã«é¢ããèšäºãåç
§ïŒã䜿çšãããšäŸ¿å©ã§ãã
$ virsh schedinfo --set cpu_shares=1024 debian_guest
$ virsh blkiotune debian_guest --weight 1024
åæã«ã
/ cgroup / cpu / sysdefault / libvirt / qemu / debian_guest / cpu.sharesã®å€ã¯1024ã«å€æŽãããŸããããããæ®å¿µãªãããsysdefaultããªãŒã§ã¯ãå¹³åçãªãŠãŒã¶ãŒã¯ãã©ã¡ãŒã¿ãŒãå€æŽã§ããŸããã
ãããã¯ãŒã¯è² è·ã®å¶é
ããã»ããµãšãã£ã¹ã¯ã®ãªãœãŒã¹ããã£ãããšææ¡ããŸããã çŸåšãæãéèŠãªã®ã¯ãããã¯ãŒã¯ã§ãã 垯åã®å³å¯ãªæåãšãé
延ãšãµãŒããŒè² è·ã®èš±å®¹å€ãåæã«ååŸããããšãéèŠã§ãã ããããããããšã¯ãç§åŠçã«ã·ã§ãŒãã³ã°ãšQoSïŒQuality of ServiceïŒãšåŒã°ããŸãã ã¹ããªãããéžæããã®ã¯ç°¡åã§ã-ä»®æ³ãã·ã³ã䜿çšããããŸããŸãªã·ããªãªãèæ
®ããããšã¯ã¯ããã«å°é£ã§ãã
5 Mbpsã®åž¯åãä»®æ³ãã·ã³ã«å²ãåœãŠãå¿
èŠããããšããŸãã çè«çã«ã¯ã質åã¯åçŽã§ã
tc ïŒæå°é
延ã®ãã垯åïŒã®ã«ãŒã«ãè¿œå ããããšã§è§£æ±ºãããŸãã
tc qdisc add dev debian_guest root handle 1: htb default 20
tc class add dev debian_guest parent 1: classid 1:1 htb rate 5mbit burst 15k
ããããåé¡ã®ç 究ã¯ããã®ãããªåçŽãªåé¢ã§ã¯ååã§ã¯ãªãããšã瀺ããŠããŸãã
HTTPãä»ãã倧éã®ãã©ãã£ãã¯ãããŒãããããµãŒããŒã«å°éããã®ãé£ãããšããŸãã
ããã¯åªå
é äœä»ãã«ãã£ãŠæ±ºå®ãããŸãã
tc class add dev debian_guest parent 1:1 classid 1:10 htb rate 5mbit burst 15k prio 1
æ®ããã¹ãŠïŒ
tc class add dev debian_guest parent 1:1 classid 1:20 htb rate 5mbit burst 15k prio 2
tc qdisc add dev debian_guest parent 1:10 handle 10: sfq perturb 10
SSHã¯ããé«ãèšå®ããå¿
èŠããããŸãã
tc filter add dev debian_guest parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
ICMPãã±ãããé«ãèšå®ããå¿
èŠããããŸãã
tc filter add dev debian_guest parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
TCP ACKãæåªå
äºé
ã§ãã
tc filter add dev debian_guest parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
ãããŠãæ®ããææŸããŸã... 2çªç®ã®åªå
é äœã
ãããçä¿¡ãã©ãã£ãã¯ã§ãã
tc qdisc add dev debian_guest handle ffff: ingress
tc filter add dev debian_guest parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 5mbit burst 15k drop flowid :1
å¥ã®100500çš®é¡ã®ã«ãŒã«ãè¿œå ã§ããŸãããä»®æ³ãã·ã³ã®è©³çŽ°ãèæ
®ããå¿
èŠããããŸã-äœããéããå¿
èŠããããªã©ã
äžè¬ã«ãããããçš®é¡ã®IRCããŒãïŒ6667-6669ïŒããã¬ã³ãïŒ6881-6889ïŒãããã³ãã®ä»ã®ç¥ã®ãªããµãŒãã¹ãéããŠã害ã¯ãããŸããã
åæ¢ãããšãå°æ¥å¿
èŠã®ãªãã«ãŒã«ãåé€ã§ããŸãã
tc qdisc del dev debian_guest root
tc qdisc del dev debian_guest ingress
ã€ã³ã¿ãŒãã§ãŒã¹çµ±èšã¯ç°¡åã«è¡šç€ºã§ããŸãïŒ
tc -s -d qdisc show dev debian_guest
tc -s -d class show dev debian_guest
tc -s -d filter show dev debian_guest
ãããã£ãŠãã€ã³ã¿ãŒãã§ãŒã¹ã«å°çããŠããããåºããã©ãã£ãã¯ã®éã確èªã§ããããããçš®é¡ã®ã°ã©ããç°¡åã«æ§æã§ããŸãã
iptablesãštcã«ãŒã«ãmangleã¢ãžã¥ãŒã«ã®å©ããåããŠïŒGoogleããæäŒãããŸãïŒãtcãä»ããŠãã®ãã©ãã£ãã¯ã管çãããšéåžžã«äŸ¿å©ã§ãã ããšãã°ããã©ãã£ãã¯ãbittorentãšããŠããŒã¯ãã1ãããããã®åž¯åãå²ãåœãŠãå¿
èŠããããŸãã
tc class add dev debian_guest parent 1:1 classid 1:30 htb rate 1kbit prio 3
tc qdisc add dev debian_guest parent 1:30 handle 30: sfq perturb 10
iptables -t mangle -A POSTROUTING -o debian_guest --sport 6881:6889 -j MARK --set-mark 30
iptables -t mangle -A POSTROUTING -o debian_guest --dport 6881:6889 -j MARK --set-mark 30
ãããŠçµè«ãšããŠ
äžé£ã®èšäºïŒ
1ã2ã3ãããã³
4 ïŒãèªãã åŸãlibvirtããŒã«ããããå¶åŸ¡ããKVMä»®æ³åã·ã¹ãã ãã€ã³ã¹ããŒã«ããŠæ§æããç¬èªã®ä»®æ³ãã·ã³ã€ã¡ãŒãžãæ§ç¯ã§ããŸãã ããã«ããããªãœãŒã¹ã®ç¯çŽãã·ã¹ãã ã®ä¿¡é Œæ§ã®åäžïŒã²ã¹ãã·ã¹ãã ã®ã©ã€ããã€ã°ã¬ãŒã·ã§ã³ã«ããïŒãããã³ããã¯ã¢ããã®äœæã®ç°¡çŽ åïŒLVMã¹ãããã·ã§ããã®äœ¿çšãªã©ïŒãå¯èœã«ãªããŸãã
æçãªæ
å ±ããäŒãã§ããããšãé¡ã£ãŠããããã®äžé£ã®èšäºã§ã®ç§ã®çµéšãæéã®ç¯çŽã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ããã§ãæåã®ã·ãªãŒãºã®èšäºã¯å®äºã§ãã äœãããããããã®ãããã°ãã³ã¡ã³ãã§èããŠãã ããããã€ã§ã質åã«çããæºåãã§ããŠããŸãã