注册 登录
自由的生活_软路由 返回首页

心想事成的个人空间 https://bbs.routerclub.com/?681 [收藏] [复制] [分享] [RSS]

日志

一个有趣的东东: rump kernel

已有 6759 次阅读2013-8-31 20:11


最近在搜索dpkk时,发现一个有趣的东东:rump kernel。
他是netbsd下一个有用的功能。
介绍在:
http://www.netbsd.org/docs/rump/
https://github.com/anttikantee/buildrump.sh
通过它,可以将netbsd内核中的一部分模块比如tcp/ip协议栈、文件系统放到其它系统上,
比如linux、Solaris系统中,作为用户进程执行。
于是这样便有了一些有趣的东东:
fs-utils:http://github.com/stacktic/fs-utils
fast userspace packet processing:http://github.com/anttikantee/dpdk-rumptcpip
第二个实现了在dpdk的基础上,挂上了netbsd的协议栈,实现了网络功能。
原理如下:

The hypercall driver in this repository attaches a userspace rump kernel TCP/IP stack to a network interface card accessed via the Intel Data Plane Development Kit DPDK.

in rough diagram form:

------------------------------
|    application process     |
||--------------------------||
|| rump kernel (TCP/IP etc.)||
||--------------------------||
|| dpdk-rumptcpip (dpdkif)  ||
||--------------------------||
|| DPDK                     ||
|----------------------------|
-----------------------------|

我在debian 7.0上,安装上了netbsd-rump和netbsd-fs-utils包,下载在这里:
http://ftp5.gwdg.de/pub/opensuse/repositories/home:/staal1978/Debian_7.0/i386/
通过ldd可以看到
root@routerclub:~/src# ldd /usr/bin/fsu_ls
        linux-gate.so.1 =>  (0xb779f000)
        libfsu.so.0 => /usr/lib/libfsu.so.0 (0xb7780000)
        librumpvfs.so.0 => /usr/lib/librumpvfs.so.0 (0xb772a000)
        librumpdev_disk.so.0 => /usr/lib/librumpdev_disk.so.0 (0xb771d000)
        librumpdev.so.0 => /usr/lib/librumpdev.so.0 (0xb770e000)
        librump.so.0 => /usr/lib/librump.so.0 (0xb7647000)
        librumpuser.so.0 => /usr/lib/librumpuser.so.0 (0xb762d000)
        librumpkern_sys_linux.so.0 => /usr/lib/librumpkern_sys_linux.so.0 (0xb7617000)
        librumpnet_sockin.so.0 => /usr/lib/librumpnet_sockin.so.0 (0xb7611000)
        librumpnet_net.so.0 => /usr/lib/librumpnet_net.so.0 (0xb7579000)
        librumpnet.so.0 => /usr/lib/librumpnet.so.0 (0xb755d000)
        librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb7554000)
        libutil.so.1 => /lib/i386-linux-gnu/i686/cmov/libutil.so.1 (0xb7550000)
        libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb754b000)
        libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb73e8000)
        libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb73cf000)
        /lib/ld-linux.so.2 (0xb77a0000)

