Re: [patch] dynamic buffer cache hash table size

Heinz Mauelshagen (mauelsha@ez-darmstadt.telekom.de)
Sat, 23 Jan 1999 0:00:23 MET


>
> On Fri, 22 Jan 1999, Heinz Mauelshagen wrote:
>
> > The bad performance nearly stays the same, when the buffermem is large 8*(
> > Only adding my artificial limitation for the buffermem to limit it
> > to for eg. 20M is almost fine.
>
> Ok, now please do a crazy real hack test.
>
> I want you alloc 1000 pages (4mbyte of RAM) for the buffer cache hash. If
> also that way you won't see differences I will be interested in other
> test.
>
> Please start with the last patch applyed. You'll find a function called
> my new buffer_hash_init() near line 1500 of linux/fs/buffers.c
>
> Plese edit this code:
>
> mem_pages = (mem_pages + (1<<9)) >> 9;
>
> and modify it to:
>
> mem_pages = 1000;

Have to do that test run later, but have a look at the already existing
one below.
Will send you the output later

>
> Then recompile and reboot. If you'll still see bad performances with the
> memory full of buffers could you please append="profile=4" in lilo.conf?
>
> Then reboot and tell me which are the most run functions (maybe
> shrink_mmap?).
>

Ingo Molnar asked me just today for a profile.
Most of the time is wasted in sync_buffers.

20-30 ticks per command invocation with 8M buffermem and 500-1000!!! ticks
with 120M buffermem.

This is not with your 4M hack!!!
I'll send the output with 4M hack soon.

Regards,
Heinz

57697 total 0.0801
25049 sync_buffers 54.4543
4960 refill_freelist 27.5556
2625 si_meminfo 19.8864
2181 try_to_free_buffers 16.0368
1856 __wake_up 23.2000
1457 proc_root_lookup 4.7928
1131 invalidate_buffers 8.8359
1108 find_inode 21.3077
1100 schedule 1.2673
841 proc_lookup 3.7545
699 do_select 1.2135
672 system_call 12.0000
651 find_buffer 9.5735
617 vgacon_scroll 1.1598
556 vgacon_set_origin 4.0882
500 __pollwait 2.5000
485 sys_select 0.4225
432 __get_free_pages 0.7826
412 d_lookup 1.8727
393 sys_ioctl 1.0452
342 vgacon_save_screen 3.8864
335 do_gettimeofday 2.9911
313 make_request 0.2038
298 ext2_find_entry 0.4331
287 add_timer 0.7474
266 do_anonymous_page 1.5833
258 get_new_inode 0.8487
235 kmalloc 0.5817
218 unix_poll 1.7581
210 free_pages 0.7500
208 lookup_dentry 0.4727
206 free_wait 1.3205
191 d_alloc 0.5134
188 do_wp_page 0.3113
181 kmem_cache_alloc 0.5387
176 unplug_device 2.0952
169 schedule_timeout 1.2071
164 aic7xxx_isr 0.1168
163 open_namei 0.2122
160 wakeup_bdflush 1.1111
147 filemap_nopage 0.1810
144 __switch_to 0.7347
129 unix_ioctl 1.0403
125 sys_gettimeofday 0.8224
118 restore_all 7.8667
111 max_select_fd 0.6768
108 kfree 0.2269
103 permission 0.3962
97 file_read_actor 1.2125
93 proc_get_inode 0.3577
89 get_empty_filp 0.3771
87 sock_poll 2.1750
85 filp_open 0.3427
84 page_fault 7.0000
82 real_lookup 0.6613
80 proc_read_inode 0.2740
74 clean_inode 0.7708
72 add_request 0.1017
68 __free_page 0.2931
66 do_follow_link 0.5000
64 iget 0.4103
63 pipe_poll 0.7875
63 insert_into_queues 0.2316
63 getblk 0.1167
62 sys_open 0.3690
62 kmem_cache_free 0.1505
62 handle_IRQ_event 0.4429
57 fput 0.7917
56 ll_rw_block 0.0864
55 block_write 0.0386
53 sys_write 0.1815
52 sock_ioctl 1.3000
52 proc_statfs 0.4815
50 handle_mm_fault 0.1025
49 do_page_fault 0.0592
48 sock_readv_writev 0.3243
47 file_ioctl 0.2217
47 dput 0.1433
45 block_read 0.0342
44 unix_shutdown 0.3667
44 sys_nanosleep 0.1196
44 sync_old_buffers 0.1038
42 unix_stream_recvmsg 0.0439
42 init_proc_fs 1.7500
40 get_unused_fd 0.2222
39 unix_stream_sendmsg 0.0617
38 si_swapinfo 0.2436
38 put_unused_buffer_head 0.5000
36 zap_page_range 0.0796
36 sys_read 0.1385
35 ret_from_sys_call 2.0588
35 ext2_permission 0.1535
34 proc_permission 0.1809
34 del_timer 0.3864
32 remove_from_queues 0.1067
32 do_no_page 0.1176
30 refile_buffer 0.1829
30 mark_buffer_uptodate 0.3571
30 clear_page_tables 0.1415
29 vt_console_print 0.0382
27 math_state_restore 0.4821
26 d_delete 0.2407
25 do_fork 0.0115
25 d_rehash 0.3289
24 put_write_access 2.0000
24 copy_page_range 0.0469
23 sys_llseek 0.0676
23 getname 0.1597
23 do_autoconfig 0.1742
22 reserved_lookup 0.3056
22 get_unused_buffer_head 0.1341
21 do_con_trol 0.0049
21 do_bottom_half 0.1250
21 __release_sock 0.1641
20 get_empty_inode 0.1064
20 find_vma 0.2000
20 do_mmap 0.0202
19 strncpy_from_user 0.2375
19 grow_inodes 0.0448
19 get_hash_table 0.5938
19 device_not_available 0.3167
18 exec_modprobe 0.0484
18 d_alloc_root 0.3000
18 cached_lookup 0.2368
17 vt_ioctl 0.0023
17 number 0.0373
17 error_code 0.3269
16 tcp_listen_poll 0.1739
16 sys_wait4 0.0173
16 pipe_ioctl 0.4000
16 ext2_update_inode 0.0200
16 ext2_count_free 0.2000
16 d_instantiate 0.3636
16 cp_new_stat 0.0563
16 copy_strings 0.0367
16 alloc_skb 0.0606
16 __namei 0.1739
15 shrink_dcache_memory 1.2500
15 copy_files 0.0421
15 bdflush 0.0247
14 sys_sigprocmask 0.0376
14 sync_inodes 0.0479
14 ret_with_reschedule 0.8750
13 sys_brk 0.0406
13 proc_delete_dentry 0.4643
13 inet_shutdown 0.1121
13 do_generic_file_read 0.0084
13 __wait_on_buffer 0.0433
12 shm_unuse 0.1364
12 set_modem_info 0.0469
12 select_dcache 0.0448
12 rs_break 0.1579
12 merge_segments 0.0330
12 exit_notify 0.0201
12 create_buffers 0.0238
11 sys_close 0.0887
11 synchronize_bh 0.1447
11 set_writetime 0.1719
11 set_selection 0.0070
11 reset_terminal 0.0205
11 ext2_getblk 0.0198
11 __get_request_wait 0.0229
11 __brelse 0.2115
10 sys_newfstat 0.0595
10 init_buffer 0.1667
10 grow_buffers 0.0379
9 sync_block 0.0511
8 wake_up_process 0.0500
8 sys_nfsservctl 0.0645
8 sock_sendmsg 0.0455
8 inode_getblk 0.0171
8 do_munmap 0.0139
8 clear_user 0.1111
8 __global_restore_flags 0.1111
8 __get_user_2 0.2857
7 sys_newstat 0.0473
7 sys_lseek 0.0312
7 sprintf 0.0018
7 sock_alloc_send_skb 0.0417
7 set_serial_info 0.0061
7 insert_vm_struct 0.0197
7 ext2_check_dir_entry 0.0389
7 __get_user_4 0.2917
6 update_atime 0.0600
6 sock_wmalloc 0.0789
6 sock_recvmsg 0.0349
6 rs_interrupt_single 0.0063
6 get_serial_info 0.0294
6 get_irq_list 0.0179
6 ext2_readdir 0.0042
6 close_fp 0.0600
6 __kfree_skb 0.0366
5 vm_enough_memory 0.0391
5 unix_dgram_sendmsg 0.0082
5 tcp_poll 0.0208
5 tcp_find_established 0.0735
5 sys_writev 0.0245
5 sys_sigaction 0.0195
5 sock_write 0.0305
5 sock_read 0.0312
5 simple_strtoul 0.0329
5 set_blocksize 0.0132
5 old_mmap 0.0179
5 kmem_cache_grow 0.0054
5 generic_file_read 0.0391
5 find_vma_prev 0.0260
5 ext2_new_block 0.0021
5 do_exit 0.0076
5 brw_page 0.0053
4 sock_rfree 0.2000
4 locks_remove_posix 0.0270
4 load_elf_binary 0.0014
4 iput 0.0071
4 inet_poll 0.0909
4 get_unmapped_area 0.0370
4 get_modem_info 0.0250
4 ext2_check_blocks_bitmap 0.0059
4 de_get 0.3333
4 __udelay 0.0455
4 __put_user_1 0.2000
3 tcp_readable 0.0179
3 sys_newlstat 0.0203
3 sys_munmap 0.0259
3 sys_getdents 0.0082
3 sock_wfree 0.0938
3 sock_release 0.0375
3 show_net_buffers 0.0441
3 release 0.0082
3 put_page 0.0750
3 printk 0.0077
3 print_hostbyte 0.0268
3 mod_timer 0.0074
3 kfree_skbmem 0.0441
3 ip_getsockopt 0.0033
3 get_kstat 0.0050
3 generic_file_mmap 0.0183
3 flush_old_exec 0.0063
3 ext2_read_inode 0.0031
3 ext2_alloc_block 0.0093
3 exit_mmap 0.0112
3 do_syslog 0.0048
3 do_readv_writev 0.0060
3 do_pipe 0.0084
3 default_llseek 0.0250
3 change_speed 0.0029
3 bread 0.0221
3 __put_user_2 0.1071
3 __generic_copy_to_user 0.0500
2 unmap_fixup 0.0069
2 unix_stream_write_space 0.0312
2 timer_bh 0.0022
2 sys_fstat 0.0119
2 sys_access 0.0079
2 sync_supers 0.0161
2 strtok 0.0200
2 startup_32 0.0122
2 setup_frame 0.0043
2 sel_pos 0.0357
2 scsicam_bios_param 0.0085
2 rs_unthrottle 0.0185
2 rs_throttle 0.0217
2 ret_from_exception 0.1250
2 restore_sigcontext 0.0050
2 reschedule 0.1667
2 put_dirty_page 0.0054
2 prune_dcache 0.0089
2 memcpy_toiovec 0.0200
2 load_elf_interp 0.0029
2 is_read_only 0.0385
2 init_private_file 0.0208
2 get_process_array 0.0125
2 get_pid 0.0066
2 fs_may_remount_ro 0.0250
2 free_page_and_swap_cache 0.0208
2 flush_signal_handlers 0.0333
2 filldir 0.0152
2 ext2_free_blocks 0.0027
2 ext2_file_write 0.0017
2 ext2_bmap 0.0034
2 count 0.0455
2 copy_thread 0.0098
2 aic7xxx_setup 0.0023
2 __wait_on_page 0.0068
2 __get_user_1 0.1000
1 write_inode_now 0.0041
1 vcs_scr_writew 0.0192
1 vc_resize 0.0009
1 unix_gc 0.0009
1 unix_dgram_recvmsg 0.0030
1 try_to_free_inodes 0.0104
1 trunc_indirect 0.0014
1 trunc_direct 0.0032
1 sys_unlink 0.0043
1 sys_time 0.0312
1 sys_stat 0.0068
1 sys_setpgid 0.0042
1 sys_personality 0.0061
1 sys_newuname 0.0086
1 sys_execve 0.0074
1 sys_dup2 0.0024
1 sys_chdir 0.0068
1 sync_indirect 0.0071
1 sync_iblock 0.0109
1 start_tty 0.0069
1 sock_wake_async 0.0109
1 sock_fasync 0.0037
1 shrink_dcache_sb 0.0034
1 setup_arg_pages 0.0037
1 set_mtrr_done 0.0156
1 set_device_ro 0.0114
1 send_sig_info 0.0015
1 search_binary_handler 0.0035
1 scsi_proc_info 0.0005
1 save_i387 0.0093
1 rs_write_room 0.0357
1 rs_start 0.0147
1 rs_chars_in_buffer 0.0625
1 ret_from_intr 0.0312
1 request_module 0.0025
1 release_segments 0.0357
1 read_exec 0.0027
1 read_284x_seeprom 0.0007
1 put_filp 0.0192
1 proc_delete_inode 0.0227
1 pipe_write 0.0018
1 pipe_read 0.0027
1 new_page_tables 0.0049
1 n_tty_receive_buf 0.0003
1 memcpy_tokerneliovec 0.0125
1 memcpy_fromiovec 0.0100
1 locks_remove_flock 0.0069
1 load__block_bitmap 0.0027
1 interruptible_sleep_on 0.0057
1 insert_file_free 0.0250
1 in_group_p 0.0156
1 grab_task 0.0076
1 get_root_array 0.0023
1 get_hardblocksize 0.0278
1 get_fops 0.0093
1 generic_readpage 0.0071
1 forget_segments 0.0250
1 ext2_get_group_desc 0.0069
1 ext2_file_lseek 0.0076
1 ext2_delete_entry 0.0086
1 ext2_add_entry 0.0013
1 exit_sighand 0.0119
1 do_sigaction 0.0029
1 do_setitimer 0.0034
1 do_execve 0.0021
1 csi_X 0.0076
1 cp_old_stat 0.0045
1 copy_segments 0.0069
1 con_font_op 0.0013
1 clear_inode 0.0125
1 block_getblk 0.0015
1 bcopy 0.0250
1 bad_get_user 0.1250
1 avl_rebalance 0.0027
1 array_read 0.0018
1 __mark_inode_dirty 0.0104
1 __global_cli 0.0033
1 __generic_copy_from_user 0.0167

--

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Systemmanagement Entwicklungsbereich 2 Deutsche Telekom AG Entwicklungszentrum Darmstadt Heinz Mauelshagen Otto-Roehm-Strasse 71c Postfach 10 05 41 mge@ez-darmstadt.telekom.de 64205 Darmstadt Germany +49 6151 886-425 FAX-386 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/