在/usr/lib下,可以看到
root@routerclub:/usr/lib# ls libru*.a
librump.a                   librumpdev_sysmon_pic.a  librumpfs_nfsserver_pic.a    librumpkern_z.a
librumpclient.a             librumpdev_ubt.a         librumpfs_nilfs.a            librumpkern_z_pic.a
librumpclient_pic.a         librumpdev_ubt_pic.a     librumpfs_nilfs_pic.a        librumpnet.a
librumpdev.a                librumpdev_ucom.a        librumpfs_ntfs.a             librumpnet_agr.a
librumpdev_audio.a          librumpdev_ucom_pic.a    librumpfs_ntfs_pic.a         librumpnet_agr_pic.a
librumpdev_audio_pic.a      librumpdev_ugenhc.a      librumpfs_null.a             librumpnet_bridge.a
librumpdev_bpf.a            librumpdev_ugenhc_pic.a  librumpfs_null_pic.a         librumpnet_bridge_pic.a
librumpdev_bpf_pic.a        librumpdev_ulpt.a        librumpfs_ptyfs.a            librumpnet_config.a
librumpdev_cgd.a            librumpdev_ulpt_pic.a    librumpfs_ptyfs_pic.a        librumpnet_config_pic.a
librumpdev_cgd_pic.a        librumpdev_umass.a       librumpfs_smbfs.a            librumpnet_local.a
librumpdev_disk.a           librumpdev_umass_pic.a   librumpfs_smbfs_pic.a        librumpnet_local_pic.a
librumpdev_disk_pic.a       librumpdev_usb.a         librumpfs_syspuffs.a         librumpnet_net80211.a
librumpdev_dm.a             librumpdev_usb_pic.a     librumpfs_syspuffs_pic.a     librumpnet_net80211_pic.a
librumpdev_dm_pic.a         librumpdev_wscons.a      librumpfs_sysvbfs.a          librumpnet_net.a
librumpdev_drvctl.a         librumpdev_wscons_pic.a  librumpfs_sysvbfs_pic.a      librumpnet_netbt.a
librumpdev_drvctl_pic.a     librumpfs_cd9660.a       librumpfs_tmpfs.a            librumpnet_netbt_pic.a
librumpdev_fss.a            librumpfs_cd9660_pic.a   librumpfs_tmpfs_pic.a        librumpnet_netinet.a
librumpdev_fss_pic.a        librumpfs_efs.a          librumpfs_udf.a              librumpnet_netinet_pic.a
librumpdev_md.a             librumpfs_efs_pic.a      librumpfs_udf_pic.a          librumpnet_net_pic.a
librumpdev_md_pic.a         librumpfs_ext2fs.a       librumpfs_umap.a             librumpnet_npf.a
librumpdev_netsmb.a         librumpfs_ext2fs_pic.a   librumpfs_umap_pic.a         librumpnet_npf_pic.a
librumpdev_netsmb_pic.a     librumpfs_fdesc.a        librumpfs_union.a            librumpnet_pic.a
librumpdev_pad.a            librumpfs_fdesc_pic.a    librumpfs_union_pic.a        librumpnet_shmif.a
librumpdev_pad_pic.a        librumpfs_ffs.a          librumpfs_v7fs.a             librumpnet_shmif_pic.a
librumpdev_pic.a            librumpfs_ffs_pic.a      librumpfs_v7fs_pic.a         librumpnet_sockin.a
librumpdev_pud.a            librumpfs_hfs.a          librumpfs_zfs.a              librumpnet_sockin_pic.a
librumpdev_pud_pic.a        librumpfs_hfs_pic.a      librumpfs_zfs_pic.a          librumpnet_virtif.a
librumpdev_putter.a         librumpfs_kernfs.a       librumphijack_pic.a          librumpnet_virtif_pic.a
librumpdev_putter_pic.a     librumpfs_kernfs_pic.a   librump_justtesting.a        librump_pic.a
librumpdev_raidframe.a      librumpfs_lfs.a          librump_justtesting_pic.a    librumpuser.a
librumpdev_raidframe_pic.a  librumpfs_lfs_pic.a      librumpkern_crypto.a         librumpuser_pic.a
librumpdev_rnd.a            librumpfs_mfs.a          librumpkern_crypto_pic.a     librumpvfs.a
librumpdev_rnd_pic.a        librumpfs_mfs_pic.a      librumpkern_solaris.a        librumpvfs_fifofs.a
librumpdev_scsipi.a         librumpfs_msdos.a        librumpkern_solaris_pic.a    librumpvfs_fifofs_pic.a
librumpdev_scsipi_pic.a     librumpfs_msdos_pic.a    librumpkern_sys_linux.a      librumpvfs_layerfs.a
librumpdev_scsitest.a       librumpfs_nfs.a          librumpkern_sys_linux_pic.a  librumpvfs_layerfs_pic.a
librumpdev_scsitest_pic.a   librumpfs_nfs_pic.a      librumpkern_tty.a            librumpvfs_pic.a
librumpdev_sysmon.a         librumpfs_nfsserver.a    librumpkern_tty_pic.a

感觉实际上把netbsd的内核模块编译成为用户空间的so或者a静态库,从而在用户程序中调用bsd内核中的功能。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-8 12:46 , Processed in 0.038050 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

返回顶部